深入理解MySQL JOIN類型的差異
MySQL 的 JOIN 子句可讓您透過符合公用欄位值來組合多個資料表中的資料。根據用例的不同,可以使用多種 JOIN 類型:
INNER JOIN(內連接)
INNER JOIN 僅當兩個表中都存在匹配項時才返回行。它執行集合交集運算,檢索屬於兩個表的記錄。
LEFT JOIN(左連接)
LEFT JOIN 傳回左表中的所有行,而不管右表中是否有符合項目。它使用 NULL 值填充右表中缺少的匹配項。
RIGHT JOIN(右邊連接)
RIGHT JOIN 與 LEFT JOIN 類似,但它會傳回右表中的所有行,而不是左表中的所有行。同樣,NULL 值用於表示左表中缺少的匹配項。
FULL JOIN(全連接)
FULL JOIN 組合 LEFT 和 RIGHT 外連接的結果,傳回兩個表中的所有行。任何來自任一表的不匹配行都會填入 NULL 值。
範例
考慮兩個表,TableA 和 TableB,它們包含以下資料:
<code>**TableA** | id | firstName | lastName | |---|---|---| | 1 | arun | prasanth | | 2 | ann | antony | | 3 | sruthy | abc | **TableB** | id2 | age | Place | |---|---|---| | 1 | 24 | kerala | | 2 | 24 | usa | | 3 | 25 | ekm | | 5 | 24 | chennai |</code>
INNER JOIN 範例
<code class="language-sql">SELECT * FROM TableA INNER JOIN TableB ON TableA.id = TableB.id2;</code>
結果:
firstName | lastName | age | Place |
---|---|---|---|
arun | prasanth | 24 | kerala |
ann | antony | 24 | usa |
sruthy | abc | 25 | ekm |
LEFT JOIN 範例
<code class="language-sql">SELECT * FROM TableA LEFT JOIN TableB ON TableA.id = TableB.id2;</code>
結果:
firstName | lastName | age | Place |
---|---|---|---|
arun | prasanth | 24 | kerala |
ann | antony | 24 | usa |
sruthy | abc | 25 | ekm |
RIGHT JOIN 範例
<code class="language-sql">SELECT * FROM TableA RIGHT JOIN TableB ON TableA.id = TableB.id2;</code>
結果:
firstName | lastName | age | Place |
---|---|---|---|
arun | prasanth | 24 | kerala |
ann | antony | 24 | usa |
sruthy | abc | 25 | ekm |
NULL | NULL | 24 | chennai |
FULL JOIN 範例 (MySQL不支援直接的FULL JOIN,需要使用UNION進行模擬)
MySQL 不直接支援 FULL JOIN,需要使用 LEFT JOIN
和 RIGHT JOIN
並結合 UNION
來模擬 FULL JOIN 的效果。
透過上述範例,可以清楚看出不同 JOIN 類型在資料合併上的差異。選擇合適的 JOIN 類型對於有效地取得所需資料至關重要。
以上是MySQL內部,左,右和完整連接有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!