SQL 的 LEFT JOIN
和 RIGHT JOIN
:它们什么时候等价?
LEFT JOIN
和 RIGHT JOIN
根据匹配值合并两个表中的行。 虽然功能相似,但存在关键区别。
让我们举例说明:
<code class="language-sql">CREATE TABLE Table1 (id INT, Name VARCHAR(10)); CREATE TABLE Table2 (id INT, Name VARCHAR(10)); INSERT INTO Table1 (id, Name) VALUES (1, 'A'), (2, 'B'); INSERT INTO Table2 (id, Name) VALUES (1, 'A'), (2, 'B'), (3, 'C');</code>
这些查询:
<code class="language-sql">SELECT * FROM Table1 LEFT JOIN Table2 ON Table1.id = Table2.id; SELECT * FROM Table2 RIGHT JOIN Table1 ON Table1.id = Table2.id;</code>
产生相同的结果。 两者都使用 Table1
字段将 Table2
中的行与 id
中的相应行进行匹配。 LEFT JOIN
包括 Table1
中的所有行,而 RIGHT JOIN
对 Table2
执行相同的操作。
但是,请考虑一下:
<code class="language-sql">SELECT * FROM Table2 LEFT JOIN Table1 ON Table1.id = Table2.id;</code>
或其等效项:
<code class="language-sql">SELECT * FROM Table1 RIGHT JOIN Table2 ON Table1.id = Table2.id;</code>
输出不同。这将返回 Table2
中的所有行以及 Table1
中的任何匹配行。这是一种“外连接”,其中一个表中的行即使在另一个表中没有匹配项也会被包含在内。 关键是 left 或 right 指定指示保证哪个表的行完全包含在结果集中,无论其他表中的匹配行如何。 因此,查询中表的简单交换并不总是产生相同的结果。 互换性完全取决于数据和期望的结果。
以上是SQL 中的 LEFT JOIN 和 RIGHT JOIN 查询何时可以互换?的详细内容。更多信息请关注PHP中文网其他相关文章!