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 【问题描述】:我在SQL
、TSQL
、SSIS
、ETL
有大约 6 个月的新手经验。当我发现自己在实习项目中越来越多地使用JOIN
语句时,我一直在尝试不同的JOIN
语句。我想确认我的发现。以下关于JOIN
陈述在SQL Server
中的结论是否准确?:
1)我做了一个LEFT OUTER JOIN
查询并使用JOIN
做了同样的查询,得到了同样的结果;所有JOIN
语句LEFT OUTER
都在SQL Server 中关联吗?
2)我做了一个LEFT OUTER JOIN
WHERE
第二个表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 JOIN
是 LEFT JOIN
的同义词(LEFT INNER JOIN
没有意义),INNER JOIN
是 JOIN
的同义词
或this answer 和this answer(也针对同一个问题)。如果您的 LEFT OUTER JOIN 和 INNER JOIN 产生相同的结果,那是偶然的,并且您的联接表中没有丢失任何结果。
哈哈。看到有人 +1 我很久以前问过的这个问题。回想起来,我在 SQL 方面已经非常先进了,现在我不得不笑了。
【参考方案1】:
例如,field1 上的表 A 和表 B 之间的 join
或 inner 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”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Flink基础(125):FLINK-SQL语法 (19) DQL(11) OPERATIONS Joins Interval Joins