MySQL(基础篇)——SQL

一.SQL分类

MySQL(基础篇)——SQL_第1张图片

 二.DDL(数据定义语言)

1.DDL——数据库操作

① 查询

        查询所有数据库          SHOW  DATABASES

        查询当前所处数据库    SELECT  DATABASE()

② 创建

        CREATE  DATABASE  [IF NOT EXISTS] 数据库名(通常以db结尾) [DEFAULT  CHARSET 字符集] [COLLATE 排序规则]

③ 删除

        DROP DATABASE [IF EXISTS] 数据库名

④ 使用

        USE 数据库名 

2.DDL——表操作——查询

① 查询当前数据库所有表

        SHOW TABLES  

前提:通过USE指令,使用该数据库 

② 查询表结构

DESC  表名 

③ 查询指定表的建表语句

 SHOW CREATE TABLE  表名

3.DDL——表操作——创建 

CREATE TABLE  表名(

        列名1  数据类型  [约束]  [默认值]  [注释] ...,

        列名2  数据类型  [约束]  [默认值]  [注释] ...,

        列名3  数据类型  [约束]  [默认值]  [注释] ...

        ...

) [COMMENT  表注释]

注:[...]为可选参数,最后一个字段后面没有逗号。 

4.DDL——表操作——数据类型

        MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。

(1) 数值类型

① 整数

MySQL(基础篇)——SQL_第2张图片

② 浮点

FLOAT、DOUBLE、DECIMAL(依赖于M(精度)和D(标度)的值)

 DECIMAL(M,D)

M:精度,数据的总长度

D:标度,小数点后面的长度

(2) 字符串类型

CHAR(n)   长度为n的定长字符串,最大长度为255个字符

VARCHAR(n)  最大长度为n的可变字符串

MySQL(基础篇)——SQL_第3张图片

(3) 日期时间类型

MySQL(基础篇)——SQL_第4张图片

5.DDL——表操作——修改 

(1) 添加字段

 ALTER  TABLE  表名  ADD  字段名  数据类型  [约束]  [默认值]  [注释]

(2) 修改数据类型

  ALTER  TABLE  表名  MODIFY  字段名  新数据类型

(3) 修改字段名和数据类型

 ALTER  TABLE  表名  CHANGE 旧字段名  新字段名  数据类型  [约束]  [注释]

(4) 删除字段

  ALTER  TABLE  表名  DROP  字段名

(5) 修改表名

  ALTER  TABLE  表名  RENAME  TO  新字段名

6.DDL——表操作——删除 

 ① 删除表

DROP  TABLE  [IF  EXISTS]  表名

② 删除指定表,并重新创建该表

TRUNCATE  TABLE  表名 

三.DML(数据操作语言) 

        用来对数据库中的数据记录进行增删改操作。

  • 添加数据(insert)
  • 修改数据(updata)
  • 删除数据(delete)
1.DML——添加数据

(1)给指定字段添加数据

INSERT  INTO  表名(字段1,字段2,...)  VALUES  (值1,值2,...) 

(2)给全部字段添加数据

 INSERT  INTO  表名  VALUES  (值1,值2,...) 

(3) 批量添加数据

INSERT  INTO  表名  (字段名1,字段名2,...)  VALUES  (值1,值2,...)(值1,值2,...) 

 INSERT  INTO  表名  VALUES  (值1,值2,...)(值1,值2,...) 

注:

  •  插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
  • 若插入的数据是字符串或日期型数据应该包含在引号中。
  • 插入数据的大小,应该在字段的规定的范围内。
2.DML——修改数据

UPDATE  表名  SET  字段名1=值1,字段名2=值2,...[WHERE  条件] 

注:修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。

eg: update  student  set  name  =  'gty'  where  id = 2 

3.DML——删除数据 

DELETE  FROM  表名  [WHERE  条件] 

注:

  •  DELETE的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。
  • DELETE语句不能删除某一个字段的值(可以使用UPDATE(将该字段的值置为NULL))

补充:

TRUNCATE  TABLE  表名      -------  清空整张表 

四.DQL(数据查询语言) 

        用来查询数据库中的数据。

查询关键字:SELECT 

  • DQL——语法 

MySQL(基础篇)——SQL_第5张图片

  • 基本查询
  • 条件查询(WHERE)
  • 聚合函数(count、max、min、avg、sum)
  • 分组查询(GROUP  BY)
  • 排序查询(ORDER  BY)
  • 分页查询(LIMIT) 
1.DQL——基本查询

(1) 查询多个字段

SELECT  字段1,字段2,字段3 ...  FROM  表名

 SELECT   FROM  表名

