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

mysql中union關(guān)鍵字的實(shí)現(xiàn)示例

 更新時(shí)間:2026年02月04日 10:02:27   作者:哈里謝頓  
本文主要介紹了mysql中的union關(guān)鍵字詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

MySQL 的 UNION 用于合并兩個(gè)或多個(gè) SELECT 語(yǔ)句的結(jié)果集,并自動(dòng)去除重復(fù)行(相當(dāng)于對(duì)結(jié)果集執(zhí)行 DISTINCT)。

1. 基本語(yǔ)法與核心規(guī)則

SELECT column1, column2 FROM table1
UNION [ALL | DISTINCT]
SELECT column1, column2 FROM table2;

強(qiáng)制性規(guī)則

  • 列數(shù)必須相同:兩個(gè) SELECT 返回的列數(shù)必須一致
  • 數(shù)據(jù)類(lèi)型兼容:對(duì)應(yīng)位置的列類(lèi)型不必完全相同,但必須可隱式轉(zhuǎn)換(如 INT 和 DECIMAL)
  • 列名繼承:結(jié)果集的列名取自第一個(gè) SELECT 語(yǔ)句
  • ORDER BY 位置:只能放在最后一個(gè) SELECT 之后,且排序依據(jù)必須是第一個(gè) SELECT 的列名或別名

2. UNION vs UNION ALL

特性UNION (DISTINCT)UNION ALL
去重自動(dòng)去重,行唯一保留所有行,包括重復(fù)
性能需要臨時(shí)表+哈希排序去重,較慢直接追加結(jié)果,極快
使用場(chǎng)景必須確保唯一性時(shí)確定無(wú)重復(fù)或需要保留重復(fù)時(shí)

性能建議:除非業(yè)務(wù)需要去重,否則優(yōu)先使用 UNION ALL。去重操作需要?jiǎng)?chuàng)建臨時(shí)表、哈希比較和額外排序,大數(shù)據(jù)量時(shí)性能差距巨大。

3. 實(shí)際應(yīng)用場(chǎng)景

場(chǎng)景 A:合并相似結(jié)構(gòu)表(如分表)

-- 查詢(xún) 2023 和 2024 年的訂單(假設(shè)按年分表)
SELECT order_id, amount, created_at FROM orders_2023
UNION ALL
SELECT order_id, amount, created_at FROM orders_2024
ORDER BY created_at DESC
LIMIT 20;

場(chǎng)景 B:多維度統(tǒng)計(jì)報(bào)表

SELECT 'VIP用戶(hù)' as user_type, COUNT(*) as cnt FROM users WHERE level >= 8
UNION ALL
SELECT '普通用戶(hù)', COUNT(*) FROM users WHERE level BETWEEN 1 AND 7
UNION ALL
SELECT '訪客', COUNT(*) FROM users WHERE level = 0;

場(chǎng)景 C:數(shù)據(jù)補(bǔ)全與兜底查詢(xún)

-- 先查緩存表,若無(wú)結(jié)果再查主表(常見(jiàn)于配置表)
SELECT config_value FROM config_cache WHERE config_key = 'site_name'
UNION ALL
SELECT config_value FROM config WHERE config_key = 'site_name'
LIMIT 1;

4. 進(jìn)階用法

帶排序和分頁(yè)

(SELECT id, name FROM products WHERE category = 'A' ORDER BY price DESC LIMIT 10)
UNION ALL
(SELECT id, name FROM products WHERE category = 'B' ORDER BY price DESC LIMIT 10)
ORDER BY price DESC LIMIT 10;

注意:子查詢(xún)中的 ORDER BY 必須配合 LIMIT 才生效,否則會(huì)被優(yōu)化器忽略。

混合聚合與明細(xì)

SELECT city, sales_amount, NULL as detail FROM sales_summary
UNION ALL
SELECT city, amount, CONCAT(product_name, ':', quantity) FROM sales_detail;

5. 性能優(yōu)化要點(diǎn)

  1. 索引利用:每個(gè) SELECT 獨(dú)立使用索引,UNION 本身不走索引
  2. 減少數(shù)據(jù)集:在子查詢(xún)中先 WHERE 過(guò)濾,避免傳遞大量數(shù)據(jù)到 UNION 層
  3. 避免臨時(shí)表寫(xiě)入UNION DISTINCT 會(huì)創(chuàng)建內(nèi)存臨時(shí)表(或磁盤(pán)臨時(shí)表,若過(guò)大),可通過(guò) SET tmp_table_size 調(diào)優(yōu)
  4. 并行執(zhí)行:MySQL 8.0.19+ 對(duì)非相關(guān)子查詢(xún)的 UNION 可能啟用并行查詢(xún)

6. 常見(jiàn)陷阱

-- ? 錯(cuò)誤:列數(shù)不匹配
SELECT id, name FROM t1
UNION
SELECT id FROM t2;  -- ERROR 1222

-- ? 錯(cuò)誤:ORDER BY 位置錯(cuò)誤
SELECT * FROM t1 ORDER BY id
UNION
SELECT * FROM t2;  -- ERROR 1221

-- ? 正確寫(xiě)法
SELECT * FROM t1
UNION
SELECT * FROM t2
ORDER BY id;  -- 使用第一個(gè) SELECT 的列名排序

7. Django ORM 中的 UNION

如果你在使用 Django(看你之前關(guān)注過(guò) Django 源碼),可以這樣使用:

from django.db.models import Q

# QuerySet.union() 默認(rèn)使用 UNION ALL
qs1 = User.objects.filter(status='active').values('name', 'email')
qs2 = User.objects.filter(is_staff=True).values('name', 'email')

# UNION ALL
combined = qs1.union(qs2, all=True)

