一、多表联合查询
多表联合查询就是同时查询两个或两个以上的表。多表联合查询有如下分类:
1.1 交叉连接查询【笛卡尔积】
select * from A,B,...
交叉连接查询可以理解为:一张表的每一行,连接另一张表的任意一行返回。加入A表有m行数据(k1列)、B表有n行数据(k2列),则总共返回m*n行数据(k1+k2列)。
1.2 内连接
语法一-->隐式内连接(SQL92标准):select * from A,B where 条件;
语法二-->显示内连接(SQL99标准):select * from A inner join B on 条件; //inner可以省略
内连接查询求多张表的交集:
1.3 外连接
左外连接: select * from A left outer join B on 条件;
右外连接: select * from A right outer join B on 条件;
满外连接: select * from A full outer join B on 条件;
1、outer可以省略;
2、oracle里面有full join。但在mysql对full join支持的不好,我们可以使用union来达到目的。
下面是从网上找的一张很形象的关于SQL JOINS的解释图
//多标联合查询示例
SELECT *
FROM A
LEFT JOIN B ON ... AND ...
LEFT JOIN C ON ... AND ...
LEFT JOIN D ON ... AND ...
WHERE ...
二、多表联合查询执行顺序
(1)from或from…left join做笛卡尔积
(2)ON、AND过滤
询执行顺序
(1)from或from…left join做笛卡尔积
(2)ON、AND过滤
其他和单表顺序相同
1、从开发者视角学习MYSQl系列文章:https://blog.csdn.net/maoxuemin/article/details/123523457
2、快速问答入口:https://gitee.com/wendakuai/introducton/wikis/question