gpt4 book ai didi

sql - FULL JOIN 和 INNER JOIN 之间的区别

转载 作者:行者123 更新时间:2023-12-03 05:44:56 26 4
gpt4 key购买 nike

FULL JOININNER JOIN 之间有什么区别?

当我执行 FULL JOIN 时,我得到 832 条记录,而当我执行 INNER JOIN 时,我得到 830 条记录。

最佳答案

注意:所有这些都可以在维基百科上找到:Join (SQL) .

OUTER 连接分为三种类型:

  • 左外连接
  • 右外连接
  • 完全外部连接

关键字 OUTER 在所有遵循标准的实现中都是可选的,因此 FULL JOIN 与 FULL OUTER JOIN 相同。 (我在本答案的其余部分中省略了 SQL 中的 OUTER 一词。)

让我们看看每个功能的作用。

考虑以下两个输入数据集:

 Set "A"    Set "B"

AA BB
-------- --------
Item 1 Item 3
Item 2 Item 4
Item 3 Item 5
Item 4 Item 6

请注意,A 中有些项目 B 中没有,反之亦然。

现在,如果我们使用 LEFT join 编写这样的 SQL 语句:

SELECT * FROM A LEFT JOIN B ON AA = BB

您将得到以下结果(空洞实际上是 NULL 标记):

 AA         BB
-------- --------
Item 1
Item 2
Item 3 Item 3
Item 4 Item 4

请注意,您将从 AA 中获取所有 行,或者更确切地说,从 join 子句的左侧 部分获取所有 行.

如果您切换到使用 RIGHT 连接:

SELECT * FROM A RIGHT JOIN B ON AA = BB

AA BB
-------- --------
Item 3 Item 3
Item 4 Item 4
Item 5
Item 6

请注意,您从连接子句的右侧部分获取了所有行。

但是,如果您想要两者的所有行,您将使用 FULL 连接:

SELECT * FROM A FULL JOIN B ON AA = BB

AA BB
-------- --------
Item 1 <-----+
Item 2 |
Item 3 Item 3 |
Item 4 Item 4 |
Item 5 +--- empty holes are NULL's
Item 6 |
^ |
| |
+---------------------+
<小时/>

根据评论中的建议,让我完成其他不同的加入方式。

使用内部连接:

SELECT * FROM A INNER JOIN B ON AA = BB

AA BB
-------- --------
Item 3 Item 3
Item 4 Item 4

通过 INNER join,我们只能得到实际匹配的行,不会因为连接而出现空洞。

交叉连接通过将第一组中的每一行与第二组中的每一行进行匹配来生成笛卡尔积:

SELECT * FROM A CROSS JOIN B

AA BB
-------- --------
Item 1 Item 3 ^
Item 1 Item 4 +--- first item from A, repeated for all items of B
Item 1 Item 5 |
Item 1 Item 6 v
Item 2 Item 3 ^
Item 2 Item 4 +--- second item from A, repeated for all items of B
Item 2 Item 5 |
Item 2 Item 6 v
Item 3 Item 3 ... and so on
Item 3 Item 4
Item 3 Item 5
Item 3 Item 6
Item 4 Item 3
Item 4 Item 4
Item 4 Item 5
Item 4 Item 6

另请注意,我们没有指定匹配哪些列,因为没有完成匹配。

最后,NATURAL join,在这个语法中我们不指定匹配哪些列,而是匹配列名。在我们设计的示例中,没有相同的列名,但假设对于这个特定示例,两个表中的列名都是 XX,那么我们将得到以下结果:

SELECT * FROM A NATURAL JOIN B

+----------+------- matches on the names, and then the data
| |
v v
XX XX
-------- --------
Item 3 Item 3
Item 4 Item 4

正如您所看到的,您得到的结果与 INNER 连接相同,但不必键入连接子句的匹配部分。

关于sql - FULL JOIN 和 INNER JOIN 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3022713/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com