SQL语句
SQL通用语法
- SQL语句可以单行或多行书写,以分号结尾
- SQL语句可以使用空格 / 缩进来增强语句的可读性
- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
- 注释:
- 单行注释: -- 注释内容 或 # 注释内容(MySQL特有)
- 多行注释 : /* 注释内容 */
SQL分类
分类 | 全称 | 说明 |
---|---|---|
DDL | Data Definition Langusge | 数据定义语言,用来定义数据库对象(数据库,表,字段) |
DML | Data Manipulation Language | 数据操作语言,用来对数据库表中的数据进行增删改 |
DQL | Data Query Language | 数据查询语言,用来查询数据库中表的记录 |
DCL | Data Control Language | 数据控制语言,用来创建数据库用户、控制数据库的访问权限 |
DDL语句
- DDL - 数据库操作
查询 查询所有数据库 SHOW DATABASES; 查询当前数据库 SELECT DATABASE(); 创建 CREATE DATABASE [IF NOT EXISTS] 数据库名 [DRFAULT CHARSET 字符集] [COLLATE 排序规则]; 删除 DROP DATABASE [IF EXISTS] 数据库名; 使用 USE 数据库名;
- DDL - 表操作
- -查询
查询当前数据库所有表 SHOW TABLES; 查询表结构 DESC 表名; 查询指定表的建表语句 SHOW CREATE TABLE 表名;
- 创建
CREATE TABLE 表名( 字段1 字段1类型[COMMENT 字段1注释], 字段2 字段2类型[COMMENT 字段2注释], 字段3 字段3类型[COMMENT 字段3注释] )[COMMENT 表注释];
- 修改
添加字段 ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束]; 修改数据类型 ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度); 修改字段名和字段类型 ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束]; 删除字段 ALTER TABLE 表名 DROP 字段名; 修改表名 ALTER TABLE 表名 RENAME TO 新表名;
- 删除
删除表 DROP TABLE [IF EXISTS ] 表名; 删除指定表,并重新创建该表 TRUNCATE TABLE 表名;
- -查询
DML语句
-
添加数据
给指定字段添加数据 INSERT INTO 表名 (字段名1,字段名2,...) VALUES(值1,值2,...); 给全部字段添加数据 INSERT INTO 表名 VALUES(值1,值2,...); 批量添加数据 INSERT INTO 表名 (字段名1,字段名2,...) VALUES (值1,值2,...),(值1,值2,...),(值1,值2,...); INSERT INTO 表名 VALUES (值1,值2,...),(值1,值2,...),(值1,值2,...);
注意;
-
插入数据时,指定的字段顺序需要与值的顺序是一 一 对应的。
-
字符串和日期型数据应该包含在引号中。
-
插入数据的大小,应该在字段的规定范围内。
-
-
修改数据
UPDATE 表名 SET 字段名1=值1,字段名2=值2,... [WHERE 条件];
注意;修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
- 删除数据
DELETE FROM 表名 [WHERE 条件]
注意:
-
DELETE语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据
-
DELETE语句不能删除某一个字段的值可以使用(UPDATE)。
-
DQL语句
-
语法
SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后条件列表 ORDER BY 排序字段列表 LIMIT 分页参数
-
基本查询
查询多个字段 SELECT 字段1,字段2,字段3... FROM 表名; SELECT * FROM 表名; 设置别名 SELECT 字段1 [AS 别名1],字段2[AS 别名2]... FROM 表名; 去除重复记录 SELECT DISTINCT 字段列表 FROM 表名;
- 条件查询
-
语法 SELECT 字段列表 FROM 表名 WHERE 条件列表;
- 条件
比较运算符 功能 > 大于 >= 大于等于 < 小于 <= 小于等于 = 等于 <> 或 != 不等于 BETWEEN... AND... 在某个范围之内(左边最小值、右边最大值,含最小值) IN(...) 在in之后的列表中的值,多选一 LIKE 占位符 模糊匹配( _ 匹配单个字符, % 匹配任意个字符) IS NULL 是NULL 逻辑运算符 功能 AND 或 && 并且(多个条件同时成立) OR 或 || 或者(多个条件任意一个成立) NOT 或 ! 非,不是 -
聚合函数
- 聚合函数:将一列数据作为整体,进行纵向计算
-
常见的聚合函数 函数 功能 count 统计数量 max 最大值 min 最小值 avg 平均值 sum 求和 - 语法
SELECT 聚合函数(字段列表) FROM 表名;
注意: null值不参与所有聚合函数计算
-
-
分组查询
-
语法
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后的过滤条件];
- where 和 having 的区别
- 执行时机不同:where 是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
- 判断条件不同:where 不能对聚合函数进行判断,而 having 可以。
- 注意:
- 执行顺序: where > 聚合函数 > having
- 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
- 排序查询
- 语法
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式,字段2 排序方式2;
- 排序方式
- ASC : 升序(默认值)
- DESC : 降序
- 注意:如果是多个字段,当第一个字段值相同时,才会根据第二个字段进行排序。
- 语法
-
- 分页查询
- 语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;
- 注意
- 起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数
- 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
- 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。
- 语法
- DQL-执行顺序:FROM ---> WHERE ---> GROUP BY ---> SELECT ---> ORDER BY ----> LIMIT
DCL语句
- 查询用户
USE mysql; SELECT * FROM user;
- 创建用户
CREATE USER '用户名'@'主机名' IFENTIFIED BY '密码';
- 修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
- 删除用户
DROP USER '用户名'@'主机名';
-
注意:
-
主机名可以使用 % 通配。
-
这类SQL开发人员操作比较少,主要是DBA (Database Administrator 数据库管理员)使用。
-
- DCL - 控制权限
权限 说明 ALL, ALL PRIVILEGES 所有权限 SELECT 查询数据 INSERT 插入数据 UPDATE 修改数据 DELETE 删除数据 ALTER 修改表 DROP 删除数据库/表/视图 CREATE 创建数据库/表 - 查询权限
SHOW GRANTS FOR '用户名'@'主机名';
-
授予权限
GRANT 权限列表 ON 数据库.表名 TO '用户名'@'主机名';
-
撤销权限
REVOKE 权限列表 ON 数据库.表名 FROM '用户名'@'主机名';
-
注意:
-
多个权限之间,使用逗号分隔。
-
授权时,数据库名和表名可以使用 * 进行通配,代表所有。
-
- 查询权限