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

