连接查询以及联合查询
- 多表查询概述
- 连接查询
- 内连接
- 隐式内连接
- 显式内连接
- 外连接
- 左外连接
- 右外连接
- 自连接
- 联合查询
多表查询概述
建表语句见上一篇博文:https://blog.csdn.net/weixin_43098506/article/details/129402302
e . g . e.g. e.g.
select * from emp, dept where emp.dept_id = dept.id;
多表查询分为 连接查询 和 子查询,连接查询分为 内连接,外连接 以及 自连接。
连接查询
内连接
内连接查询返回的是两张表之间交集的数据,也就是下图中蓝色部分;
隐式内连接
建表语句见上一篇博文:https://blog.csdn.net/weixin_43098506/article/details/129402302
# 查询每一个员工所属的部门情况:
select emp.name, dept.name from emp, dept where emp.dept_id=dept.id;
# 简化
select e.name, d.name from emp e, dept d where e.dept_id=d.id;
相关缩写简化,见博文:https://blog.csdn.net/weixin_43098506/article/details/129365556
显式内连接
# 查询每一个员工所属的部门情况:
select e.name,d.name from emp e inner join dept d on e.dept_id = d.id;
# 注意 inner 可以省略;
外连接
左外连接是下图中 粉色+蓝色 部分
右外连接是下图中 紫色+蓝色 部分。
左外连接
# 查询 emp 表所有数据,和对应的部门信息(左外连接)
select e.*, d.name from emp e left outer join dept d on d.id = e.dept_id;
# 注意 outer 可以省略;
右外连接
# 查询 dept 表所有数据,和对应的员工信息(右外连接)
select d.*, e.* from emp e right outer join dept d on d.id = e.dept_id;
# 注意 outer 可以省略;
自连接
自连接查询可以是内连接,同样可以是外连接。
# 查询员工以及所属领导名字
select a.name,b.name from emp a, emp b where a.managerid = b.id;
# 查询所有员工 emp 以及其领导名字 emp,如果员工没有领导,也需要查询出来;
select a.name,b.name from emp a left join emp b on a.managerid=b.id;
联合查询
把多次查询结果联合起来,形成一个新的查询结果集;
select 字段列表 from 表A ...
UNION [all]
select 字段列表 from 表B ...;
union all 直接将查询的结果合并,所以可能回存在重复:
# 将薪资低于5000的员工和年龄大于50的员工全部查询出来
select * from emp where salary < 5000
union all
select * from emp where age > 50;
union 将查询的结果合并后去重:
# 将薪资低于5000的员工和年龄大于50的员工全部查询出来
select * from emp where salary < 5000
union
select * from emp where age > 50;