一、介绍
1.概述
- 多表查询就是指从多张表中查询数据
- 默认条件(不加限制条件)情况下,会出现多张表所有记录的组合情况,这种现象称之为笛卡尔积
- 笛卡尔积:笛卡尔积是在数学中,两个集合A和集合B中所有的组合情况
2.示例
- 例如
emp
表中有5条数据,dept
表中有12条数据emp
表中dept_id
字段为1,2,3,4,5
,dept
表中id为1,2,3,4,5
的只有10条记录
# 不加限制条件
# 查询到60条记录
select * from emp, dept;
# 添加限制条件,查询到10条记录
select * from emp, dept where emp.dept_id = dept.id;
二、分类
1.连接查询
- 内连接:相当于查询A、B交集部分数据
- 外连接:
- 左外连接:查询左表所有数据,以及两张表交集部分数据
- 右外连接:查询右表所有数据,以及两张表交集部分数据
- 自连接:当前表与自身的连接查询,自连接必须使用表别名
2.子查询
A查询的结果作为B查询的数据源
三、内连接
1.语法
# 隐式内连接
select 字段列表 from 表1, 表2 where 条件 ...;
# 显式内连接
select 字段列表 from 表1 [inner] join 表2 on 链接条件 ...;
2.示例
select emp.name, dept.name from emp, dept where emp.dept_id = dept.id;
select emp.name, dept.name from emp inner join dept on emp.dept_id = dept.id;
四、外连接
1.语法
# 左外连接
select 字段列表 from 表1 left [outer] join 表2 on 条件 ...;
# 右外连接
select 字段列表 from 表1 right [outer] join 表2 on 条件 ...;
2.示例
select * from emp left outer join dept on emp.dept_id = dept.id;
select * from dept right outer join emp on dept.id = emp.dept_id;
3.注意事项
左外连接和右外连接是可以相互替换的,只需要调整在连接查询时SQL中,表结构的先后顺序就可以了。而我们在日常开发使用时,更偏向于左外连接
五、自连接
1.语法
select 字段列表 from 表A 别名A join 表A 别名B on 条件 ...;
2.注意事项
自连接查询可以是内连接查询也可以是外连接查询
3.示例
select e1.name, e2.name from emp e1 join emp e2 on e1.managerid=e2.id;
select e1.name, e2.name from emp e1 left join emp e2 on e1.managerid=e2.id;