欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql中使用union合并查詢結(jié)果實例代碼

 更新時間:2025年08月08日 10:47:35   作者:荔枝吻  
在MySQL中UNION并不是一個函數(shù),而是一個用于合并兩個或多個SELECT語句結(jié)果集的操作符,這篇文章主要介紹了Mysql中使用union合并查詢結(jié)果的相關(guān)資料,需要的朋友可以參考下

前言

在數(shù)據(jù)查詢過程中,有時我們需要從多個查詢結(jié)果中獲取整合后的數(shù)據(jù),比如之前用寬表存了一個十個等級的指標,現(xiàn)在想對十級指標進行全量分析,這時 UNION 就派上了大用場。本文將深入探討在 MySQL 中如何使用 UNION 合并查詢結(jié)果,帶你全面了解其用法、注意事項及實際應用場景,助力你更高效地處理數(shù)據(jù)查詢需求。

一、UNION 的基本概念

在 MySQL 中,UNION 操作符用于將兩個或多個 SELECT 語句的結(jié)果集合并成一個結(jié)果集。它能夠幫助我們把來自不同查詢的數(shù)據(jù)整合在一起,方便后續(xù)的數(shù)據(jù)處理與分析。

SQL 標準中定義了 3 個集合操作符: UNION, INTERSECT 和 MINUS。目前 MySQL 只支持 【UNION】。

不過需要注意的是,使用 UNION 合并的各個查詢語句必須滿足以下條件:

  • 列數(shù)相同:所有 SELECT 語句中被選擇的列數(shù)要一致。
  • 對應列的數(shù)據(jù)類型兼容:例如,第一個 SELECT 語句中的某一列為整數(shù)類型,那么其他 SELECT 語句對應位置的列也應該是整數(shù)類型或者可以隱式轉(zhuǎn)換為整數(shù)類型。
  • 對應列的順序一致:在結(jié)果集中,各列的順序是按照第一個 SELECT 語句中的列順序來排列的,其他 SELECT 語句中的列順序也要與之對應匹配。

二、UNION 的基本用法

UNION 操作符的語法如下:

SELECT statement
UNION [DISTINCT | ALL]
SELECT statement

UNION 操作包括 UNION DISTINCTUNION ALL 兩種算法,其中 UNION DISTINCT 可以簡寫為 UNION。

1. 去重的 UNION 合并

假設(shè)我們有兩個表,一個是 “員工信息表 1”(employee1),另一個是 “員工信息表 2”(employee2),它們的結(jié)構(gòu)相似,都包含 “員工姓名”(name)和 “員工薪資”(salary)兩個字段?,F(xiàn)在我們想查詢兩個表中所有的員工姓名和薪資,可以使用以下 SQL 語句:

SELECT name, salary FROM employee1
UNION
SELECT name, salary FROM employee2;

這條語句會將兩個表中 “name” 和 “salary” 列的數(shù)據(jù)合并起來,返回一個包含所有員工姓名和薪資的結(jié)果集。在這里,UNION 默認會去除重復的行,也就是說,如果兩個表中有相同的員工姓名和薪資的組合記錄,最終結(jié)果中只會保留一行這樣的記錄。

2. 保留重復行的 UNION ALL

如果你希望在合并結(jié)果中保留所有的重復行,那么可以使用 UNION ALL。例如,在上述兩個員工信息表的例子中,我們想保留所有重復的員工記錄,可以這樣寫:

SELECT name, salary FROM employee1
UNION ALL
SELECT name, salary FROM employee2;

UNION 不同,UNION ALL 不會對結(jié)果進行去重操作,因此執(zhí)行效率通常會比 UNION 高一些。在數(shù)據(jù)量較大且明確不需要去重的情況下,使用 UNION ALL 可以獲得更好的性能表現(xiàn)。

三、實際應用場景

1. 整合不同數(shù)據(jù)源的數(shù)據(jù)

