SQL Server联接:SQL Server JOINS:SQL Server中的“JOIN”语句“LEFT OUTER”是否默认关联?

SQL Server JOINS: Are 'JOIN' Statements 'LEFT OUTER' Associated by Default in SQL Server?

本问题已经有最佳答案,请猛点这里访问。

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

1)我做了一个LEFT OUTER JOIN查询,使用JOIN进行了相同的查询,结果相同;所有JOIN语句都与SQL Server中的LEFT OUTER相关联吗?

2)我做了一个LEFT OUTER JOINWHERE2nd table pk(joined to)IS NOT NULL,用一个INNER JOIN进行了相同的查询,得到了相同的结果;可以说INNER JOIN语句只会产生匹配的记录吗?与LEFT OUTER JOIN中的记录相同吗?IS NOT NULL中的记录。

我问这个问题的原因是因为我只使用了LEFT OUTER JOINS,因为这正是我所能接受的。但是,我希望在编写查询时尽可能地消除代码,以提高效率。我只是想确保我的观察是正确的。

此外,您是否可以提供一些提示,以便轻松确定哪一个JOIN语句适合于特定的查询?例如,如果要生成不匹配的记录,您会使用什么JOIN

谢谢。


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

字段1上A和B之间的left outer join将显示表A的所有行,并且只显示表B中表A中存在字段1的行。

如果表A上的field1行的field1值在表B中不存在,则表B的field1值将显示为空,但表A的行将保留,因为它是外部联接。这些行不会出现在join中,这是一个隐含的inner join中。

如果在表A和表B之间执行join的结果与在表A和表B之间执行left outer join的结果相同,那么您要加入的任何字段的值都存在于这两个表中。A或B中任何联接字段的值都不单独存在于A或B中,它们都同时存在于A和B中。

也有可能您将标准放入属于外部连接的on条款的where条款中,这可能导致您的混淆。在我上面的表A和表B的例子中,如果A与B保持外部连接,那么您将在on子句中放置与表B相关的任何标准,而不是在WHERE子句中,否则您将基本上将外部连接转换为内部连接。例如,如果在WHERE子句中有b.field4=12,而表b与a不匹配,那么它将为空,并且条件将失败,即使使用了左外部联接,它也不会再返回。这可能就是你所指的。


默认情况下,联接映射到"内部联接"