之前的查询语句都是单表查询语句,但由于业务之间相互关联,各个表结构之间也存在着某种联系。
1.多表关系
(1).一对一
(2).一对多(多对一)
(3).多对多
2.多表查询概述
如果不对多表查询的结果加以限制,查询的结果就有大量无效的数据,所以要消除无效的笛卡尔积。
3.内连接
(1).隐式内连接 连接条件写在where中
(2).显式内连接 通过 inner join 来连接 其中 inner可以省略,在 on 后面跟上连接条件
4.外连接
(1).左外连接
(2).右外连接
5.自连接
注意自连接时,必须要给表起别名,不然分不清到底查询返回的是哪一张表的字段。
6.联合查询
(1).union
(2).union all
联合查询时,不是所有查询都能合并,必须是上面查询返回的字段列表和下面查询的字段列表数量一致,且类型相同
union all会把所有结果合并,不考虑去重,而union会多进行一步去重操作
----------------------------------------
子查询:就是查询嵌套中的语句,一般为dql语句
1.标量子查询,指的是子查询的结果为一行一列,也就是只有单个数据
2.行子查询,指的是子查询的结果为一行多列,常用的操作符为 =,<>,in,not in
3.列子查询,指的是子查询的结果为一列多行,经常使用in ,not in,all,any,some关键字
4.表子查询,指的是子查询的结果为多行多列,将子查询作为一张新的临时表,进行联查。常用的操作符为in