SQL左外连接子句放置

时间:2016-10-14 15:50:49

标签: sql

我今天被告知左外连接的ON子句实际上确定哪个表是左对右。当我看到这个时,如果我在ON子句中从左侧或右侧移动键,我实际上看不到结果的任何差异。我也浏览过technet,但我找不到任何关于此的文档。

ON子句中键的位置实际上是确定哪个表是向左还是向右,并且会导致不同的结果集吗?

例如:

SELECT *
FROM Product p
LEFT OUTER JOIN Review r ON p.ProductKey = r.ProductKey


SELECT *
FROM Product p
LEFT OUTER JOIN Review r ON r.ProductKey = p.ProductKey

1 个答案:

答案 0 :(得分:1)

基本上,您在FROM子句中列出的表是查询的“左侧”,您在JOIN子句中列出的任何表都是“右侧” ”

SELECT ...
FROM lefttable
JOIN righttable ON ...

然后左/右连接关键字确定使用这两个表的WHICH:

所有“左”记录包含任何可用的“正确”记录:

SELECT
FROM lefttable
LEFT JOIN righttable ON ...

所有“正确”记录以及任何可用的“左”记录:

SELECT ...
FROM lefttable
RIGHT JOIN righttable ON ...

交换右/左语义可以实现基本相同的查询:

SELECT ... FROM lefttable  RIGHT JOIN righttable ON ...
SELECT ... FROM righttable LEFT JOIN  lefttable ON ...