MySQL中UNION 和 JOIN 多表聯(lián)合查詢方式
前言
在 MySQL 中,UNION 和 JOIN 是多表查詢的兩種主要方式。它們有不同的適用場景和語法
兩者的差異如下:
特性 | JOIN | UNION |
---|---|---|
數(shù)據(jù)組合 | 橫向組合,合并兩表數(shù)據(jù)到一個行內(nèi) | 縱向組合,合并兩表數(shù)據(jù)到多個行 |
數(shù)據(jù)結(jié)構(gòu)要求 | 表間需有關聯(lián)條件,如外鍵等 | 列數(shù)和數(shù)據(jù)類型需一致 |
結(jié)果數(shù)據(jù)量 | 結(jié)果記錄數(shù)量通常小于表數(shù)據(jù)量 | 結(jié)果記錄數(shù)量可能增加 |
常用場景 | 數(shù)據(jù)關聯(lián),如訂單與用戶信息查詢 | 數(shù)據(jù)匯總,如多表的類似記錄組合 |
具體的使用選擇:
- 使用 JOIN:
當需要將兩表數(shù)據(jù)按照某種邏輯相關聯(lián)時,選擇 JOIN
- 使用 UNION:
當需要合并多表中具有相同結(jié)構(gòu)但無直接關系的數(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 條件的記錄
若某條記錄在任一表中沒有匹配項,則不會包含在結(jié)果中
常用于提取相關數(shù)據(jù)
- LEFT JOIN(左連接)
返回左表中的所有記錄,以及右表中與左表記錄匹配的記錄
如果右表中沒有匹配項,則結(jié)果中該記錄右表的字段為 NULL
常用于查找左表中的數(shù)據(jù)即使右表沒有匹配項時
- RIGHT JOIN(右連接)
返回右表中的所有記錄,以及左表中與右表記錄匹配的記錄
如果左表中沒有匹配項,則結(jié)果中該記錄左表的字段為 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 用于將兩個或多個查詢結(jié)果縱向組合為一個結(jié)果集。它對查詢的列數(shù)和數(shù)據(jù)類型有要求
基本的語法如下:
SELECT column_names FROM table1 WHERE conditions UNION [ALL] SELECT column_names FROM table2 WHERE conditions;
注意事項有如下:
- 默認去重:
UNION 會去掉結(jié)果集中重復的記錄
若需要保留所有重復記錄,使用 UNION ALL
- 列數(shù)和數(shù)據(jù)類型要求:
所有參與查詢的 SELECT 語句必須有相同的列數(shù)
每列的數(shù)據(jù)類型必須兼容
- 結(jié)果排序:
可以通過在 UNION 之后的結(jié)果集中加 ORDER BY 對整體結(jié)果排序
到此這篇關于MySQL中UNION 和 JOIN 多表聯(lián)合查詢方式的文章就介紹到這了,更多相關mysql union和join內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
MySQL啟動報錯提示發(fā)生系統(tǒng)錯誤5,拒絕訪問的原因和解決方法
使用命令net start mysql啟動數(shù)據(jù)庫服務時候,出現(xiàn)如下錯誤提示發(fā)生系統(tǒng)錯誤5,拒絕訪問,所以本文給大家介紹了MySQL啟動報錯提示發(fā)生系統(tǒng)錯誤5,拒絕訪問的原因和解決方法,需要的朋友可以參考下2024-01-01Can''t connect to MySQL server on ''localhost'' (10048)問題解決方
windows 2003服務器運行php的提示Can't connect to MySQL server on 'localhost' (10048), 下面來看下解決方法2013-09-09如何解決mysql的count()函數(shù)條件表達式不生效問題
該文章總結(jié)了SQL查詢中`count`函數(shù)統(tǒng)計錯誤的原因,以及三種解決方法:使用`ornull`方法、`IF()`函數(shù)和`casewhen`表達式,當不滿足條件時,表達式的值為NULL2024-11-11mysql創(chuàng)建觸發(fā)器時報1064錯誤問題及解決
這篇文章主要介紹了mysql創(chuàng)建觸發(fā)器時報1064錯誤問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08SQL優(yōu)化老出錯,那是你沒弄明白MySQL解釋計劃用法
本篇文章講的是SQL優(yōu)化老出錯,那是你沒弄明白MySQL解釋計劃用法,有興趣的小伙伴速度來看看吧,希望本篇文章能夠幫助到你2021-11-11MYSQL如何 查詢數(shù)據(jù)庫中所有表中的數(shù)據(jù)量
INFORMATION_SCHEMA.TABLES 是 MySQL 中的系統(tǒng)表,用于存儲關于數(shù)據(jù)庫中的表的信息,這篇文章主要介紹了MYSQL如何 查詢數(shù)據(jù)庫中所有表中的數(shù)據(jù)量,需要的朋友可以參考下2024-01-01