理解 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));</code>
填入以下數據:
Table1 | Table2 | |
---|---|---|
Id | Name | Id |
1 | A | 1 |
2 | B | 2 |
3 |
使用Table1.id = Table2.id
加入時,LEFT JOIN
和RIGHT JOIN
的結果確實是相同的:
<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>
這是因為連接條件是對稱的。 然而,當桌子順序顛倒時,可互換性的錯覺就破滅了。
餐桌順序的影響
觀察以下查詢:
<code class="language-sql">SELECT * FROM Table2 LEFT JOIN Table1 ON Table1.id = Table2.id;</code>
這將傳回 Table2
中的所有行,無論 Table1
中是否符合。 結果集將是:
Table2 | Table1 | |
---|---|---|
Id | Name | Id |
1 | A | 1 |
2 | B | 2 |
3 | C |
相反,表順序相反的RIGHT JOIN
:
<code class="language-sql">SELECT * FROM Table2 RIGHT JOIN Table1 ON Table1.id = Table2.id;</code>
這僅包括 Table2
中與 Table1
中具有匹配行的行。 id = 3
中帶有 Table2
的行將被排除。
因此,雖然連接條件可能看起來是對稱的,但LEFT JOIN
和RIGHT JOIN
之間的選擇以及表的順序從根本上決定了保證將哪個表的行包含在最終結果集中,即使存在其他表中沒有符合項。 始終仔細考慮餐桌順序,以確保您獲得預期的結果。
以上是LEFT JOIN 和 RIGHT JOIN 何時真正可以互換?的詳細內容。更多資訊請關注PHP中文網其他相關文章!