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

MySQL中的集合運(yùn)算符詳解

 更新時(shí)間:2025年02月06日 11:12:02   作者:ZachOn1y  
本文主要介紹了MySQL中的集合運(yùn)算符,包括UNION、INTERSECT、EXCEPT等,這些運(yùn)算符用于結(jié)合兩個(gè)或多個(gè)SELECT語(yǔ)句的結(jié)果集,并進(jìn)行去重、合并或差集操作

集合運(yùn)算符

MySQL中的 集合運(yùn)算符(Set operators)主要用于結(jié)合兩個(gè)或多個(gè)SELECT語(yǔ)句的結(jié)果集,這些結(jié)果集應(yīng)該具有相同的列數(shù)和數(shù)據(jù)類型,以便能夠進(jìn)行比較或合并。

需要注意的是,MySQL本身并沒(méi)有直接稱為“Set operators”的特定術(shù)語(yǔ)或一組專門的運(yùn)算符,而是使用了一些類似功能的SQL語(yǔ)句或運(yùn)算符來(lái)實(shí)現(xiàn)集合操作,如 UNION、INTERSECTEXCEPT 以及 UNION ALL 等。

UNION 和 UNION ALL

UNION 操作符允許將兩個(gè)或多個(gè)查詢結(jié)果集合并為單個(gè)結(jié)果集

  • UNION DISTINCT 是 SQL 中用于合并多個(gè)查詢結(jié)果集去除重復(fù)行的操作符。
  • 它將多個(gè) SELECT 語(yǔ)句的結(jié)果按照列的順序合并成一個(gè)結(jié)果集,自動(dòng)去重(即使未顯示地指定 DISTINCT),并將結(jié)果進(jìn)行排序(默認(rèn)為升序)。

UNION 和 UNION ALL 的區(qū)別就在于是否會(huì)自動(dòng)去重且是否自動(dòng)排序

  • UNION ALL 是 SQL 中用于合并多個(gè)查詢結(jié)果集的操作符。
  • 它將多個(gè) SELECT 語(yǔ)句的結(jié)果按照列的順序合并成一個(gè)結(jié)果集,并保留重復(fù)行,不會(huì)對(duì)結(jié)果集進(jìn)行排序。
  • 執(zhí)行速度要快于UNION。若要進(jìn)行排序,可以使用 ORDER BY 子句。

語(yǔ)法結(jié)構(gòu):

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

每個(gè)SELECT語(yǔ)句表示要合并的結(jié)果集,每個(gè)查詢的列數(shù)和數(shù)據(jù)類型必須相同,若列數(shù)不相同,需要添加NULL來(lái)補(bǔ)足。

缺點(diǎn)

  • 查詢語(yǔ)句太過(guò)冗長(zhǎng)
  • 查詢的性能不太好,因?yàn)閿?shù)據(jù)庫(kù)引擎必須在內(nèi)部執(zhí)行兩個(gè)單獨(dú)的查詢,并將結(jié)果集合并為一個(gè)查詢。

UNION vs JOIN

JOIN 水平地將查詢結(jié)果集結(jié)合,UNION 垂直地將查詢結(jié)果結(jié)合

UNION 結(jié)合別名

若為查詢結(jié)果的列頭設(shè)置別名,需要在第一個(gè)SELECT語(yǔ)句中為字段設(shè)置別名:

SELECT 
    CONCAT(firstName,' ',lastName) fullname
FROM
    employees 
UNION SELECT 
    CONCAT(contactFirstName,' ',contactLastName)
FROM
    customers;

EXCEPT / MINUS

EXCEPT(MINUS) 是 SQL 中用于組合多個(gè)查詢結(jié)果并返回不在第一個(gè)查詢結(jié)果中的唯一行的關(guān)鍵字。通常與 UNIONUNION ALL 一起使用,用于執(zhí)行集合間的差集操作

MySQL 8.0.31 以上的版本 支持 EXCEPT 關(guān)鍵字,在 MySQL低版本通常使用NOT EXISTS或LEFT JOIN…IS NULL來(lái)模擬

