MySQL入门:SELECT 语句
查询命令深入
完整命令格式:
SELECT 语句
查询
别名:可根据需求用AS
对表名或列名设置别名。
去重查询:重复信息只保留一行,其他列信息没有意义。
SELECT DISTINCT 列名 FROM 表名;
常用函数:
-
MAX(列名)
:求该列的最大值 -
MIN(列名)
:求该列的最小值 -
AVG(列名)
:求该列的平均值 -
COUNT(*)
:统计行数
单表查询
不存在列名重复问题,不需要加表名前缀,没有多表不需要ON
子句。
多表查询
列名不重复,可以省略表名,列名重复需添加表名
条件
WHERE
子句,可以根据条件将满足条件的记录显示出来
举个例子:显示王姓同学的学号、姓名、出生日期的信息
SELECT sno,name,birthday FROM stu WHERE name LIKE '王%';
再举个例子:显示当月过生日的学生姓名、出生日期
SELECT name,birthday FROM stu WHERE MONTH(birthday) = MONTH(NOW());
分组
GROUP BY
子句:和上面的若干组函数(聚合函数)一起使用。按照分组条件对记录进行分组。对每组记录进行组函数计算。
单行分组:
举个例子:按照员工工作分组,并统计每个工作的数量。
SELECT job,COUNT(*) FROM emp GROUP BY job;
注:出现在GROUP BY
字句中的列就可以出现在SELECT
子句中,否则就没有实际意义。
多行分组:
举个例子:统计每个部门中相同职位的数量
SELECT deptno,job,count(*) FROM emp GROUP BY deptno,job;
举个例子:统计每个工作中相同部门的数量
SELECT deptno,job,count(*) FROM emp GROUP BY job,deptno;
过滤
HAVING
子句
使用举例:显示每个部门中相同职位人数超过1人的部门和职位信息
SELECT deptno,job,COUNT(*) FROM emp GROUP BY job,deptno HAVING COUNT(\*)>1;
使用举例:统计每个职位的人数,显示职位是销售员或文员的信息
SELECT job,COUNT(*) FROM emp WHERE job IN ('销售员','文员') GROUP BY job;
也可以这样写
SELECT job,COUNT(*) FROM emp GROUP BY job HAVING job IN ('销售员','文员');
说明:
- 区别执行顺序不一样。(2的起因)
- 但若对组函数进行行过滤,组函数只能用在
HAVING
子句中,不能出现在WHERE
子句中。
排序
ORDER BY
子句:对指定列的数据进行升序或降序排列。
升序:ORDER BY ECS
降序:ORDER BY DESC
按照工资升序,部门将序排列:
SELECT * FROM emp ORDER BY deptno,sal DESC;
按照部门分组求平均工资:
SELECT deptno,avg(sal) FROM emp GROUP BY deptno ORDER BY AVG(SAL) DESC;
查询结果限定
LIMIT n,m
:表示从n+1
行开始显示m
条记录,MySQL从第0
行开始。
LIMIT
常用于分页,举个例子:每页显示:10条数据
功能 | 实现 |
---|---|
首页 | LIMIT 0,10 |
第x页 | LIMIT (x-1)*10,10 |
上一页 | LIMIT(x-2)*10,10 |
下一页 | LIMIT 10x,10 |
共page 页 |
|
尾页 | LIMIT (page-1)*10,10 |