SQL连接的可视化表示

2021-01-13  本文已影响0人  吕保鑫

原文链接:https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

A.jpg B.jpg Visual_SQL_JOINS_orig.jpg

1.Left JOIN (左连接)


Left JOIN.jpg

该查询将返回左表(表A)中的所有记录,而不管这些记录是否与右表(表B)中的任何记录相匹配。它还将返回右表中的任何匹配记录。这个连接写法如下:

SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
LEFT JOIN.jpg

2.Right JOIN(右连接)


Right JOIN.jpg

该查询将返回右表(表B)中的所有记录,而不管这些记录是否与左表(表a)中的任何记录相匹配。它还将返回左表中的任何匹配记录。这个连接写如下:

SELECT <select_list>
FROM Table_A A
RIGHT JOIN Table_B B
ON A.Key = B.Key
RIGHT JOIN.jpg

3.Inner JOIN (内连接)


Inner JOIN.jpg

这是最简单、最容易理解的连接,也是最常见的连接。这个查询将返回左表(表A)中与右表(表B)中有匹配记录的所有记录。

SELECT <select_list> 
FROM Table_A A
INNER JOIN Table_B B
ON A.Key = B.Key
INNER JOIN.jpg

4.Left Excluding JOIN(左连接不包含内连接)


Left Excluding JOIN.jpg

这个查询将返回左表(表A)中所有与右表(表B)中任何记录不匹配的记录。

SELECT <select_list> 
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE B.Key IS NULL
Left Excluding JOIN.jpg

5.Right Excluding JOIN(右连接不包含内连接)


Right Excluding JOIN.jpg

这个查询将返回右表(表B)中与左表(表A)中任何记录不匹配的所有记录。

SELECT <select_list>
FROM Table_A A
RIGHT JOIN Table_B B
ON A.Key = B.Key
WHERE A.Key IS NULL
Right Excluding JOIN.jpg

6.Outer Excluding JOIN


Outer Excluding JOIN.jpg

这个查询将返回左表(表A)中的所有记录和右表(表B)中的所有不匹配的记录。我还需要使用这种类型的连接,但是我经常使用其他所有类型的连接。这个连接写法如下:

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

由于mysql不支持full join,只能通过下面代码模拟实现

SELECT  * FROM stu_movie A LEFT JOIN stu_student B ON A.cid = B.cid WHERE B.cid IS NULL UNION ALL SELECT * FROM stu_movie A RIGHT JOIN stu_student B ON A.cid = B.cid WHERE A.cid IS NULL;
Outer Excluding JOIN.jpg

7.Outer JOIN(外连接、全连接)


Outer JOIN.jpg

此联接也可以称为完整的外部联接或完整联接。这个查询将返回来自两个表的所有记录,连接来自左表(表A)的记录,这些记录与来自右表(表B)的记录相匹配。

SELECT <select_list>
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.Key = B.Key

上面代码在mysql执行是报错的,因为mysql不支持全连接,只能用以下代码实现效果,含义是左连接+右连接+去重=全连接:

SELECT  A.cid AS A_cid,B.cid AS B_cid FROM stu_movie A LEFT JOIN  stu_student B ON A.cid = B.cid UNION SELECT  A.cid AS A_cid,B.cid AS B_cid FROM stu_movie A RIGHT JOIN  stu_student B ON A.cid= B.cid
Outer JOIN.jpg
上一篇 下一篇

猜你喜欢

热点阅读