SQL 的各种 join 到底是怎么回事

2019-03-26 19:02 By "Powerless" 3185 0 1

1.png


【一】INNER JOIN(内联)

1.png

    这是最简单,最容易理解的Join,也是最常见的。此查询将返回左表(表A)中右表(表B)中具有匹配记录的所有记录。此Join的编写如下:

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


【二】LEFT JOIN(左联)

2.png

    无论这些记录中的任何记录是否与右表(表B)匹配,此查询都将返回左表(表A)中的所有记录。它还将返回右表中的任何匹配记录。此Join的编写如下:

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


【三】RIGHT JOIN(右联)

3.png

    无论这些记录中的任何记录是否与左表(表A)匹配,此查询将返回右表(表B)中的所有记录。它还将返回左表中的任何匹配记录。此Join的编写如下:

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


【四】OUTER JOIN(外联)

4.png

    此加入也可以称为 FULL OUTER JOIN 或 FULL JOIN。此查询将返回两个表中的所有记录,连接左表(表A)中与右表(表B)中的记录匹配的记录。此Join的编写如下:

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


【五】LEFT JOIN EXCLUDING INNER JOIN(左连-内连)

5.png

    此查询将返回左表(表A)中与右表(表B)中的任何记录都不匹配的所有记录。此Join的编写如下:

SELECT
	< select_list > 
FROM
	Table_A A
	LEFT JOIN Table_B B ON A.KEY = B.KEY 
WHERE
	B.KEY IS NULL


【六】RIGHT JOIN EXCLUDING INNER JOIN(右连-内连)

6.png

    此查询将返回右表(表B)中与左表(表A)中的任何记录都不匹配的所有记录。此Join的编写如下:

SELECT
	< select_list > 
FROM
	Table_A A
	RIGHT JOIN Table_B B ON A.KEY = B.KEY 
WHERE
	A.KEY IS NULL


【七】OUTER JOIN EXCLUDING INNER JOIN(外连-内连)

 7.png

   此查询将返回左表(表A)中的所有记录以及右表(表B)中不匹配的所有记录。我还没有需要使用这种类型的Join,但是所有其他的。此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


注:本文转载自 CL Moffatt ,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。
如有侵权行为,请联系我们,我们会及时删除。

评 论

View in WeChat

Others Discussion

  • Redis各种数据类型的使用场景举例分析【三】
    Posted on 2018-11-22 17:00
  • 投票通过,PHP 8 确认引入 Union Types 2.0
    Posted on 2019-11-18 22:22
  • PHP设计模式 - 委托模式
    Posted on 2019-04-25 16:15
  • BASE原则
    Posted on 2020-12-17 16:42
  • PHP扩展安装
    Posted on 2019-06-24 11:28
  • 程序员年中考试题-段子版
    Posted on 2021-06-23 15:57
  • 一些常见的基础概念
    Posted on 2018-11-28 19:10
  • HTTP和HTTPS的区别
    Posted on 2020-08-10 23:00