本章节向大家介绍如何使用 MySQL 的 JOIN 在两个或多个表中查询数据。
前提如下供后面学习所用:
查看学生表的全部记录SELECT * FROM STUDENT;
查看地址表的全部记录:SELECT * FROM ADDRESS;
表连接按照功能大致分为如下三类:
内连接(INNER JOIN):也称等值连接
SELECT * FROM STUDENT A INNER JOIN ADDRESS B ON A.ID=B.A_ID;
外连接(OUTER JOIN):
外连接不但返回符合连接和查询条件的数据行,还返回不符合条件的一些行。
外连接分三类:
1、左外连接(LEFT OUTER JOIN):LEFT JOIN是LEFT OUTER JOIN的简写
左(外)连接,左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
SELECT * FROM STUDENT A LEFT OUTER JOIN ADDRESS B ON A.ID=B.A_ID
2、右外连接(RIGHT JOIN):right join是right outer join的简写
与左(外)连接相反,右(外)连接,左表只会显示符合搜索条件的记录,而右表的记录将会全部表示出来。左表记录不足的地方均为NULL。
SELECT * FROM STUDENT A RIGHT OUTER JOIN ADDRESS B ON A.ID=B.A_ID
3、全外连接(FULL OUTER JOIN)
MySQL 已经没有全连接了,有的教程上还写着 full join 但是实现不了,不过可以换一种方式来查询。
SELECT * FROM STUDENT A LEFT JOIN ADDRESS B ON A.ID=B.A_ID
UNION
SELECT * FROM STUDENT A RIGHT JOIN ADDRESS B ON A.ID=B.A_ID;
三者的共同点:都返回符合连接条件和查询条件(即:内连接)的数据行。
三者的不同点如下:
1、左外连接还返回左表中不符合连接条件单符合查询条件的数据行。
2、右外连接还返回右表中不符合连接条件单符合查询条件的数据行。
3、全外连接还返回左表中不符合连接条件单符合查询条件的数据行,并且还返回右表中不符合 连接条件单符合查询条件的数据行。
全外连接实际上是上左外连接和右外连接的数学合集(去掉重复),即“全外=左外 UNION 右外”。
注意:左表就是在“(LEFT OUTER JOIN)”关键字左边的表。右表就是右边的了。在三种类型的外连接中,OUTER 关键字是可以省略的。
交叉连接 : 也称作笛卡尔积。
它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每行都一一匹配。
SELECT * FROM STUDENT A CROSS JOIN ADDRESS B
等价于:
SELECT * FROM STUDENT A , ADDRESS B