EXCEPT 在不同的數(shù)據(jù)庫(kù)管理系統(tǒng)中的實(shí)現(xiàn)可能會(huì)有所差異。在某些數(shù)據(jù)庫(kù)中,可能會(huì)使用 MINUS 關(guān)鍵字來(lái)執(zhí)行類似的操作

SELECT column_list FROM table1    -- query1
EXCEPT | MINUS [DISTINCT | ALL]
SELECT column_list FROM table2;   -- query2

'''等價(jià)于'''
SELECT column_list FROM table1
LEFT JOIN table2 ON join_predicate
WHERE table2.column_name IS NULL;

EXCEPT/MINUS 將把 query1 的結(jié)果與 query2 的結(jié)果集進(jìn)行比較,并**返回 query1 的結(jié)果集中,且沒(méi)有出現(xiàn)在 query2 的結(jié)果集中的column。

  • query1 和 query2 中的列的順序和數(shù)量必須相同
  • query1 和 query2 中對(duì)應(yīng)列的數(shù)據(jù)類型必須相同
  • 默認(rèn)情況下,EXCEPT/MINUS 會(huì)使用 DISTINCT 選項(xiàng),即使省略了該關(guān)鍵字,它會(huì)自動(dòng)去重。
  • EXCEPT/MINUS ALL 將會(huì)保留重復(fù)項(xiàng)
  • EXCEPT/MINUS 將會(huì)返回一個(gè)結(jié)果集,查詢結(jié)果的列名來(lái)自第一個(gè)查詢。如果需要改變列名,可以使用別名
  • 借助 ORDER BY 子句 EXCEPT/MINUS 結(jié)果集進(jìn)行排序

INTERSECT

INTERSECT 是 SQL 中一種用于獲取兩個(gè)查詢結(jié)果集的交集的集合操作符,即同時(shí)存在于所有 SELECT 語(yǔ)句結(jié)果集中的行

MySQL 在其 8.0.31 及更高版本中引入了 SQL 標(biāo)準(zhǔn)中的 INTERSECT 運(yùn)算符,而在低版本中,通常使用 INNER JOINEXISTS 子句來(lái)模擬INTERSECT,即找出兩個(gè)結(jié)果集的交集

SELECT column_list FROM table1    -- query1
INTERSECT [DISTINCT | ALL]
SELECT column_list FROM table2    -- query2

