图说SQL Join

作者: 华恒Ryan | 来源:发表于2017-04-22 23:28 被阅读120次

原文:图说SQL Join

如果你也曾经被SQL语言中各种Join操作:Left Join, Right Join, Inner Join等搞晕了头,那么这篇文章比较适合你。本文通过维恩图演示各种Join语句的执行效果,简单直白容易记忆。
假如有两张表 Table ATable B, 表数据如下:
Table A:

id name
1 Pirate
2 Monkey
3 Ninja
4 Spaghetti

Table B:

id name
1 Rutabaga
2 Pirate
3 Darth Vader
4 Ninja

下面我们来看看各种Join的执行效果

1. INNER JOIN

Inner Join会根据Join的On条件拿左表(Table A)的行与右表(Table B)的行进行匹配, 只有当左右表中 至少同时 存在一条匹配数据时才返回到结果集. 也就是说Inner Join求的是两个表之间的交集.

SELECT * FROM TableA
INNER JOIN TableB
ON TableA.name = TableB.name

结果集:

id name id name
1 Pirate 2 Pirate
2 Ninja 4 Ninja

2. Full JOIN

在某些数据库中, FULL JOIN被称之为FULL OUTER JOIN (注意: MySQL不支持带ON条件的FULL JOIN, 也不支持FULL OUTER JOIN关键字). FULL OUTER JOIN关键字会从左表(Table A)和右表(Table B)中返回所有符合条件的行, 如果Table A中的行在Table B中没有匹配或者Table B中的行在Table A中没有匹配, 则相关列返回NULL.

SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.name = TableB.name

结果集:

id name id name
1 Pirate 2 Pirate
2 Monkey null null
3 Ninja 4 Ninja
4 Spaghetti null null
null null 1 Rutabaga
null null 3 Darth Vader

另外一个例子:

SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.name = TableB.name
WHERE TableA.id IS null
OR TableB.id IS null

结果集:

id name id name
2 Monkey null null
4 Spaghetti null null
null null 1 Rutabaga
null null 3 Darth Vader

3. LEFT JOIN

LEFT JOIN在某些数据库中称之为LEFT OUTER JOIN. 该关键字会从左表中返回所有符合条件的行, 并且如果右表有匹配的行则一并返回, 如果右表中没找到匹配的行, 则与右表相关的结果列返回NULL

SELECT * FROM TableA
LEFT OUTER JOIN TableB
ON TableA.name = TableB.name

结果集:

id name id name
1 Pirate 2 Pirate
2 Monkey null null
3 Ninja 4 Ninja
4 Spaghetti null null

另外一个例子:

SELECT * FROM TableA
LEFT OUTER JOIN TableB
ON TableA.name = TableB.name
WHERE TableB.id IS null

结果集:

id name id name
2 Monkey null null
4 Spaghetti null null

4. RIGHT JOIN

RIGHT JOIN在某些数据库中称之为RIGHT OUTER JOIN, 与LEFT JOIN相反, 该关键字返回右表中所有符合条件的行, 并且如果左表有匹配的行则一并返回, 如果左表没找到匹配的行, 则与左表相关的结果列返回NULL。
由于RIGHT JOIN的原理与LEFT JOIN大致相同, 这里就不再赘述。

参考文章

相关文章

网友评论

  • 知识学者:内连接, 外连接(全连接 。左连接,右连接)
    :flushed: 这是 sql serve吧。

    应该还有 across join,笛卡尔集的概念这篇文章 就完美了。
    华恒Ryan:@东风冷雪 内外连接是SQL语言层面的概念,不涉及到具体某一厂商的数据库,当然不同厂商对语言的支持程度以及实现程度有所差别

本文标题:图说SQL Join

本文链接:https://www.haomeiwen.com/subject/bbdezttx.html