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

2019-03-26 19:02 By "Powerless" 3064 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 ,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。
如有侵权行为,请联系我们,我们会及时删除。

评 论

Others Discussion

  • Composer 异常 [ErrorException]
    Posted on 2019-11-25 17:55
  • PHP8.1 性能基准测试
    Posted on 2022-10-08 17:40
  • 必学十大经典排序算法,看这篇就够了
    Posted on 2019-11-18 16:30
  • Linux工具 - NM目标文件格式分析
    Posted on 2019-04-24 10:29
  • PHP练习-爬楼梯问题
    Posted on 2020-08-14 23:56
  • PHP练习-无重复字符的最长子串
    Posted on 2020-09-17 18:03
  • PHP练习-移动数组内的0到最后并保持其他元素顺序不变
    Posted on 2020-08-14 20:32
  • PHP设计模式 - 委托模式
    Posted on 2019-04-25 16:15