SQL Server JOINS:SQL Server 中是不是默认关联“JOIN”语句“LEFT OUTER”? [复制]

Posted

技术标签:

【中文标题】SQL Server JOINS:SQL Server 中是不是默认关联“JOIN”语句“LEFT OUTER”? [复制]【英文标题】:SQL Server JOINS: Are 'JOIN' Statements 'LEFT OUTER' Associated by Default in SQL Server? [duplicate]SQL Server JOINS:SQL Server 中是否默认关联“JOIN”语句“LEFT OUTER”? [复制] 【发布时间】:2014-07-05 12:18:12 【问题描述】:

我在SQLTSQLSSISETL 有大约 6 个月的新手经验。当我发现自己在实习项目中越来越多地使用JOIN 语句时,我一直在尝试不同的JOIN 语句。我想确认我的发现。以下关于JOIN 陈述在SQL Server 中的结论是否准确?:

1)我做了一个LEFT OUTER JOIN 查询并使用JOIN 做了同样的查询,得到了同样的结果;所有JOIN 语句LEFT OUTER 都在SQL Server 中关联吗?

2)我做了一个LEFT OUTER JOINWHERE第二个表PK(加入)IS NOT NULL并使用INNER JOIN进行了相同的查询,产生了相同的结果;可以肯定地说INNER JOIN 语句只会产生匹配的记录吗?并且与LEFT OUTER JOIN 相同,其中加入记录IS NOT NULL

我问的原因是因为我一直只使用LEFT OUTER JOINS,因为那是我喜欢的。但是,我想在编写查询时尽可能多地消除代码以提高效率。我只是想确保我的观察是正确的。

此外,您是否可以提供任何提示来轻松找出适合特定查询的 JOIN 语句?例如,如果您想产生不匹配的记录,您会使用什么JOIN

谢谢。

【问题讨论】:

我认为this answer 或this answer(针对同一个问题)将解释您需要了解的有关不同类型的 JOIN 的所有信息。如果你想让你的代码不那么冗长,LEFT OUTER JOINLEFT JOIN 的同义词(LEFT INNER JOIN 没有意义),INNER JOINJOIN 的同义词 或this answer 和this answer(也针对同一个问题)。如果您的 LEFT OUTER JOIN 和 INNER JOIN 产生相同的结果,那是偶然的,并且您的联接表中没有丢失任何结果。 哈哈。看到有人 +1 我很久以前问过的这个问题。回想起来,我在 SQL 方面已经非常先进了,现在我不得不笑了。 【参考方案1】:

例如,field1 上的表 A 和表 B 之间的 joininner join(相同的东西)将缩小表 A 和 B 的所有行共享相同的 field1 值。

A 和 B 之间的 A left outer join 在 field1 上,将显示表 A 的所有行,并且仅显示表 B 中在表 A 中存在 field1 的那些行。

如果表 A 上的 field1 的行具有表 B 中不存在的 field1 值,则表 B 的值将为 field1 显示 null,但表 A 的行将被保留,因为它是外连接。这些行不会出现在 join 中,而 inner join 是隐含的 inner join

如果您在表 A 和表 B 之间执行 join 得到的结果与在表 A 和 B 之间执行 left outer join 得到的结果相同,那么您要加入的任何字段的值都存在于两个表中。 A 或 B 中的任何连接字段都没有值仅存在于 A 或 B 中,它们都存在于 A 和 B 中。

也有可能您将条件放入属于外连接的on 子句的where 子句中,这可能会引起您的困惑。在我上面的表 A 和 B 的示例中,其中 A 与 B 保持外连接,您可以将与表 B 相关的任何条件放在 on 子句中,而不是 where 子句中,否则您实际上是在转动外连接进入内部连接。例如,如果您在 WHERE 子句中有 b.field4 = 12,并且表 B 没有与 A 匹配,则它将为空,该条件将失败,即使您使用了左外连接。这可能就是您所指的。

【讨论】:

感谢您的简洁回答...我一直在评估SQL JOIN venn 图,现在可以更好地理解它。【参考方案2】:

默认情况下,JOIN 映射到“INNER JOIN”

【讨论】:

为什么我的LEFT OUTER JOIN 会产生与JOIN 相同的结果? 这将与您当前的数据集有关。左外连接不是 [内] 连接。尝试在左表中添加一些在右表中没有匹配键的记录,您会看到差异。 en.wikipedia.org/wiki/Join_(SQL)

以上是关于SQL Server JOINS:SQL Server 中是不是默认关联“JOIN”语句“LEFT OUTER”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

self join in sql server

sql T-SQL所有类型的Joins.sql

sql joins

Flink基础(125):FLINK-SQL语法 (19) DQL(11) OPERATIONS Joins Interval Joins

SQL调优指南笔记9:Joins

SQL调优指南笔记9:Joins