DQL详解
1. 简单查询
1.1 基本查询
select [col_name] from [table_name];
select * from [table_name];
别名: select [col_name] as [别名] from [table_name];关键字AS可选择省略
只显示不同的值:select distinct [col_name] from [table_name];
查询过程执行算术运算:select [algorithm Eg. salary*12+reward] as [别名] from [table_name];
1.2 查询排序
使用ORDER BY子句对查询结果集排序
-
升序(默认):关键字ASC可以忽略 select * from [table_name] order by [col_name]
asc; -
降序:
select * from [table_name]
order by [col_name] desc; -
多列排序:
当col1_name的值相同时才考虑col2_name的排序:
select * from [table_name]
order by [col1_name] desc, [col2_name] asc;
1.3 条件查询
select * from [table_name] where [col_name] != 1000;
用AND实现“与”操作,[col_name] BETWEEN 20 AND 30;
OR实现“或”操作,[col_name] in (10,20,30);
NOT实现“非”操作;
关键字LIKE实现模糊查询,下划线匹配一个任意字符串,百分号匹配任意多个字符
where [col_name] like ‘_e%’;
1.4 分页查询
MySQL使用关键字LIMIT实现分页查询,语法如下:
SELECT * FROM [table_name]
[WHERE …]
[ORDER BY …]
LIMIT start, count;
其中start表示从符合要求记录的第几行开始,count指定一次最多读取的记录行数,第一行为0;
只有一个数字时表示的是count
2. 复杂查询
2.1 聚合函数
MySQL提供五个聚合函数对查询结果集进行特定运算:MySQL提供五个聚合函数对查询结果集进行特定运算:
- 指定列上最大值:select max([col_name]) from [table_name];
- 指定列上最小值:select min([col_name]) from [table_name];
- 指定列上数据总和:select sum([col_name]) from [table_name];
- 指定列上数据数量:select count([col_name]) from [table_name]; 推荐使用count(*),因为可能存在某列存在null;
- 指定列上数据平均值:select avg ([col_name]) from [table_name];
2.2 分组查询
GROUP BY将指定列上相同值的记录分在同一组进行查询
Eg.查询每个部门最高薪资Select max(salary) from emp group by deptId;(首先按部门分组,再查询最大值)
2.3 子查询
在某个或多个子句中包含其他的查询语句,即复合查询语句
Eg.查询研发部的员工信息
select * from emp where deptId = (
select did from dept where dname = ‘研发部’ );
2.4 跨表查询
从多个表中的多个列查询结果集,若不指定相等条件,则产生笛卡儿积
传统查询: Eg.查询每个员工姓名及其部门
select ename, dname from emp as e, dept as d where e.deptId = d.did;
为解决两个表中判定条件列上值为空的跨表查询,提出四种跨表查询方式:
1)内连接(INNER JOIN):
Select ename,dname
from emp inner join dept
on emp.deptId = dept.did;
2)左外连接(LEFT OUTER JOIN):以左侧表为主,右侧没有对应记录也会显示
Select ename,dname
from emp left join dept
on emp.deptId = dept.did;
3)右外连接(RIGHT OUTER JOIN):以右侧表为主,左侧没有对应记录也会显示
Select ename,dname
from emp right join dept
on emp.deptId = dept.did;
4)全连接(FULL JOIN):显示所有记录,MySQL不支持全连接语法,所以只能查询左外连接和右外连接结果集的合并
2.5 结果集合并
关键字UNION用于将两个查询结果集合并为一个
- 直接用UNION仅显示一遍重复数据的合并结果集;
- 使用UNION ALL允许出现重复数据;
2.6 函数补充
- YEAR():获取日期时间类型数据的年份;
- MONTH():获取日期时间类型数据的月份;
- DAY():获取日期类型数据的天数;