欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL常用的幾種連接(JOIN)方式總結

 更新時間:2025年07月15日 10:03:51   作者:碼上有約  
MySQL常用JOIN類型包括INNER JOIN(返回匹配記錄)、LEFT JOIN(左表全顯示,右表無匹配則為NULL)、RIGHT JOIN(右表全顯示)、FULL OUTER JOIN(需用UNION模擬),默認為INNER JOIN,選擇時需根據數(shù)據完整性和業(yè)務需求,合理使用索引以優(yōu)化性能

下面詳細介紹一下 MySQL 中常用的幾種連接(JOIN)方式,以幫助你理解它們各自的特點、適用情境以及實際使用方法:

1. INNER JOIN(內連接)

定義:

  • INNER JOIN 返回兩個表中滿足連接條件(ON 子句)匹配的記錄。
  • 如果某一行在任一張表中沒有對應匹配,則不會出現(xiàn)在結果集中。
  • 實際上,當僅寫 JOIN 時,MySQL 默認就是執(zhí)行 INNER JOIN。

使用場景:

當你只需要兩個表中都有對應數(shù)據的行時(例如:從訂單表和客戶表中僅返回存在訂單的客戶信息),內連接是首選。

示例代碼:

SELECT A.*, B.*
FROM tableA AS A
INNER JOIN tableB AS B ON A.id = B.aid;

該查詢返回 tableA 與 tableB 中,A.id 等于 B.aid 的所有記錄。

2. LEFT JOIN(左外連接)

定義:

  • LEFT JOIN(或稱 LEFT OUTER JOIN)返回左表(FROM 子句中第一個表)的所有記錄,即使右表中相關聯(lián)的數(shù)據不存在。
  • 如果右表沒有匹配記錄,其對應字段會返回 NULL。

使用場景:

  • 當需要顯示左表中的所有記錄,同時希望附加右表中的信息(如果存在匹配),例如查詢所有客戶信息以及他們可能的訂單,即使部分客戶沒有訂單。

示例代碼:

SELECT A.*, B.*
FROM tableA AS A
LEFT JOIN tableB AS B ON A.id = B.aid;

此查詢確保了 tableA 中的每條記錄都會出現(xiàn)在結果中,而 tableB 的數(shù)據在無匹配時顯示 NULL。

3. RIGHT JOIN(右外連接)

定義:

  • RIGHT JOIN(或 RIGHT OUTER JOIN)與 LEFT JOIN 類似,但它返回的是右表(JOIN 子句中第二個表)的所有記錄。
  • 如果左表中沒有匹配,左表對應的字段將返回 NULL。

使用場景:

  • 當業(yè)務邏輯要求必須顯示右側表中的所有記錄時使用。
  • 由于通??梢酝ㄟ^交換左右兩表的位置來用 LEFT JOIN 實現(xiàn)同樣效果,RIGHT JOIN 相對較少使用。

示例代碼:

SELECT A.*, B.*
FROM tableA AS A
RIGHT JOIN tableB AS B ON A.id = B.aid;

該查詢確保 tableB 中的每條記錄都顯示出來,而 tableA 中沒有匹配的部分以 NULL 填充。

4. FULL OUTER JOIN(全外連接)

定義:

  • FULL OUTER JOIN 會返回兩個表中所有的記錄,也就是說,不僅返回匹配的部分,還會返回左表或右表中沒有匹配的記錄,并用 NULL 填充缺失部分。
  • 需要注意的是,MySQL 不直接支持 FULL OUTER JOIN。

使用場景與實現(xiàn)方法:

  • 如果需要獲取兩個表中所有數(shù)據,可以采用 LEFT JOIN 和 RIGHT JOIN 的 UNION 操作來實現(xiàn)全外連接:
SELECT A.*, B.*
FROM tableA AS A
LEFT JOIN tableB AS B ON A.id = B.aid
UNION
SELECT A.*, B.*
FROM tableA AS A
RIGHT JOIN tableB AS B ON A.id = B.aid;

這種方法可以返回兩個表中所有記錄,不過在大數(shù)據量時可能會有性能影響,需要進一步優(yōu)化。

小結與注意事項

默認行為:

  • 不寫限定關鍵字的 JOIN 默認為 INNER JOIN,即只返回兩個表中都有匹配的記錄。

