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

MySQL中的集合運算符詳解

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

集合運算符

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

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

UNION 和 UNION ALL

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

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

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

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

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

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

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

缺點

  • 查詢語句太過冗長
  • 查詢的性能不太好,因為數(shù)據(jù)庫引擎必須在內(nèi)部執(zhí)行兩個單獨的查詢,并將結(jié)果集合并為一個查詢。

UNION vs JOIN

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

UNION 結(jié)合別名

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

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

EXCEPT / MINUS

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

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

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

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

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

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

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

INTERSECT

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • Mysql數(shù)據(jù)庫之?dāng)?shù)據(jù)備份與恢復(fù)方式

    Mysql數(shù)據(jù)庫之?dāng)?shù)據(jù)備份與恢復(fù)方式

    本文詳細介紹了數(shù)據(jù)庫備份的重要性、分類、方法以及Mysql數(shù)據(jù)庫的備份與恢復(fù)操作,包括完全備份、差異備份、增量備份等,同時,還涉及了日志數(shù)據(jù)庫、備份策略和執(zhí)行備份的定時任務(wù)(Crontab)等內(nèi)容
    2025-01-01
  • 8種手動和自動備份MySQL數(shù)據(jù)庫的方法

    8種手動和自動備份MySQL數(shù)據(jù)庫的方法

    作為流行的開源數(shù)據(jù)庫管理系統(tǒng),MySQL的使用者眾多,為了維護數(shù)據(jù)安全性,數(shù)據(jù)備份是必不可少的。本文就為大家介紹幾種適用于企業(yè)的數(shù)據(jù)備份方法,需要的朋友可以參考下
    2018-10-10
  • 一篇文章看懂MySQL主從復(fù)制與讀寫分離

    一篇文章看懂MySQL主從復(fù)制與讀寫分離

    在實際的生產(chǎn)環(huán)境中,由單臺Mysql作為獨立的數(shù)據(jù)庫是完全不能滿足實際需求的,一般都是通過主從復(fù)制的方式來同步數(shù)據(jù),再通過讀寫分離(來提升數(shù)據(jù)庫的并發(fā)負載能力,這篇文章主要給大家介紹了關(guān)于MySQL主從復(fù)制與讀寫分離的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • mysql允許外網(wǎng)訪問以及修改mysql賬號密碼實操方法

    mysql允許外網(wǎng)訪問以及修改mysql賬號密碼實操方法

    這篇文章主要介紹了mysql允許外網(wǎng)訪問以及修改mysql賬號密碼實操方法,有需要的朋友們可以參考學(xué)習(xí)下。
    2019-08-08
  • Mysql忘記root密碼怎么辦

    Mysql忘記root密碼怎么辦

    MySQL有時候忘記了root密碼是一件傷感的事,下面通過本文給大家介紹Mysql忘記root密碼怎么辦的相關(guān)知識,需要的朋友參考下
    2016-01-01
  • mysql alter添加列的實現(xiàn)方式

    mysql alter添加列的實現(xiàn)方式

    這篇文章主要介紹了mysql alter添加列的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 數(shù)據(jù)庫設(shè)計工具MySQL?Workbench使用教程(超級詳細!)

    數(shù)據(jù)庫設(shè)計工具MySQL?Workbench使用教程(超級詳細!)

    MySQL?Workbench為數(shù)據(jù)庫管理員、程序開發(fā)者和系統(tǒng)規(guī)劃師提供可視化的Sql開發(fā)、數(shù)據(jù)庫建模、以及數(shù)據(jù)庫管理功能,下面這篇文章主要給大家介紹了關(guān)于MySQL設(shè)計工具Workbench使用的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • 詳解MySQL中DROP,TRUNCATE 和DELETE的區(qū)別實現(xiàn)mysql從零開始

    詳解MySQL中DROP,TRUNCATE 和DELETE的區(qū)別實現(xiàn)mysql從零開始

    注意:這里說的delete是指不帶where子句的delete語句 相同點: truncate和不帶where子句的delete, 以及drop都會刪除表內(nèi)的數(shù)據(jù)
    2008-04-04
  • openEuler?RPM方式安裝MySQL8的實現(xiàn)

    openEuler?RPM方式安裝MySQL8的實現(xiàn)

    本文主要介紹了openEuler?RPM方式安裝MySQL8的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • mysql缺少my.ini文件的最佳解決方法

    mysql缺少my.ini文件的最佳解決方法

    my.ini是MySQL數(shù)據(jù)庫中使用的配置文件,修改這個文件可以達到更新配置的目的,下面這篇文章主要給大家介紹了關(guān)于mysql缺少my.ini文件的最佳解決方法,需要的朋友可以參考下
    2024-01-01

最新評論