一.DQL
DQL
数据查询语言,用来查询数据库中表的记录
基础查询
查询字段:
SELECT 字段名 FROM 表名;
查询多个字段:
SELECT 字段1, 字段2, 字段3, ... FROM 表名;
SELECT * FROM 表名;
条件查询
语法:SELECT 字段名 FROM 表名 WHERE 条件列表;
条件一般为比较运算符或逻辑运算符,当然,也可能两者同时存在
比较运算符
运算符 | 作用 |
---|---|
= | 等于 |
<=> | 安全的等于 |
<> 或者 != | 不等于 |
<= | 小于等于 |
>= | 大于等于 |
> | 大于 |
IS NULL 或者 ISNULL | 判断一个值是否为空 |
IS NOT NULL | 判断一个值是否不为空 |
BETWEEN AND | 判断一个值是否落在两个值之间 |
逻辑运算符
逻辑运算符 | 作用 |
---|---|
AND 或 && | 并且(多个条件同时成立) |
OR 或 || | 或者(多个条件任意一个成立) |
NOT 或 ! | 非,不是 |
例如在student表中寻找年龄小于19岁的
select * from student where age < 19;
聚合查询
聚合查询需要用到聚合函数
常见聚合函数:
函数 | 功能 |
---|---|
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
语法:SELECT 聚合函数(字段名) FROM 表名;
例:SELECT count(id) from student where age = 19;
查询student表中年龄等于19岁的学生数量
分组查询
语法:SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后的过滤条件 ];
PS:[WHERE]和[HAVING]的区别是执行的时间不同,[WHERE]执行在分组前,被[WHERE]过滤的不参与分组,[HAVING]执行在分组之后,在分组之后的数据进行过滤
,并且[WHERE]不能对聚合函数进行判断
例:SELECT count(*) from student
group by gender;
根据性别分组统计student表中男女生的数量
排序查询
语法:SELECT 字段列表 FROM 表名 ORDER BY 字段名 排序方式;
排序方式:
ASC 升序排序
DESC 降序排序
PS:ASC为默认排序方法,当未指定排序方法时,按照升序排序
S
ELECT * FROM student ORDER BY age ASC;
按照年龄升序对学生排序
PS:当同时存在多个字段时只有当上一个字段的值相等时才会比较后面字段的值
分页查询
语法:SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;
PS:起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数,如果查询的是第一页数据,起始索引可以省略,直接简写 LIMIT 10
二.DCL
数据控制语言,用来创建数据库用户、控制数据库的控制权限
创建用户:CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
修改用户密码:ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
删除用户:DROP USER '用户名'@'主机名';
例:
创建用户'周忠泉'能在任意主机访问密码为123456
create user '周忠泉'@'%' identified by '123456';
PS:'%'表示主机的通配名,在此次表示允许任意主机访问
权限控制
常用权限:
权限 | 说明 |
---|---|
ALL, ALL PRIVILEGES | 所有权限 |
SELECT | 查询数据 |
INSERT | 插入数据 |
UPDATE | 修改数据 |
DELETE | 删除数据 |
ALTER | 修改表 |
DROP | 删除数据库/表/视图 |
CREATE | 创建数据库/表 |
查询权限:SHOW GRANTS FOR '用户名'@'主机名';
授予权限:GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
撤销权限:REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
PS:数据库名和表名可以用'*'通配,如果同时授予多个权限,用','隔开