(2) 设置别名(增加可读性,不是必须的,设置别名时AS可以省略)

 SELECT  字段1  AS  别名1,字段2  AS  别名2 ...  FROM  表名

(3) 去除重复记录

SELECT  DISTINCT  字段列表  FROM  表名 

eg : select  distinct  subject  from  student 

2.DQL——条件查询

 (1) 语法

SELECT  字段列表  FROM  表名  WHERE  条件列表

(2)  条件

MySQL(基础篇)——SQL_第6张图片

eg: select  *  from  student  where  name  like  '_ _'               查询名字为两个字的学生

      select  *  from  student  where  phoneNum  like  '%6'      查询手机号最后一位为6的学生

3.DQL——聚合函数

(1) 介绍

        将一列数据作为一个整体,进行纵向计算。

(2) 常见聚合函数

 MySQL(基础篇)——SQL_第7张图片

(3) 语法

SELECT  聚合函数(字段列表)  FROM  表名 

注:NULL值不参与所有聚合函数运算 

eg:① select  count(*)  from  student  / select  count(id)  from  student    统计学生人数

     ② select  avg(age)  from  student              计算学生的平均年龄

     ③ select  max(age)  from  student             计算学生的最大年龄

     ④ select  min(age)  from  student              计算学生的最小年龄

4.DQL——分组查询 

(1) 语法

SELECT  字段列表  FROM  表名  [WHERE  条件]  GROUP  BY  分组字段名  [HAVING  分组过滤条件] 

(2) where与having的区别

① 执行时机不同:where是分组前进行过滤,不满足where条件,不参与分组;而having是分组后对结果进行过滤。

②  判断条件不同:where不能对聚合函数进行判断,而having可以。

注:

  • 执行顺序:where > 聚合函数 > having
  • 分组之后,查询的字段一般为聚合函数,查询其他字段无意义

eg: select  gebder, count(*)  from  student  group  by  gender

                                                        根据性别分组,统计男同学和女同学的数量

      select  gender, avg(age)  from  student  group  by  gender

                                                        根据性别分组,统计男同学和女同学的平均年龄

      select  homeAddress, count(*)  from  student  where  age < 20 group by  homeAddress        having  count(*) >= 3                 

        查询年龄小于20的学生,并根据家庭地址分类,获取学生数量大于等于3的家庭地址

5.DQL——排序查询

(1) 语法

 SELECT  字段列表  FROM  表名  ORDER  BY  字段1  排序方式1, 字段2  排序方法2 

                                                                                                 (支持多字段排序)

(2) 排序方式

  • ASC:升序(默认值)
  • DESC:降序 

注:

    如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序 

eg: select * from  student  order  by  age  asc

                                                根据年龄升序排序

      select * from  student  order  by  age  asc, intime  desc 

                                                根据年龄升序排序,年龄相同,根据入学时间进行降序排序

6.DQL——分页查询 

(1) 语法

SELECT  字段列表  FROM  表名  LIMIT  起始索引, 查询记录数 

注:

  • 起始索引从0开始,起始索引=(查询页码 - 1) * 每页显示记录数。
  • 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
  • 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10 。

eg: select * from  student  linit 0,10       查询第一页学生数据,展示10条数据

      select * from  student  linit  10     ------>上一行的简写形式

  • DQL——执行顺序 

 MySQL(基础篇)——SQL_第8张图片

 五.DCL(数据控制语言)

        用来管理数据库用户,控制数据库的访问权限。

MySQL(基础篇)——SQL_第9张图片

1.DCL——管理用户 

(1) 查询用户

USE  mysql

SELECT * FROM  user 

(2) 创建用户

CREATE  USER  '用户名'@'主机名'  IDENTIFIED  BY  '密码' 

(3) 修改用户密码

ALTER USER  '用户名'@'主机名'   IDENTIFIED WITH  mysql_native_password BY  '新密码'

(4) 删除用户

 DROP  USER  '用户名'@'主机名'

注:

  • 主机名可以用%通配。
  • 这类SQL开发人员操作的比较少,主要是DBA(DataBase ADministrator  数据库管理人员)使用。 
2.DCL——权限控制 

        MySQL中定义了很多种权限,但是常用的就一下几种:

MySQL(基础篇)——SQL_第10张图片

(1) 查询权限

SHOW  GRANTS  FOR    '用户名'@'主机名'

(2) 授予权限

GRANT  权限列表  ON  数据库名.表名  TO   '用户名'@'主机名' 

(3) 撤销权限

REVOKE  权限列表  ON  数据库名.表名  FROM   '用户名'@'主机名' 

 注:

  • 多个权限之间,使用逗号分隔。
  • 授权时,数据库名和表名可以使用 * 进行通配,代表所有。

 

你可能感兴趣的:(mysql,sql,数据库)