我希望能更直观地理解SQL连接。例如,通过学习如何将RIGHT JOIN重写为LEFT JOIN(通过翻转表的顺序),我更好地理解了这两个连接的工作方式。
然而,现在我想知道是否可以使用WHERE条件将INNER JOIN重写为LEFT JOIN- 这意味着它们的逻辑可以等效(“逻辑”指的不是执行计划,而是描述预期结果集的方式)。
例如:
我会把它读成“展示表HeaderTable和DetailTable中所有记录,其中HeaderTable.ID的值与DetailTable.ParentID的值相同。”
这两个查询语句返回的结果集是否相同?我更多的是询问逻辑是否一致,而不是哪一个比另一个更有效率。
如果可以的话,请不要用任何维恩图回答,因为它们似乎不能准确描述连接的逻辑。
然而,现在我想知道是否可以使用WHERE条件将INNER JOIN重写为LEFT JOIN- 这意味着它们的逻辑可以等效(“逻辑”指的不是执行计划,而是描述预期结果集的方式)。
例如:
SELECT * FROM HeaderTable
INNER JOIN DetailTable
ON HeaderTable.ID = DetailTable.ParentID
我会将其理解为“显示表格HeaderTable和DetailTable中所有具有匹配值的记录,这些匹配值分别位于HeaderTable.ID和DetailTable.ParentID字段。”与之等同的是:
SELECT * FROM HeaderTable
LEFT JOIN DetailTable
ON HeaderTable.ID = DetailTable.ParentID
WHERE HeaderTable.ID = DetailTable.ParentID
我会把它读成“展示表HeaderTable和DetailTable中所有记录,其中HeaderTable.ID的值与DetailTable.ParentID的值相同。”
这两个查询语句返回的结果集是否相同?我更多的是询问逻辑是否一致,而不是哪一个比另一个更有效率。
如果可以的话,请不要用任何维恩图回答,因为它们似乎不能准确描述连接的逻辑。