SQL Server JOINS: Are 'JOIN' Statements 'LEFT OUTER' Associated by Default in SQL Server?
我在SQL、TSQL、SSIS、ETL有6个月的新手经验。当我发现自己在实习项目中越来越多地使用JOIN语句时,我一直在尝试不同的JOIN语句。我想确认一下我的发现。以下陈述是否与SQL Server中JOIN陈述的结论有关?:
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?
谢谢。
- 我认为这个答案或这个答案(对于同一个问题)将解释关于不同类型的连接所需要知道的所有信息。如果你想让你的代码不那么冗长,LEFT OUTER JOIN就等同于LEFT JOIN(LEFT INNER JOIN没有意义),INNER JOIN就等同于JOIN。
- 或者这个答案和这个答案(同样的问题)。如果您的左外部联接和内部联接产生相同的结果,那么这是偶然的,并且您的联接表中没有遗漏的结果。
- 哈哈。看到某人+1这个我很久以前问过的问题。回首过去,我在SQL方面已经有了很大的进步,现在我不得不嘲笑这一点。
例如,field1上的表A和表B之间的join或inner 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不匹配,那么它将为空,并且条件将失败,即使使用了左外部联接,它也不会再返回。这可能就是你所指的。
- 感谢您的简洁回答…我一直在评估SQL JOINvenn图,现在更好地理解它。
默认情况下,联接映射到"内部联接"
- 为什么我的LEFT OUTER JOIN会产生和JOIN相同的结果?
- 它将与您当前的数据集相关。左外部联接不是[内部]联接。尝试在左表中添加一些右表中没有匹配键的记录,您将看到不同之处。en.wikipedia.org/wiki/join_uu(SQL)