SQL關鍵字三分鐘入門:UNION 與 UNION ALL —— 數據合并全攻略

在處理數據時,有時我們需要將來自不同表或同一表的不同查詢結果合并在一起。例如:

  • 合并兩個部門的員工名單;
  • 將多個地區的銷售數據匯總;
  • 顯示某段時間內所有新增和修改的記錄。

這時候,我們就需要用到 SQL 中非常強大的兩個關鍵字 —— UNIONUNION ALL

它們可以幫助我們輕松地將多個查詢結果集合并為一個結果集,但兩者之間有一些關鍵的區別需要注意。


一、什么是 UNION 和 UNION ALL?

  • UNION:用于合并兩個或多個?SELECT?語句的結果集,并自動去除重復行。
  • UNION ALL:也用于合并兩個或多個?SELECT?語句的結果集,但它不會去除重復行。

你可以把它們理解為:“將不同的查詢結果合并成一個大集合”。


二、基本語法

SELECT column1, column2, ...
FROM table1
UNION [ALL]
SELECT column1, column2, ...
FROM table2;
  • 必須保證每個?SELECT?語句中的列數相同,且對應列的數據類型兼容。
  • UNION?默認會去除重復行,而?UNION ALL?則保留所有行。

三、示例講解

假設我們有兩個表:employees_northemployees_south,分別存儲了北部和南部地區員工的信息。

表:employees_north

idname
1張三
2李四

表:employees_south

idname
3王五
4李四

示例1:使用 UNION 合并兩個表的數據(去重)

SELECT name FROM employees_north
UNION
SELECT name FROM employees_south;
結果:
name
張三
李四
王五

?這里使用 UNION 自動去除了重復的名字“李四”。


?示例2:使用 UNION ALL 保留所有數據(含重復)

SELECT name FROM employees_north
UNION ALL
SELECT name FROM employees_south;
結果:
name
張三
李四
王五
李四

?這里使用 UNION ALL 保留了所有的記錄,包括重復的名字“李四”。


?示例3:結合 WHERE 和 ORDER BY 使用

-- 查找名字以“張”開頭的所有員工,并按名字排序
(SELECT name FROM employees_north WHERE name LIKE '張%')
UNION
(SELECT name FROM employees_south WHERE name LIKE '張%')
ORDER BY name;
結果:
name
張三

先篩選出符合條件的記錄,再進行合并并排序。


?示例4:多列合并(注意列數和順序一致性)

假設我們有兩張表 orders_2024orders_2025,結構如下:

表:orders_2024
order_idproductamount
1手機2999
2耳機499
表:orders_2025
order_idproductamount
3鼠標199
4鍵盤399
SELECT * FROM orders_2024
UNION ALL
SELECT * FROM orders_2025;
結果:
order_idproductamount
1手機2999
2耳機499
3鼠標199
4鍵盤399

?注意:UNIONUNION ALL 合并時,必須確保每個 SELECT 語句返回的列數一致,并且對應的列類型兼容。


注意

對比項UNIONUNION ALL
是否去重
性能較慢(需要額外的去重操作)更快
使用場景當你需要唯一值時當你不介意重復值時

?? 注意:使用 UNION 時,數據庫需要對結果集進行排序和去重,這可能會消耗更多資源。如果不需要去重,建議優先使用 UNION ALL 提高性能。


四、總結對比表

場景SQL 示例
合并兩表數據(去重)SELECT name FROM table1 UNION SELECT name FROM table2;
合并兩表數據(含重復)SELECT name FROM table1 UNION ALL SELECT name FROM table2;
多列合并SELECT col1, col2 FROM table1 UNION ALL SELECT col1, col2 FROM table2;
結合篩選條件(SELECT name FROM table1 WHERE condition) UNION (SELECT name FROM table2 WHERE condition)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/85132.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/85132.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/85132.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SNMPv3 的安全命名空間詳解

1. 安全命名空間的本質 安全命名空間是 SNMPv3 的核心安全機制,通過 上下文(Context) 實現: #mermaid-svg-6cV9146nTFF1zCMJ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#merma…

