我今天被告知左外连接的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
答案 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 ...