INTERSECT操作符比較 query1 和 query2 兩個(gè)查詢的結(jié)果集并返回二者公共行,不同于 UNION 將二者結(jié)合。

  • query1 和 query2 中的列的順序和數(shù)量必須相同
  • query1 和 query2 中對(duì)應(yīng)列的數(shù)據(jù)類型必須相同
  • 默認(rèn)情況下,INTERSECT 會(huì)使用 DISTINCT 選項(xiàng),即使省略了該關(guān)鍵字,它會(huì)自動(dòng)去重。
  • INTERSECT ALL 將會(huì)保留重復(fù)項(xiàng)
  • INTERSECT 將會(huì)返回一個(gè)結(jié)果集,查詢結(jié)果的列名來(lái)自第一個(gè)查詢。如果需要改變列名,可以使用別名
  • 借助 ORDER BY 子句 INTERSECT 結(jié)果集進(jìn)行排序

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入解析半同步與異步的MySQL主從復(fù)制配置

    深入解析半同步與異步的MySQL主從復(fù)制配置

    這篇文章主要介紹了半同步與異步的MySQL主從復(fù)制配置,包括不同的連接方案的討論,需要的朋友可以參考下
    2015-12-12
  • MYSQL使用正則表達(dá)式過(guò)濾數(shù)據(jù)

    MYSQL使用正則表達(dá)式過(guò)濾數(shù)據(jù)

    這篇文章主要介紹了MYSQL使用正則表達(dá)式過(guò)濾數(shù)據(jù)的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-05-05
  • MySQL常用命令大全腳本之家總結(jié)

    MySQL常用命令大全腳本之家總結(jié)

    這篇文章主要介紹了MySQL常用命令,總結(jié)了經(jīng)常使用的MySQL命令,需要的朋友可以參考下
    2014-02-02
  • 解決hibernate+mysql寫入數(shù)據(jù)庫(kù)亂碼

    解決hibernate+mysql寫入數(shù)據(jù)庫(kù)亂碼

    初次沒(méi)習(xí)hibernate,其中遇到問(wèn)題在網(wǎng)上找的答案與大家共同分享!
    2009-07-07
  • SQL行轉(zhuǎn)列與列轉(zhuǎn)行詳情

    SQL行轉(zhuǎn)列與列轉(zhuǎn)行詳情

    這篇文章主要介紹了SQL行轉(zhuǎn)列與列轉(zhuǎn)行,違章以SQL數(shù)據(jù)展開詳細(xì)內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你有所幫助
    2022-03-03
  • 詳解SQL注入--安全(二)

    詳解SQL注入--安全(二)

    這篇文章主要介紹了SQL注入安全,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • MySQL 數(shù)據(jù)類型 詳解

    MySQL 數(shù)據(jù)類型 詳解

    MySQL 的數(shù)值數(shù)據(jù)類型可以大致劃分為兩個(gè)類別,一個(gè)是整數(shù),另一個(gè)是浮點(diǎn)數(shù)或小數(shù)。許多不同的子類型對(duì)這些類別中的每一個(gè)都是可用的,每個(gè)子類型支持不同大小的數(shù)據(jù),并且 MySQL 允許我們指定數(shù)值字段中的值是否有正負(fù)之分或者用零填補(bǔ)。
    2009-10-10
  • MySQL 5.7.14 net start mysql 服務(wù)無(wú)法啟動(dòng)-“NET HELPMSG 3534” 的奇怪問(wèn)題

    MySQL 5.7.14 net start mysql 服務(wù)無(wú)法啟動(dòng)-“NET HELPMSG 3534” 的奇怪問(wèn)題

    這篇文章主要介紹了MySQL 5.7.14 net start mysql 服務(wù)無(wú)法啟動(dòng)-“NET HELPMSG 3534” 的奇怪問(wèn)題,需要的朋友可以參考下
    2016-12-12
  • MySQL觸發(fā)器使用過(guò)程詳解

    MySQL觸發(fā)器使用過(guò)程詳解

    觸發(fā)器,就是一種特殊的存儲(chǔ)過(guò)程。觸發(fā)器和存儲(chǔ)過(guò)程一樣是一個(gè)能夠完成特定功能、存儲(chǔ)在數(shù)據(jù)庫(kù)服務(wù)器上的SQL片段。本文將通過(guò)簡(jiǎn)單的實(shí)力介紹一下觸發(fā)器的操作,需要的可以參考一下
    2023-03-03
  • Mysql 執(zhí)行一條語(yǔ)句的整個(gè)過(guò)程詳細(xì)

    Mysql 執(zhí)行一條語(yǔ)句的整個(gè)過(guò)程詳細(xì)

    這篇文章主要介紹了Mysql 執(zhí)行一條語(yǔ)句的整個(gè)詳細(xì)過(guò)程,Mysql的邏輯架構(gòu)整體分為兩部分,Server層和存儲(chǔ)引擎層,下面文章內(nèi)容具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你有所幫助
    2022-02-02

最新評(píng)論

和平县| 洛川县| 哈巴河县| 遂溪县| 宁明县| 文昌市| 双流县| 中方县| 全南县| 平阳县| 双江| 科技| 凤冈县| 山东省| 青浦区| 青海省| 青神县| 五大连池市| 丁青县| 遂平县| 屯留县| 衡东县| 星座| 武陟县| 汪清县| 遂溪县| 包头市| 罗平县| 太湖县| 武隆县| 梅河口市| 灵川县| 新营市| 湘乡市| 镇原县| 合肥市| 越西县| 乌恰县| 长治县| 闽侯县| 长寿区|