【嵌入式硬件實例】-555定時器實現煙霧和易燃氣體泄露檢測

555定時器實現煙霧和易燃氣體泄露檢測 文章目錄 555定時器實現煙霧和易燃氣體泄露檢測1、555定時器介紹2、MQ-2 氣體/煙霧傳感器模塊介紹3、硬件準備與接線在本文中,我們將使用555定時器和MQ-2氣體傳感器構建一個氣體泄漏檢測和報警系統。它在煤氣泄漏期間用作家庭安全警報器。…

【機器人】DualMap 具身導航 | 動態場景 開放詞匯語義建圖 導航系統

DualMap 是一個在線的開放詞匯語義映射系統,使得機器人能夠通過自然語言查詢在動態變化的環境中理解和導航 雙地圖導航,結合全局抽象地圖進行高層次候選選擇,以及局部具體地圖進行精確目標定位,有效管理和更新環境中的動態變化。…

【Fifty Project - D37】

fifty project算是失敗了一半了 成功的那一半在于一定程度上拯救了我的作息和健康,兩個月前入職體檢的肝有點不健康,昨天復查發現全都回到了健康范圍!尿酸也在正常范圍!就是體重還是沒減下來hhh 失敗的一半在于自己很差勁的規劃能…

解碼危險品物流背后的“隱形防線”

當急救藥品跨越千里送達醫院,當新能源電池準時抵達生產線,當化工原料安全運往工廠……這些與日常生活息息相關的場景背后,有一群人始終在和時間賽跑,與風險博弈。他們不是超級英雄,而是危險品物流從業者——一個鮮少被…

Flutter Melos在外包團隊協作中的弊端與應對策略

引言 在大型Flutter項目開發中,Melos作為一款優秀的Monorepo管理工具,能夠有效協調多包項目的開發流程。然而,當項目涉及外包團隊協作時,Melos的使用會面臨一系列獨特的挑戰。本文將深入分析Flutter Melos在外包團隊協作環境中的…

<selectKey> 中的order 屬性

在 MyBatis 中&#xff0c;<selectKey> 標簽的 order 屬性用于指定生成主鍵值的 SQL 語句執行時機。 除了 AFTER&#xff0c;MyBatis 還支持另一種模式&#xff1a;BEFORE&#xff0c; 它們有明確的使用場景和區別&#xff1a; order"AFTER" 適用數據庫&#x…

BitsAndBytes(簡稱 BnB)是一個用于“壓縮”大語言模型的工具包

BitsAndBytes&#xff08;簡稱 BnB&#xff09;是一個用于“壓縮”大語言模型的工具包&#xff0c;能把模型從原來的16位或32位&#xff0c;壓成4位或8位&#xff0c;減少顯存占用&#xff0c;同時保持盡量高的精度。 &#x1f9e9; 為什么叫 Bits and Bytes&#xff1f; 它的…

【前端】 Vue 3 中二次封裝組件

在 Vue 3 中二次封裝組件是提高代碼復用性和維護性的重要手段。以下是詳細的封裝方法和最佳實踐&#xff1a; 一、封裝原則 功能擴展&#xff1a;在原有組件基礎上添加新功能定制樣式&#xff1a;統一項目的 UI 設計規范簡化接口&#xff1a;隱藏復雜邏輯&#xff0c;提供簡潔…

分布式詞表示(Distributed Word Representation):自然語言處理的核心基石

分布式詞表示&#xff08;Distributed Word Representation&#xff09;&#xff1a;自然語言處理的核心基石 在自然語言處理&#xff08;NLP&#xff09;領域&#xff0c;如何將離散的詞匯轉化為計算機可理解的數值形式&#xff0c;一直是技術突破的關鍵。傳統的獨熱編碼&…

Windows Playwright NotImplementedError問題深究

