MySQL入门:SELECT 语句

2018-12-06  本文已影响10人  我的袜子都是洞

查询命令深入

完整命令格式:


SELECT 语句

查询

别名:可根据需求用AS对表名或列名设置别名。

去重查询:重复信息只保留一行,其他列信息没有意义。

SELECT DISTINCT 列名 FROM 表名;

常用函数:

单表查询
不存在列名重复问题,不需要加表名前缀,没有多表不需要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 ('销售员','文员');

说明:

  1. 区别执行顺序不一样。(2的起因)
  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
上一篇 下一篇

猜你喜欢

热点阅读