写在前面
数据库执行DQL 语句不会对数据进行改变,而是让数据库发送结果集给客户端。 查询返回的结果集是一张虚拟表
。
1. 查询顺序和表字段
查询语句书写顺序
:
select – from- where- group by- having- order by-limit
先给出查询顺序
from -> join -> where -> group by -> 聚合函数 -> having -> select -> order by -> limit
注:having 与where 的区别:
- having 是在
分组后
对数据进行过滤, where 是在分组前
对数据进行过滤 - having
后面可以使用聚合函数
(统计函数), where 后面不可以使用聚合函数。
emp表字段详情
stu表字段详情
下面开始进行查询
2. 基础查询和条件查询
查询所有列
select * from emp;
查询指定列
select empno,sal from emp;
条件查询关键字
- =、!=、<>、<、<=、>、>=;
- between…and;
- in(set);
- is null; is not null
- and、or、not;
查询性别为女,并且年龄 50 的记录
select * from stu where gender="女" and sage=50;
查询学号为 S_1001,S_1002,S_1003 的记录
select * from stu where sid in ("S_1001","S_1002","S_1003");
查询年龄为 null 的记录
select * from stu where age is null;
查询姓名不为 null 的学生记录
select * from stu where sname is not null;
3. 模糊查询
通配符:
_
:任意一个字符%
:任意0~n 个字符
查询姓名由 5 个字母构成的学生记录
select * from stu where sname like "_____"
查询姓名由 5 个字母构成,并且第 5 个字母为“i”的学生记录
select * from stu where sname like "____i"
查询姓名以“z”开头的学生记录
select * from stu where sname like "z%"
4. 分组查询
聚合函数
- 聚合函数是用来做纵向运算的函数:
- count():统计指定列不为 NULL 的记录行数;
- max():计算指定列的最大值,如果指定列是字符串类型,使用字符串排序运算;
- min():计算指定列的最小值,如果指定列是字符串类型,使用字符串排序运算;
- sum():计算指定列的数值和,如果指定列类型不是数值类型,计算结果为 0;
- avg():计算指定列的平均值,如果指定列类型不是数值类型,计算结果为 0;
查询每个部门的部门编号和每个部门的工资和:
select deptno,sum(sal) from emp group by deptno;
- 查询每个部门的部门编号以及每个部门的人数:
select deptno,count(*) from emp group by deptno;
- 查询每个部门的部门编号以及每个部门工资大于1500的人数:
select deptno,count(*) from emp where sal>1500 group by deptno;
查询工资总和大于 9000 的部门编号以及工资和:
select deptno,sum(sal) from emp group by deptno having sum(sal)>9000;
5. 排序、limit方言、字段控制查询
asc 升序(默认)
desc 降序
重点:获取emp的ename, 查询按照ename的最后两个字母降序进行排列
select ename from emp order by substring(ename, -2) desc;
查询 5 行记录,起始行从 0 开始
select ename from emp limit 0,5;
查询 10 行记录,起始行从 3 开始
select ename from emp limit(3,10)
select ename from emp substring(ename, -2);