在實際業(yè)務場景中,數(shù)據(jù)可能分散在多個不同的表中,這些表可能對應著不同的業(yè)務模塊或者不同的時間階段的數(shù)據(jù)。比如,在一個電商系統(tǒng)中,有 “訂單表 1”(order1)和 “訂單表 2”(order2),分別存儲了不同季度的訂單數(shù)據(jù),它們都有 “訂單號”(order_id)、“客戶名稱”(customer_name)、“訂單金額”(order_amount)等字段。當我們需要分析整個年度的所有訂單情況時,就可以使用 UNION 來合并這兩個表的數(shù)據(jù):

SELECT order_id, customer_name, order_amount FROM order1
UNION
SELECT order_id, customer_name, order_amount FROM order2;

這樣就能得到一個包含全年所有訂單信息的綜合結(jié)果集,方便進行后續(xù)的數(shù)據(jù)統(tǒng)計和分析,如計算總銷售額、找出大客戶等。

2. 分頁查詢與合并

在處理大量數(shù)據(jù)進行分頁查詢時,有時需要先合并多個查詢結(jié)果,再進行分頁操作。例如,我們有一個 “文章表”(article),根據(jù)不同的分類(category)對文章進行分組存儲,現(xiàn)在我們想獲取所有分類中的熱門文章(假設(shè)熱門文章是指瀏覽量大于 1000 的文章),并將它們合并后進行分頁展示,每頁顯示 10 條記錄:

SELECT id, title, views FROM article WHERE category = '科技' AND views > 1000
UNION
SELECT id, title, views FROM article WHERE category = '體育' AND views > 1000
UNION
SELECT id, title, views FROM article WHERE category = '娛樂' AND views > 1000
ORDER BY views DESC
LIMIT 0, 10;

這里先分別查詢每個分類中的熱門文章,然后通過 UNION 合并結(jié)果,接著按照瀏覽量降序排列,最后使用 LIMIT 實現(xiàn)分頁查詢。這樣可以方便地獲取不同分類整合后的熱門文章數(shù)據(jù),并按照要求進行展示。

3. 將合并后數(shù)據(jù)作為子查詢

在實際開發(fā)中,我們可能需要將 UNION 合并后的結(jié)果作為子查詢,再進行進一步的數(shù)據(jù)處理。比如,假設(shè)我們有一個電商系統(tǒng),訂單數(shù)據(jù)分布在 “訂單表 A”(order_a)和 “訂單表 B”(order_b)兩張表中,它們都有 “訂單號”(order_id)、“客戶 ID”(customer_id)和 “訂單金額”(amount)字段?,F(xiàn)在,我們想查詢每個客戶的總訂單金額,就可以先用 UNION ALL 合并兩張表的訂單數(shù)據(jù),再將合并后的結(jié)果作為子查詢,使用 GROUP BY 按客戶 ID 進行分組求和:

SELECT customer_id, SUM(amount) AS total_amount
FROM (
    SELECT order_id, customer_id, amount FROM order_a
    UNION ALL
    SELECT order_id, customer_id, amount FROM order_b
) AS merged_orders
GROUP BY customer_id;

在這個例子中,我們先通過 UNION ALL 將 order_a 和 order_b 表的數(shù)據(jù)合并成一個虛擬表 merged_orders,然后在這個虛擬表的基礎(chǔ)上,按照 customer_id 分組,計算每個客戶的總訂單金額。這樣,我們就能得到一個包含每個客戶及其對應總訂單金額的結(jié)果集,滿足業(yè)務中對客戶消費統(tǒng)計的需求。

3.1 合并字段名稱不同

比如我之前說的用寬表存了一個十個等級的指標,現(xiàn)在想對十級指標進行全量分析,由于每個等級字段名稱不同,這時候記得命名別名進行操作。

INSERT INTO index_item(index_item_name,index_item_num)
SELECT
	item,
	COUNT(*)
