理解SQL中的LEFT JOIN與RIGHT JOIN:表格關係的微妙之處
在合併來自多個表格的資料時,SQL的「JOIN」運算子提供了一種強大的機制。 “LEFT JOIN”和“RIGHT JOIN”是JOIN語法中的兩種變體。雖然直覺上認為這兩個命令應該產生相同的結果,但仔細觀察會發現它們之間存在細微差別。
讓我們用兩個範例表格來說明這個差異:
<code class="language-sql">CREATE TABLE Table1 (id INT, Name VARCHAR(10)); CREATE TABLE Table2 (id INT, Name VARCHAR(10));</code>
現在,讓我們用資料填入這些表格:
Table1
Id | Name |
---|---|
1 | A |
2 | B |
Table2
Id | Name |
---|---|
1 | A |
2 | B |
3 | C |
如果我們執行以下SQL語句:
<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>
我們將得到相同的結果,因為這兩個查詢都執行“LEFT JOIN”,它優先考慮左側表格(Table1)中的行。因此,Table1中的所有行都包含在輸出中,而Table2中的行只有在Table1中具有匹配的id時才會被連接。
現在,讓我們來探討第三種變體:「Table2 LEFT JOIN Table1」。透過交換JOIN語句中的表格順序,我們執行“RIGHT JOIN”,它優先考慮右側表格(Table2)中的行。
<code class="language-sql">SELECT * FROM Table2 LEFT JOIN Table1 ON Table1.id = Table2.id;</code>
此查詢將傳回Table2中的所有行,即使是id為3且在Table1中沒有符合id的行。此外,Table1中任何符合的行也將包含在內。
因此,當左側表格包含所有匹配的id時,「LEFT JOIN」和「RIGHT JOIN」是可以互換的;但是,當右側表格包含不匹配的id時,它們的結果就會不同。 「LEFT JOIN」優先考慮左側表格,「RIGHT JOIN」優先考慮右側表格,確保輸出中包含優先表格中的所有行。
以上是LEFT JOIN 與 RIGHT JOIN:這些 SQL 連線何時產生不同的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!