多表查询
- 一、内连接
- 1、隐式内连接
- 2、显示内连接
- 二、外连接
- 1、左外连接
- 2、右外连接
- 三、自连接
- 四、联合查询
- 五、子连接
- 1、概念
- 2、分类
- (1)标量子查询
- (2)列子查询
- (3)行子查询
- (4)表子查询
- 六、多表关系
一、内连接
1、隐式内连接
select 字段列表 from 表1,表2 where 条件…
2、显示内连接
select 字段列表 from 表1 [inner] join 表2 on 连接条件;
内连接查询的是两张表交集的部分
二、外连接
1、左外连接
select 字段列表 from 表1 left [outer] join 表2 on 连接条件;
左外连接查询的是表1所有数据包含两表交集部分的数据
2、右外连接
select 字段列表 from 表1 right [outer] join 表2 on 连接条件;
右外连接查询的是表2所有数据包含两表交集部分的数据
三、自连接
select 字段列表 from 表a 别名a join 表a 别名b on 条件…
自连接查询可以是内连接查询也可以是外连接查询
四、联合查询
select 字段列表 from 表1…
union [all]
select 字段列表 from 表2…;
1、对于联合查询的多张表的列数必须保持一致,字段类型也必须保持一致。
2、union all将全部数据直接合并在一起,union 合并后去重
五、子连接
1、概念
SQL语句中嵌套select语句,称为嵌套查询 ,又称子查询
select * from t1 where column1=(select column1 from t2);
子查询外部可以是insert/update/delete/select的任何一个
2、分类
(1)标量子查询
- 子查询结果为单个值
- 常用操作符:= <> > >= < <=
例:查询“销售部”所有员工信息
select * from emp where dept_id=(select id from dept where name=“销售部”);
(2)列子查询
- 子查询结果为一列(可以为多行)
- 常用操作符:in、not in、any、some 、all
例:查询“销售部”和“市场部”的所有员工信息
select * from emp where dept_id in(select id from dept where name=“销售部” or name=“市场部”);
(3)行子查询
- 子查询结果为一行(可以为多列)
- 常用操作符:=、<>、in、not in
例:查询“张无忌”的薪资及直属领导相同的员工信息
select * from emp where (salary,managerid)=(select salary,managerid from emp where name=“张无忌”);
(4)表子查询
- 子查询结果为多行多列
- 常用操作符:in
例:查询与“张三”,“李四”的职位和薪资相同的员工信息
select * from emp where (job,salary)in(select job,salary from emp where name=“张三” or name=“李四”);
六、多表关系
1、一对多:多的一方建立外键,指向一的一方的主键
2、多对多:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
3、一对一:在任意一方加入外键,关联另一方的主键,并设置外键为唯一的(unique)