通过集合的方式来理解SQL的七种join,更加直观易懂
下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。
下面我们来一个个看:
1.INNER JOIN(内连接)
可以理解为取两个集合根据条件取交集
SELECT <select_list>
FROM Table_A A
INNER JOIN Table_B B
ON A.Key = B.Key
2.LEFT JOIN(左连接)
取左边集合的全集
SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
3.RIGHT JOIN(右连接)
同上,取右边集合的全集
SELECT <select_list>
FROM Table_A A
RIGHT JOIN Table_B B
ON A.Key = B.Key
4.OUTER JOIN(外连接)
取两个集合的并集
SELECT <select_list>
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.Key = B.Key
但是如果是MySQL,就没有外连接,不过可以通过左右连接进行union来实现,注意是union 不是union all ,union可以去重
SELECT * FROM Table_A A LEFT JOIN Table_B B ON A.Key = B.Key
UNION
SELECT * FROM Table_A A RIGHT JOIN Table_B B ON A.Key = B.Key;
5.LEFT JOIN EXCLUDING INNER JOIN(左连接减内连接)
左连接的集合减去内连接,这里和集合的减法一样
SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE B.Key IS NULL
6.RIGHT JOIN EXCLUDING INNER JOIN(右连接减内连接)
同上
SELECT <select_list>
FROM Table_A A
RIGHT JOIN Table_B B
ON A.Key = B.Key
WHERE A.Key IS NULL
7.OUTER JOIN EXCLUDING INNER JOIN(外连接减内连接)
全连接减内连接,得到两个集合不相关的部分
SELECT <select_list>
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.Key = B.Key
WHERE A.Key IS NULL OR B.Key IS NULL