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

Mysql使用union合并查詢結(jié)果的實(shí)現(xiàn)

 更新時(shí)間:2025年08月26日 09:12:15   作者:荔枝吻  
本文詳細(xì)介紹了MySQL中UNION操作符的使用方法,UNION用于合并多個(gè)SELECT語(yǔ)句的結(jié)果集,要求各查詢列數(shù)相同、數(shù)據(jù)類型兼容且順序一致,具有一定的參考價(jià)值,感興趣的可以了解一下

前言

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

一、UNION 的基本概念

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

SQL 標(biāo)準(zhǔn)中定義了 3 個(gè)集合操作符: UNION, INTERSECT 和 MINUS。目前 MySQL 只支持 【UNION】。

不過(guò)需要注意的是,使用 UNION 合并的各個(gè)查詢語(yǔ)句必須滿足以下條件:

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

二、UNION 的基本用法

UNION 操作符的語(yǔ)法如下:

SELECT statement
UNION [DISTINCT | ALL]
SELECT statement

UNION 操作包括 UNION DISTINCTUNION ALL 兩種算法,其中 UNION DISTINCT 可以簡(jiǎn)寫為 UNION

1. 去重的 UNION 合并

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

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

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

2. 保留重復(fù)行的 UNION ALL

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

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

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

三、實(shí)際應(yīng)用場(chǎng)景

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

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

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

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

2. 分頁(yè)查詢與合并

在處理大量數(shù)據(jù)進(jìn)行分頁(yè)查詢時(shí),有時(shí)需要先合并多個(gè)查詢結(jié)果,再進(jìn)行分頁(yè)操作。例如,我們有一個(gè) “文章表”(article),根據(jù)不同的分類(category)對(duì)文章進(jìn)行分組存儲(chǔ),現(xiàn)在我們想獲取所有分類中的熱門文章(假設(shè)熱門文章是指瀏覽量大于 1000 的文章),并將它們合并后進(jìn)行分頁(yè)展示,每頁(yè)顯示 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 = '娛樂(lè)' AND views > 1000
ORDER BY views DESC
LIMIT 0, 10;

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

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

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

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;

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

3.1 合并字段名稱不同

比如我之前說(shuō)的用寬表存了一個(gè)十個(gè)等級(jí)的指標(biāo),現(xiàn)在想對(duì)十級(jí)指標(biāo)進(jìn)行全量分析,由于每個(gè)等級(jí)字段名稱不同,這時(shí)候記得命名別名進(jì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ù)量時(shí),性能可能會(huì)受到影響。特別是在使用 UNION 時(shí),由于需要進(jìn)行去重操作,MySQL 會(huì)額外消耗資源來(lái)比較和篩選重復(fù)的行。因此,在數(shù)據(jù)量較大的情況下,如果業(yè)務(wù)場(chǎng)景允許保留重復(fù)數(shù)據(jù),優(yōu)先考慮使用 UNION ALL。此外,對(duì)于復(fù)雜的多表 UNION 操作,我們可以通過(guò)優(yōu)化查詢語(yǔ)句、添加適當(dāng)?shù)乃饕确绞絹?lái)提高查詢性能。例如,在上述訂單表合并的例子中,如果 “order_id” 字段經(jīng)常用于查詢和合并操作,可以考慮為該字段添加索引,加快查詢速度。

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