原文鏈接&#xff1a;Windows Playwright NotImplementedError問題深究 < Ping通途說 0. 引言 今天來看一下這個困擾我很久的問題。是關于在FastAPI / NiceGUI 等基于Uvicorn環境下使用Async Playwright 提示NotImplementedError的問題。 本解決方案僅適用基于Uvicorn的異步…

QCustomPlot 數據可視化方式詳解

QCustomPlot 數據可視化方式詳解 QCustomPlot 提供了多種靈活的數據顯示方式,可以滿足從簡單靜態圖表到復雜實時數據可視化的各種需求。以下是 QCustomPlot 顯示數據的核心方式和策略: 基本數據顯示方式 1.1 完整數據設置 (setData)// 一次性設置完整數據集 QVector<doub…

家用舊電腦搭建小型服務器操作步驟教程:一步一步本地部署到公網訪問

你家是不是也有一臺吃灰的舊電腦&#xff1f;別急著扔&#xff0c;它其實還能發揮大作用&#xff01;小編最近就把家里一臺十年前的老臺式機&#xff0c;改造成了一個小型服務器&#xff0c;主要用來文件備份、當網站測試環境&#xff0c;還是比較有用的。今天就來手把手教你&a…

Python銀行賬戶系統全解析

完整代碼如下&#xff1a; class BankAccount:def __init__(self, account_holder, initial_balance0):"""初始化銀行賬戶:param account_holder: 賬戶持有人姓名:param initial_balance: 初始余額&#xff0c;默認為0"""self.account_holder …

博世X阿里云:智能座艙接入通義大模型!

近日,全球領先的汽車技術與服務商博世與阿里云宣布在大模型領域達成合作,通義大模型助力博世加速AI技術應用于智能座艙,首次實現座艙環境主動感知和3D數字人交互。 博世AI智能座艙技術原型由博世智能駕控事業部以通義千問和通義萬相為基礎,結合阿里云百煉大模型服務平臺和磐曦數…

高性能計算服務器的主要作用都有哪些?

高性能計算服務器是一種專門為了處理大規模科學計算和數據分析任務所設計的服務器&#xff0c;高性能計算服務器擁有著強大的計算能力和高速的數據傳輸能力&#xff0c;有著高度的可靠性和可擴展性&#xff0c;下面小編就來介紹一下高性能計算服務器的主要作用吧&#xff01; 高…

C++ 進階:深入理解虛函數、繼承與多態

前言 在 C 的面向對象編程中&#xff0c;繼承和多態是兩個核心概念。今天我們將深入探討 C 中與多態密切相關的幾個重要特性&#xff1a;虛函數、virtual 關鍵字、override 關鍵字、多重繼承以及虛繼承。這些內容是理解 C 多態機制和復雜類層次結構的關鍵。 虛函數與 virtual…

為AR眼鏡等多種智能可穿戴設備添加穿戴狀態檢測功能

作者&#xff1a;Azoteq中國 隨著AR/VR眼鏡、頭戴式耳機和入耳式耳塞、智能手表和健身手環等可穿戴電子產品受到越來越多消費者的歡迎&#xff0c;如何設計外形更加時尚迷人、功能更加先進宜人的穿戴產品成為了創新和創意的焦點。作為全球領先的多傳感器解決方案提供商&#xf…

騰訊云國際站縮容:策略、考量與實踐

騰訊云國際站作為連接全球業務的重要云計算樞紐&#xff0c;其資源的靈活調配至關重要。而騰訊云國際站縮容&#xff0c;便是企業在特定發展階段或業務場景下需要深入探究的關鍵議題。 一、騰訊云國際站縮容的背景與動因 隨著企業業務的動態發展&#xff0c;市場需求并非一成…

英語寫作核心詞匯

以下是一些非常常見和實用的單詞和短語分類整理&#xff1a;? 1. 核心高頻動詞 (用于表達觀點、影響、變化等) ?Affect (v.): 影響?Cause (v.): 引起&#xff0c;導致?Influence (v./n.): 影響?Benefit (v./n.): 有益于&#xff1b;好處?Harm (v./n.): 損害&#xff1b…