FROM(
	SELECT row_index_one AS item FROM index_record WHERE row_index_one IS NOT NULL
	UNION ALL
	SELECT row_index_two FROM index_record WHERE row_index_two IS NOT NULL
	UNION ALL
	SELECT row_index_three FROM index_record WHERE row_index_three IS NOT NULL
	UNION ALL
	SELECT row_index_four FROM index_record WHERE row_index_four IS NOT NULL
	UNION ALL
	SELECT row_index_five FROM index_record WHERE row_index_five IS NOT NULL
	UNION ALL
	SELECT row_index_six FROM index_record WHERE row_index_six IS NOT NULL
	UNION ALL
	SELECT row_index_seven FROM index_record WHERE row_index_seven IS NOT NULL
	UNION ALL
	SELECT row_index_eight FROM index_record WHERE row_index_eight IS NOT NULL
	UNION ALL
	SELECT row_index_nine FROM index_record WHERE row_index_nine IS NOT NULL
	UNION ALL
	SELECT row_index_ten FROM index_record WHERE row_index_ten IS NOT NULL
) AS items
GROUP BY item;

后記

雖然 UNION 和 UNION ALL 能夠方便地合并查詢結(jié)果,但在處理大數(shù)據(jù)量時,性能可能會受到影響。特別是在使用 UNION 時,由于需要進行去重操作,MySQL 會額外消耗資源來比較和篩選重復的行。因此,在數(shù)據(jù)量較大的情況下,如果業(yè)務場景允許保留重復數(shù)據(jù),優(yōu)先考慮使用 UNION ALL。此外,對于復雜的多表 UNION 操作,我們可以通過優(yōu)化查詢語句、添加適當?shù)乃饕确绞絹硖岣卟樵冃阅?。例如,在上述訂單表合并的例子中,如?“order_id” 字段經(jīng)常用于查詢和合并操作,可以考慮為該字段添加索引,加快查詢速度。

到此這篇關(guān)于Mysql中使用union合并查詢結(jié)果的文章就介紹到這了,更多相關(guān)Mysql union合并查詢結(jié)果內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 五分鐘帶你搞懂MySQL索引下推

    五分鐘帶你搞懂MySQL索引下推

    這篇文章主要介紹了Mysql的索引下推,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-09-09
  • mysql 登錄時閃退的問題解決方法

    mysql 登錄時閃退的問題解決方法

    這篇文章主要介紹了mysql 登錄時閃退的問題解決方法的相關(guān)資料,mysql 出現(xiàn)閃退問題,很是棘手在做項目的時候,這里對解決這樣的問題提供了解決方案,需要的朋友可以參考下
    2016-11-11
  • Mysql的基本函數(shù)與自定義函數(shù)用法

    Mysql的基本函數(shù)與自定義函數(shù)用法

    這篇文章主要介紹了Mysql的基本函數(shù)與自定義函數(shù)用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • mysql 5.7 的 /etc/my.cnf 參數(shù)介紹

    mysql 5.7 的 /etc/my.cnf 參數(shù)介紹

    這篇文章主要介紹了mysql 5.7 的 /etc/my.cnf 參數(shù)介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 淺談Mysql、SqlServer、Oracle三大數(shù)據(jù)庫的區(qū)別

    淺談Mysql、SqlServer、Oracle三大數(shù)據(jù)庫的區(qū)別

    這篇文章主要介紹了Mysql、SqlServer、Oracle三大數(shù)據(jù)庫的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • SQL中EXPLAIN命令的使用方法

    SQL中EXPLAIN命令的使用方法

    這篇文章主要給大家介紹了關(guān)于SQL中EXPLAIN命令的使用方法,文中介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • MySql數(shù)據(jù)類型教程示例詳解

    MySql數(shù)據(jù)類型教程示例詳解

    這篇文章主要為大家介紹了MySql數(shù)據(jù)類型的教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2021-10-10
  • mysql使用物理備份安裝xtrabackup的詳細過程

    mysql使用物理備份安裝xtrabackup的詳細過程

    這篇文章主要介紹了mysql使用物理備份安裝xtrabackup的詳細過程,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • mySql關(guān)于統(tǒng)計數(shù)量的SQL查詢操作

    mySql關(guān)于統(tǒng)計數(shù)量的SQL查詢操作

    這篇文章主要介紹了mySql關(guān)于統(tǒng)計數(shù)量的SQL查詢操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 檢查mysql是否成功啟動的方法(bat+bash)

    檢查mysql是否成功啟動的方法(bat+bash)

    這篇文章主要介紹了檢查mysql是否成功啟動的方法(bat+bash),如果mysql沒有啟動則開啟服務,需要的朋友可以參考下
    2016-06-06

最新評論