DQL 数据查询语言
语法:
SELECT 需要查询的字段 FROM 表名
注意点:
1. * 代表的是查询所有的字段
2.可以通过AS修改字段名
3. DISTINCT 可以实现自动去重
先随便创建一个表
在emp表中查询(ename,sex)
用AS方法,修改当前查询字段名
在 dept_name 中,查找并去重
SELECT ename,salary+1000 AS '涨薪后的新资' FROM emp;
SELECT * FROM emp WHERE emp.`salary` >5000;
# 女生的平价薪资
# 用 AVG 进行平方
SELECT AVG(emp.`salary`) FROM emp WHERE sex='女';
筛选,薪资在 5000-10000以及3500以下
SELECT * FROM emp WHERE (emp.`salary` BETWEEN 5000 AND 10000) OR (emp.`salary` <3500);
# LIKE 模糊查找 _只匹配一位
SELECT * FROM emp WHERE emp.`ename` LIKE '吴%';
SELECT * FROM emp WHERE emp.`ename` LIKE '吴__';
排序
单个字段排序
SELECT 字段 FROM ORDER BY ASC|DESC
多个字段
SELECT 字段 FROM 表名 ORDER BY 字段1 方式1,字段2 方式2,等
注意点:
1. ORDER BY 默认升序 ASC
2. 降序是 DESC
# 工资高到低,同时对eid也进行排序
SELECT
emp.`eid`,emp.`ename`,emp.`salary`
FROM
emp ORDER BY emp.`salary` DESC ,emp.`eid` DESC;
分组
语法格式:
SELECT 分组依据, GROUP_CONCAT(需要展示的字段名),聚会函数 FROM 表名 GROUP BY 分组依据 HAVING 分组之后的筛选条件
注意点:
1.聚会 函数是 MIN MAX AVG COUNT SUM
2. HAVING 是分组之后,对数据进行筛选,和 WHERE 类似
3. HAVING 和 WHERE 的对比
HAVING 是分组之后的过滤, HAVING 后面可以出现的聚会函数
WHERE 是进行分组之前的过滤,where 后面不能添加聚会函数
按照性别进行分组,并求出各组的平均薪资
SELECT emp.`sex`,AVG(emp.`salary`) FROM emp GROUP BY emp.`sex`;
# GROUP_CONCAT函数忽略NULL值,如果找不到匹配的行,或者所有参数都为NULL值,则返回NULL。
SELECT emp.`sex`,GROUP_CONCAT(emp.`ename`) FROM emp GROUP BY emp.`sex`;
# 按照 dept_name 分组,筛选条件薪资>3000 ,的人数
SELECT emp.`dept_name`,COUNT(*) FROM emp WHERE salary>3000 GROUP BY emp.`dept_name`;
# 找出部门人数大于2的部门
SELECT
emp.`dept_name`,GROUP_CONCAT(emp.`ename`)
FROM
emp GROUP BY emp.`dept_name` HAVING COUNT(*)>2;
其余分组汇总
SELECT
emp.`dept_name`,COUNT(*)
FROM
emp GROUP BY emp.`dept_name` WITH ROLLUP;