本次博客带领大家加强查询语句的使用。
-
使用where子句:
- 如何查询1992.1.1后入职的员工。
SELECT * FROM emp WHERE hiredate > '1992-01-01';
-
使用like操作符:%:表示0到多个字符 _ : 表示单个字符。
- 如何显示首字符为S的员工姓名和工资。
SELECT ename ,sal FROM emp WHERE ename LIKE 'S%';
- 如何显示第三个字符为O的所有员工的姓名和工资。
SELECT ename ,sal FROM emp WHERE ename LIKE '__O%';
-
如何显示没有上级的雇员的情况。
SELECT * FROM emp WHERE mgr IS NULL;
- 查询表结构。
DESC emp;
-
使用order by 子句:
- 如何按照工资的从低到高的顺序,显示雇员的信息。
SELECT * FROM emp ORDER BY sal;
- 按照部门号升序而雇员的工资降序排列,显示雇员信息。
SELECT * FROM emp ORDER BY deptno ASC,sal DESC;
-
分页查询:
基本语法:select ... limit start,rows 表示从start+1 行开始取,取出rows行,start 从0开始计算。
公式:select * from emp order by empno limit 每页显示记录数 * (第几页-1) , 每页显示记录数;
- 按雇员的empno号升序取出,每页显示3条记录,请分别显示 第1页,第2页,第3页。
# 第一页
SELECT * FROM emp ORDER BY empno LIMIT 0,3;
# 第二页
SELECT * FROM emp ORDER BY empno LIMIT 3,3;
# 第三页
SELECT * FROM emp ORDER BY empno LIMIT 6,3;
- 按雇员的empno号降序取出,每页显示5条记录,请分别显示 第3页,第5页。
SELECT * FROM emp ORDER BY empno DESC LIMIT 10,5;
SELECT * FROM emp ORDER BY empno DESC LIMIT 20,5;
-
增强group by 的使用:
- 显示每种岗位的雇员总数、平均工资。
SELECT COUNT(*), AVG(sal),job FROM emp GROUP BY job;
- 显示雇员总数,以及获得补助的雇员数。
SELECT COUNT(*),COUNT(comm) FROM emp;
扩展:统计没有获得补助的雇员数。
SELECT COUNT(*),COUNT(IF(comm IS NULL,1,NULL)) FROM emp; SELECT COUNT(*),COUNT(*) - COUNT(comm) FROM emp;
- 显示管理者的总人数。
SELECT COUNT(DISTINCT mgr) FROM emp;
- 显示雇员工资的最大差额。
SELECT MAX(sal)-MIN(sal) FROM emp;
-
数据分组的总结:
如果select语句同时包含有group by,having,limit,order by,那么他们的顺序是group by,having,order by,limit。
-
案例:
- 请统计各个部门的平均工资,并且是大于1000的,并且按照平均工资从高到低排序,取出前两行记录。
SELECT deptno ,AVG(sal) FROM emp GROUP BY deptno HAVING AVG(sal) >1000 ORDER BY AVG(sal) DESC LIMIT 0,2;