相關(guān)文章

  • 跳槽必備之你設(shè)計(jì)索引的原則是什么?怎么避免索引失效?

    跳槽必備之你設(shè)計(jì)索引的原則是什么?怎么避免索引失效?

    索引的設(shè)計(jì)可以遵循一些已有的原則,創(chuàng)建索引的時(shí)候請(qǐng)盡量符合這些原則,便于提升索引地使用效率,更高效地使用索引。今天給大家介紹跳槽必備之你設(shè)計(jì)索引的原則是什么?怎么避免索引失效?感興趣的朋友一起看看吧
    2021-05-05
  • mysql?sum(if())和count(if())的用法說(shuō)明

    mysql?sum(if())和count(if())的用法說(shuō)明

    這篇文章主要介紹了mysql?sum(if())和count(if())的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 如何使用mysqladmin獲取一個(gè)mysql實(shí)例當(dāng)前的TPS和QPS

    如何使用mysqladmin獲取一個(gè)mysql實(shí)例當(dāng)前的TPS和QPS

    這篇文章主要介紹了如何使用mysqladmin這個(gè)工具來(lái)獲取一個(gè)mysql實(shí)例當(dāng)前的TPS和QPS,幫助大家更好的管理數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2020-11-11
  • Mysql中存儲(chǔ)引擎的區(qū)別及比較

    Mysql中存儲(chǔ)引擎的區(qū)別及比較

    這篇文章主要介紹了Mysql中存儲(chǔ)引擎的區(qū)別及比較,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • MySQL8.0高可用MIC的實(shí)現(xiàn)

    MySQL8.0高可用MIC的實(shí)現(xiàn)

    本文介紹了如何實(shí)現(xiàn)MySQL8.0高可用MIC,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • MySql使用mysqldump 導(dǎo)入與導(dǎo)出方法總結(jié)

    MySql使用mysqldump 導(dǎo)入與導(dǎo)出方法總結(jié)

    這篇文章主要介紹了MySql使用mysqldump 導(dǎo)入與導(dǎo)出方法總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Mysql中的存儲(chǔ)過(guò)程超詳細(xì)講解

    Mysql中的存儲(chǔ)過(guò)程超詳細(xì)講解

    這篇文章主要介紹了Mysql中的存儲(chǔ)過(guò)程超詳細(xì)講解,包括存儲(chǔ)過(guò)程基本語(yǔ)法,感興趣的朋友一起看看吧
    2025-04-04
  • InnoDB引擎中的事務(wù)詳解

    InnoDB引擎中的事務(wù)詳解

    這篇文章主要介紹了InnoDB引擎中的事務(wù)詳解,事務(wù)Transaction是訪問(wèn)和更新數(shù)據(jù)庫(kù)的程序執(zhí)行單元;事務(wù)中可能包含一個(gè)或多個(gè)sql語(yǔ)句,這些語(yǔ)句要么都執(zhí)行,要么都不執(zhí)行,需要的朋友可以參考下
    2023-09-09
  • MySQL中CHAR與VARCHAR類型舉例解析

    MySQL中CHAR與VARCHAR類型舉例解析

    在MySQL數(shù)據(jù)庫(kù)中CHAR和VARCHAR是兩種常見(jiàn)的字符串?dāng)?shù)據(jù)類型,它們?cè)诖鎯?chǔ)和處理方式上有著顯著的區(qū)別,這篇文章主要介紹了MySQL中CHAR與VARCHAR類型的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-11-11
  • mysql根據(jù)json字段內(nèi)容作為查詢條件(包括json數(shù)組)檢索數(shù)據(jù)

    mysql根據(jù)json字段內(nèi)容作為查詢條件(包括json數(shù)組)檢索數(shù)據(jù)

    本文主要介紹了mysql根據(jù)json字段內(nèi)容作為查詢條件(包括json數(shù)組)檢索數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評(píng)論

濮阳县| 台中市| 偃师市| 林芝县| 莱芜市| 万源市| 卫辉市| 凭祥市| 云南省| 四会市| 郴州市| 大渡口区| 枣阳市| 奈曼旗| 托克逊县| 峨山| 巴东县| 珲春市| 宁安市| 嵩明县| 无棣县| 伊吾县| 双鸭山市| 景宁| 美姑县| 勃利县| 辽阳市| 巴里| 芜湖市| 探索| 恩平市| 屯留县| 五大连池市| 台南县| 綦江县| 乳山市| 广东省| 达尔| 荆州市| 连城县| 滦南县|