選擇時機:

  • INNER JOIN:用于只需要匹配數(shù)據的場景。
  • LEFT JOIN:保證左側表中所有數(shù)據均顯示;右側表無匹配數(shù)據時,字段返回 NULL。
  • RIGHT JOIN:保證右側表中所有數(shù)據均顯示(實際應用中可通過交換表順序轉換為 LEFT JOIN);
  • FULL OUTER JOIN:返回所有數(shù)據,但 MySQL 需要通過 UNION 實現(xiàn)。

性能考慮:

  • 在涉及多個大表連接時,建議對連接字段設置索引,確保查詢高效并降低內存占用。
  • 并且在設計 SQL 查詢時,清楚了解各類 JOIN 的執(zhí)行機制有助于優(yōu)化查詢性能。

這些連接方式的具體表現(xiàn)往往可以用 Venn 圖來直觀說明,比如 INNER JOIN 只包含兩個表的交集,而 LEFT JOIN 則是左表的全集與右表的交集,右部分沒有匹配部分則顯示為空值。

各位在實際項目中選擇合適的 JOIN 類型時,建議根據數(shù)據完整性和業(yè)務需求進行權衡。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • MySql是否需要commit詳解

    MySql是否需要commit詳解

    在本篇文章里小編給大家分享了關于MySql是否需要commit的相關知識點內容,需要的朋友們跟著操作下。
    2019-05-05
  • mysql sql大文件導入正確姿勢

    mysql sql大文件導入正確姿勢

    在 MySQL 中導入大文件時,mysql source 導入大文件速度太慢,可能會遇到性能問題或內存限制,以下是一些優(yōu)化導入大文件的建議,需要的朋友可以參考一下
    2025-02-02
  • mysql中錯誤:1093-You can’t specify target table for update in FROM clause的解決方法

    mysql中錯誤:1093-You can’t specify target table for update in F

    最近在工作中遇到了一個mysql錯誤提示1093:You can’t specify target table for update in FROM clause,后來通過查找相關的資料解決了這個問題,現(xiàn)在將解決的方法分享給大家,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • Mysql 8.0安裝及重置密碼問題

    Mysql 8.0安裝及重置密碼問題

    這篇文章主要介紹了Mysql 8.0安裝及重置密碼問題,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11
  • MySQL數(shù)據庫基礎篇之入門基礎命令小結

    MySQL數(shù)據庫基礎篇之入門基礎命令小結

    這篇文章主要介紹了MySQL數(shù)據庫入門基礎命令,總結分析了mysql數(shù)據庫基本創(chuàng)建、刪除、查看、權限等相關操作技巧與注意事項,需要的朋友可以參考下
    2020-05-05
  • 詳解Mysql中的JSON系列操作函數(shù)

    詳解Mysql中的JSON系列操作函數(shù)

    新版 Mysql 中加入了對 JSON Document 的支持,可以創(chuàng)建 JSON 類型的字段,并有一套函數(shù)支持對JSON的查詢、修改等操作,下面就實際體驗一下
    2016-07-07
  • MySQL索引失效之隱式轉換的問題

    MySQL索引失效之隱式轉換的問題

    本文主要介紹了MySQL索引失效之隱式轉換的問題,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • mysql中ALTER AGGREGATE使用場景小結

    mysql中ALTER AGGREGATE使用場景小結

    ALTER AGGREGATE?是 SQL 中用于修改已定義聚合函數(shù)的語法,本文主要介紹了mysql中ALTER AGGREGATE使用場景小結,具有一定的的參考價值,感興趣的可以了解一下
    2025-05-05
  • MySQL插入數(shù)據時插入無效列的解決方法

    MySQL插入數(shù)據時插入無效列的解決方法

    MySQL插入數(shù)據時插入無效的列,解決方法是在插入時,給字符串類型的字段值加上雙引號
    2014-07-07
  • 深入探尋mysql自增列導致主鍵重復問題的原因

    深入探尋mysql自增列導致主鍵重復問題的原因

    前幾天開發(fā)的同事反饋一個利用load data infile命令導入數(shù)據主鍵沖突的問題,分析后確定這個問題可能是mysql的一個bug,這里提出來給大家分享下。以免以后有童鞋遇到類似問題百思不得其解,難以入眠,哈哈。
    2014-08-08

最新評論