最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

1. INNER JOIN(內(nèi)連接)

定義:

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

使用場(chǎng)景:

當(dāng)你只需要兩個(gè)表中都有對(duì)應(yīng)數(shù)據(jù)的行時(shí)(例如:從訂單表和客戶表中僅返回存在訂單的客戶信息),內(nèi)連接是首選。

示例代碼:

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 子句中第一個(gè)表)的所有記錄,即使右表中相關(guān)聯(lián)的數(shù)據(jù)不存在。
  • 如果右表沒有匹配記錄,其對(duì)應(yīng)字段會(huì)返回 NULL。

使用場(chǎng)景:

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

示例代碼:

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

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

3. RIGHT JOIN(右外連接)

定義:

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

使用場(chǎng)景:

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

示例代碼:

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 會(huì)返回兩個(gè)表中所有的記錄,也就是說,不僅返回匹配的部分,還會(huì)返回左表或右表中沒有匹配的記錄,并用 NULL 填充缺失部分。
  • 需要注意的是,MySQL 不直接支持 FULL OUTER JOIN。

使用場(chǎng)景與實(shí)現(xiàn)方法:

  • 如果需要獲取兩個(gè)表中所有數(shù)據(jù),可以采用 LEFT JOIN 和 RIGHT JOIN 的 UNION 操作來實(shí)現(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;

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

小結(jié)與注意事項(xiàng)

默認(rèn)行為:

  • 不寫限定關(guān)鍵字的 JOIN 默認(rèn)為 INNER JOIN,即只返回兩個(gè)表中都有匹配的記錄。

選擇時(shí)機(jī):

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

性能考慮:

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

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

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

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL學(xué)習(xí)(七):Innodb存儲(chǔ)引擎索引的實(shí)現(xiàn)原理詳解

    MySQL學(xué)習(xí)(七):Innodb存儲(chǔ)引擎索引的實(shí)現(xiàn)原理詳解

    這篇文章主要介紹了Innodb存儲(chǔ)引擎索引的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • MySQL數(shù)據(jù)庫MyISAM存儲(chǔ)引擎轉(zhuǎn)為Innodb的方法

    MySQL數(shù)據(jù)庫MyISAM存儲(chǔ)引擎轉(zhuǎn)為Innodb的方法

    mysql數(shù)據(jù)庫存儲(chǔ)引擎為MyISAM的時(shí)候,在大訪問量的情況下數(shù)據(jù)表有可能會(huì)出現(xiàn)被鎖的情況,這就會(huì)導(dǎo)致用戶連接網(wǎng)站時(shí)超時(shí)而返回502,此時(shí)就需要MySQL數(shù)據(jù)庫MyISAM存儲(chǔ)引擎轉(zhuǎn)為Innodb,這篇文章主要介紹了MySQL數(shù)據(jù)庫MyISAM存儲(chǔ)引擎轉(zhuǎn)為Innodb的方法,需要的朋友可以參考下
    2014-06-06
  • MySQL 內(nèi)置函數(shù)指南之日期、字符串、數(shù)學(xué)函數(shù)實(shí)戰(zhàn)

    MySQL 內(nèi)置函數(shù)指南之日期、字符串、數(shù)學(xué)函數(shù)實(shí)戰(zhàn)

    本文基于實(shí)戰(zhàn)場(chǎng)景,全面拆解 MySQL 常用內(nèi)置函數(shù),涵蓋日期、字符串、數(shù)學(xué)、其他工具類函數(shù),附帶詳細(xì)案例和避坑要點(diǎn),感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • 4種MySQL數(shù)據(jù)同步ES方案詳解

    4種MySQL數(shù)據(jù)同步ES方案詳解

    這篇文章主要給大家分享介紹了關(guān)于4種MySQL數(shù)據(jù)同步ES方案的相關(guān)資料,MySQL是一種常用的關(guān)系型數(shù)據(jù)庫,而Elasticsearch是一種為搜索和分析而設(shè)計(jì)的分布式全文搜索引擎,需要的朋友可以參考下
    2023-10-10
  • mysql如何取分組之后最新的數(shù)據(jù)

    mysql如何取分組之后最新的數(shù)據(jù)

    開發(fā)中經(jīng)常會(huì)遇到,分組查詢最新數(shù)據(jù)的問題,下面這篇文章主要給大家介紹了關(guān)于mysql如何取分組之后最新的數(shù)據(jù)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • 詳解windows下mysql的主從同步

    詳解windows下mysql的主從同步

    本文主要對(duì)windows下的mysql主從同步進(jìn)行詳細(xì)介紹。具有很好的參考價(jià)值,需要的朋友一起來看下吧
    2016-12-12
  • MySQL 數(shù)據(jù)庫基礎(chǔ)入門從概念到實(shí)戰(zhàn)

    MySQL 數(shù)據(jù)庫基礎(chǔ)入門從概念到實(shí)戰(zhàn)

    本文覆蓋了MySQL的核心基礎(chǔ):從數(shù)據(jù)庫概念、主流數(shù)據(jù)庫對(duì)比,到 MySQL的安裝連接、實(shí)戰(zhàn)操作和架構(gòu)解析,適合零基礎(chǔ)初學(xué)者快速入門,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • MySQL字符串轉(zhuǎn)數(shù)字的3種方式實(shí)例

    MySQL字符串轉(zhuǎn)數(shù)字的3種方式實(shí)例

    這篇文章主要給大家介紹了關(guān)于MySQL字符串轉(zhuǎn)數(shù)字的3種方式,在使用mysql中經(jīng)常遇到要將字符串?dāng)?shù)字轉(zhuǎn)換成可計(jì)算數(shù)字,文中給出了詳細(xì)的代碼示例和圖文介紹,需要的朋友可以參考下
    2023-08-08
  • MySQL語句匯總整理

    MySQL語句匯總整理

    這篇文章主要給大家分享的是MySQL語句匯總整理,圍繞MySQL語句的相關(guān)資料對(duì)其進(jìn)行整理,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你有所幫助
    2021-12-12
  • Mysql定時(shí)數(shù)據(jù)庫備份實(shí)現(xiàn)的保姆級(jí)教程

    Mysql定時(shí)數(shù)據(jù)庫備份實(shí)現(xiàn)的保姆級(jí)教程

    數(shù)據(jù)備份本身主要是為了預(yù)防一些意外,例如服務(wù)器或者個(gè)人電腦的硬件故障、人為的錯(cuò)誤操作等情況,這篇文章主要給大家介紹了Mysql定時(shí)數(shù)據(jù)庫備份實(shí)現(xiàn)的保姆級(jí)教程,需要的朋友可以參考下
    2024-12-12

最新評(píng)論

怀远县| 房产| 阿拉善盟| 周至县| 陇川县| 逊克县| 鄢陵县| 门源| 综艺| 五峰| 楚雄市| 伊春市| 宕昌县| 新邵县| 密云县| 东兰县| 肥城市| 通化县| 南靖县| 米易县| 老河口市| 碌曲县| 新安县| 四会市| 朝阳市| 焉耆| 儋州市| 顺平县| 吉安县| 阿拉善左旗| 特克斯县| 郸城县| 大同县| 屯门区| 凉城县| 井冈山市| 丁青县| 鱼台县| 嵊州市| 南溪县| 阿勒泰市|