MySQL中UNION 和 JOIN 多表聯(lián)合查詢方式
前言
在 MySQL 中,UNION 和 JOIN 是多表查詢的兩種主要方式。它們有不同的適用場(chǎng)景和語(yǔ)法
兩者的差異如下:
| 特性 | JOIN | UNION |
|---|---|---|
| 數(shù)據(jù)組合 | 橫向組合,合并兩表數(shù)據(jù)到一個(gè)行內(nèi) | 縱向組合,合并兩表數(shù)據(jù)到多個(gè)行 |
| 數(shù)據(jù)結(jié)構(gòu)要求 | 表間需有關(guān)聯(lián)條件,如外鍵等 | 列數(shù)和數(shù)據(jù)類型需一致 |
| 結(jié)果數(shù)據(jù)量 | 結(jié)果記錄數(shù)量通常小于表數(shù)據(jù)量 | 結(jié)果記錄數(shù)量可能增加 |
| 常用場(chǎng)景 | 數(shù)據(jù)關(guān)聯(lián),如訂單與用戶信息查詢 | 數(shù)據(jù)匯總,如多表的類似記錄組合 |
具體的使用選擇:
- 使用 JOIN:
當(dāng)需要將兩表數(shù)據(jù)按照某種邏輯相關(guān)聯(lián)時(shí),選擇 JOIN
- 使用 UNION:
當(dāng)需要合并多表中具有相同結(jié)構(gòu)但無(wú)直接關(guān)系的數(shù)據(jù)時(shí),選擇 UNION
1. JOIN
JOIN 用于在多個(gè)表之間按一定條件關(guān)聯(lián)數(shù)據(jù)
JOIN 查詢通過(guò)指定的條件(如外鍵關(guān)系)將表橫向組合
SELECT column_names FROM table1 [INNER|LEFT|RIGHT] JOIN table2 ON table1.column_name = table2.column_name WHERE conditions;
基本的類型有如下:
JOIN 類型
- INNER JOIN(內(nèi)連接)
只返回兩個(gè)表中滿足 ON 條件的記錄
若某條記錄在任一表中沒有匹配項(xiàng),則不會(huì)包含在結(jié)果中
常用于提取相關(guān)數(shù)據(jù)
- LEFT JOIN(左連接)
返回左表中的所有記錄,以及右表中與左表記錄匹配的記錄
如果右表中沒有匹配項(xiàng),則結(jié)果中該記錄右表的字段為 NULL
常用于查找左表中的數(shù)據(jù)即使右表沒有匹配項(xiàng)時(shí)
- RIGHT JOIN(右連接)
返回右表中的所有記錄,以及左表中與右表記錄匹配的記錄
如果左表中沒有匹配項(xiàng),則結(jié)果中該記錄左表的字段為 NULL
不如 LEFT JOIN 常用
- FULL OUTER JOIN(全連接) (MySQL 不直接支持,但可通過(guò) UNION 模擬)
返回兩個(gè)表中所有記錄,不論是否有匹配項(xiàng)
不支持時(shí)用以下替代:
SELECT ... FROM table1 LEFT JOIN table2 ON condition UNION SELECT ... FROM table1 RIGHT JOIN table2 ON condition;
2. UNION
UNION 用于將兩個(gè)或多個(gè)查詢結(jié)果縱向組合為一個(gè)結(jié)果集。它對(duì)查詢的列數(shù)和數(shù)據(jù)類型有要求
基本的語(yǔ)法如下:
SELECT column_names FROM table1 WHERE conditions UNION [ALL] SELECT column_names FROM table2 WHERE conditions;
注意事項(xiàng)有如下:
- 默認(rèn)去重:
UNION 會(huì)去掉結(jié)果集中重復(fù)的記錄
若需要保留所有重復(fù)記錄,使用 UNION ALL
- 列數(shù)和數(shù)據(jù)類型要求:
所有參與查詢的 SELECT 語(yǔ)句必須有相同的列數(shù)
每列的數(shù)據(jù)類型必須兼容
- 結(jié)果排序:
可以通過(guò)在 UNION 之后的結(jié)果集中加 ORDER BY 對(duì)整體結(jié)果排序
到此這篇關(guān)于MySQL中UNION 和 JOIN 多表聯(lián)合查詢方式的文章就介紹到這了,更多相關(guān)mysql union和join內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL8?密碼強(qiáng)度評(píng)估與配置詳解
MySQL8默認(rèn)啟用密碼強(qiáng)度插件,實(shí)施MEDIUM策略(長(zhǎng)度8、含數(shù)字/字母/特殊字符),支持動(dòng)態(tài)調(diào)整與配置文件設(shè)置,推薦使用STRONG策略并定期更新密碼以提升安全性,本文給大家介紹MySQL8密碼強(qiáng)度評(píng)估與配置,感興趣的朋友跟隨小編一起看看吧2025-08-08
MySQL提示“too?many?connections“錯(cuò)誤的解決過(guò)程
當(dāng)大量的connect之后,就會(huì)出現(xiàn)Too many connections的錯(cuò)誤,下面這篇文章主要給大家介紹了關(guān)于MySQL提示“too?many?connections“錯(cuò)誤的解決過(guò)程,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04
mysql下普通用戶備份數(shù)據(jù)庫(kù)時(shí)無(wú)lock tables權(quán)限的解決方法
mysql使用普通用戶備份出現(xiàn)無(wú)lock tables權(quán)限的解決方法,需要的朋友可以參考下。2011-10-10
如何解決局域網(wǎng)內(nèi)mysql數(shù)據(jù)庫(kù)連接慢
通過(guò)內(nèi)網(wǎng)連另外一臺(tái)機(jī)器的mysql服務(wù), 確發(fā)現(xiàn)速度N慢! 等了大約幾十秒才等到提示輸入密碼。非常急人,有沒有辦法可以解決局域網(wǎng)內(nèi)mysql數(shù)據(jù)庫(kù)連接慢呢?下面小編帶領(lǐng)大家來(lái)解決此問(wèn)題,感興趣的朋友一起看看吧2015-09-09