# UNION (去重)
combined_distinct = qs1.union(qs2)  # 或 all=False

注意:Django 的 union() 會(huì)強(qiáng)制轉(zhuǎn)換為 SQL 的 UNION,且 QuerySet 被求值后返回的是列表而非 QuerySet,無(wú)法繼續(xù)鏈?zhǔn)竭^(guò)濾。

總結(jié)UNION ALL 是合并結(jié)果集的高性能首選,UNION (DISTINCT) 僅在需要去重時(shí)使用。始終確保子查詢(xún)列數(shù)一致,并在應(yīng)用層處理復(fù)雜的排序邏輯。

到此這篇關(guān)于mysql中union關(guān)鍵字的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)mysql union關(guān)鍵字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL存儲(chǔ)表情時(shí)報(bào)錯(cuò):java.sql.SQLException: Incorrect string value:‘\xF0\x9F\x92\xA9\x0D\x0A...’的解決方法

    MySQL存儲(chǔ)表情時(shí)報(bào)錯(cuò):java.sql.SQLException: Incorrect string value:‘

    這篇文章主要給大家介紹了關(guān)于MySQL存儲(chǔ)表情時(shí)報(bào)錯(cuò):java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\xA9\x0D\x0A...'的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2018-04-04
  • Mysql-Insert插入過(guò)慢的原因記錄和解決方案

    Mysql-Insert插入過(guò)慢的原因記錄和解決方案

    這篇文章主要介紹了Mysql-Insert插入過(guò)慢的原因記錄和解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • MySQL的Replace into 與Insert into on duplicate key update真正的不同之處

    MySQL的Replace into 與Insert into on duplicate key update真正的不同

    今天聽(tīng)同事介紹oracle到mysql的數(shù)據(jù)migration,他用了Insert into ..... on duplicate key update ...,我當(dāng)時(shí)就想怎么不用Replace呢,于是回來(lái)就仔細(xì)查了下,它們果然還是有區(qū)別的
    2014-02-02
  • MySQL窗口函數(shù)的具體使用

    MySQL窗口函數(shù)的具體使用

    本文主要介紹了MySQL窗口函數(shù)的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Mysql 查詢(xún)數(shù)據(jù)庫(kù)容量大小的方法步驟

    Mysql 查詢(xún)數(shù)據(jù)庫(kù)容量大小的方法步驟

    這篇文章主要介紹了Mysql 查詢(xún)數(shù)據(jù)庫(kù)容量大小的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • MySQL使用pt-table-sync修復(fù)主從數(shù)據(jù)一致性問(wèn)題

    MySQL使用pt-table-sync修復(fù)主從數(shù)據(jù)一致性問(wèn)題

    在 MySQL 主從架構(gòu)中,數(shù)據(jù)一致性是運(yùn)維的核心訴求,大事務(wù)中斷、誤操作等都可能導(dǎo)致主從數(shù)據(jù)偏差,今天分享一款 Percona Toolkit 旗下的神器pt-table-sync,通過(guò)實(shí)戰(zhàn)案例教大家高效修復(fù)主從數(shù)據(jù)不一致問(wèn)題,需要的朋友可以參考下
    2026-04-04
  • MySQL主從同步、讀寫(xiě)分離配置步驟

    MySQL主從同步、讀寫(xiě)分離配置步驟

    根據(jù)要求配置MySQL主從備份、讀寫(xiě)分離,結(jié)合網(wǎng)上的文檔,對(duì)搭建的步驟和出現(xiàn)的問(wèn)題以及解決的過(guò)程做了如下筆記
    2012-03-03
  • 從0到1學(xué)會(huì)MySQL單表查詢(xún)

    從0到1學(xué)會(huì)MySQL單表查詢(xún)

    這篇文章主要給大家介紹了關(guān)于如何從0到1學(xué)會(huì)MySQL單表查詢(xún)的相關(guān)資料,單表查詢(xún)是指從一張表數(shù)據(jù)中查詢(xún)所需的數(shù)據(jù),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • infobright導(dǎo)入數(shù)據(jù)遇到特殊字符報(bào)錯(cuò)的解決方法

    infobright導(dǎo)入數(shù)據(jù)遇到特殊字符報(bào)錯(cuò)的解決方法

    這篇文章主要介紹了infobright導(dǎo)入數(shù)據(jù)遇到特殊字符報(bào)錯(cuò)的解決方法,Infobright是開(kāi)源的MySQL數(shù)據(jù)倉(cāng)庫(kù)解決方案,需要的朋友可以參考下
    2014-07-07
  • MySQL事務(wù)隔離級(jí)別和一致性詳解

    MySQL事務(wù)隔離級(jí)別和一致性詳解

    文章講解了數(shù)據(jù)庫(kù)事務(wù)的隔離性及四個(gè)級(jí)別(讀未提交、讀提交、可重復(fù)讀、串行化),不同級(jí)別解決不同并發(fā)問(wèn)題,強(qiáng)調(diào)一致性需用戶(hù)與數(shù)據(jù)庫(kù)共同保障
    2025-08-08

最新評(píng)論

永福县| 龙井市| 天气| 东海县| 呼图壁县| 江西省| 安福县| 成安县| 武汉市| 平湖市| 鸡西市| 弥渡县| 米泉市| 公安县| 江西省| 类乌齐县| 当雄县| 宁陕县| 民乐县| 黄浦区| 社会| 罗源县| 桂东县| 广元市| 澳门| 永靖县| 溧阳市| 内丘县| 鄱阳县| 抚远县| 社旗县| 翁牛特旗| 买车| 昂仁县| 陇南市| 吉安县| 宜黄县| 马公市| 湾仔区| 吴堡县| 太白县|