sql中UNION和UNION ALL的區別

来源:https://www.cnblogs.com/javazxy/archive/2018/07/23/9354867.html
-Advertisement-
Play Games

寫sql時我們經常會遇到需要把從多張表查詢的集果集進行合併。這時就用到了union。使用union或union all 時一定要保證查詢的列的一致性 。不然sql會報錯。欄位不一致的話可以用單引號來占位。 例: 下麵就來說明union和union all的區別 準備一張測試數據表。註意mysql中的 ...


寫sql時我們經常會遇到需要把從多張表查詢的集果集進行合併。這時就用到了union。使用union或union all 時一定要保證查詢的列的一致性 。不然sql會報錯。欄位不一致的話可以用單引號來占位。

例:

SELECT T102.CI_ID AS RES_ID,
       T102.CITYPE_ID AS RESTYPE_ID,
       T102.ASSET_NUMB AS RES_CODE,
       '' AS RES_E_NAME,
       T102.CI_NAME AS RES_NAME,
       '' AS APPNAME_NAME,
       '' AS ORIGINAL_ID,
       T102.ASSET_BRAND AS BRAND_ID,
       T102.ASSET_BRAND_NAME AS BRAND_NAME,
       T102.SERIES AS SERIES_ID,
       T102.SERIES_NAME AS SERIES_NAME,
       T102.MODEL AS SPECMODEL_ID,
       T102.MODEL_NAME AS SPECMODEL_NAME,
       T102.NETWORK AS SECZONE_ID,
       T102.INSTALSITE_NAME AS COMPUTERROOM_NAME,
       T102.INSTALSITE AS COMPUTERROOM_ID,
       T102.CABINET_NO AS CABINET_ID,
       T102.CABINET_NO_NAME AS CABINET_NAME,
       '' AS RES_GRADE,
       '' AS IPV4_DESC,
       '' AS BG_ID,
       T102.RUN_CORP_CODE AS BC_ID,
       T102.REMARKS AS RES_DESC,
       T102.ENABLED_STATUS,
       T102.DELETED_FLAG,
       '' AS OSTYPE_ID,
       '' AS OS_VERSION_NO,
       T102.CREATED_AT,
       T102.UPDATED_AT,
       T102.DELETED_AT
  FROM CI_T10203 T102
 WHERE T102.DELETED_FLAG = 'N' --磁帶庫
UNION ALL
SELECT T102.CI_ID AS RES_ID,
       T102.CITYPE_ID AS RESTYPE_ID,
       T102.ASSET_NUMB AS RES_CODE,
       '' AS RES_E_NAME,
       T102.CI_NAME AS RES_NAME,
       '' AS APPNAME_NAME,
       '' AS ORIGINAL_ID,
       T102.ASSET_BRAND AS BRAND_ID,
       T102.ASSET_BRAND_NAME AS BRAND_NAME,
       T102.SERIES AS SERIES_ID,
       T102.SERIES_NAME AS SERIES_NAME,
       T102.MODEL AS SPECMODEL_ID,
       T102.MODEL_NAME AS SPECMODEL_NAME,
       T102.NETWORK AS SECZONE_ID,
       T102.INSTALSITE_NAME AS COMPUTERROOM_NAME,
       T102.INSTALSITE AS COMPUTERROOM_ID,
       T102.CABINET_NO AS CABINET_ID,
       T102.CABINET_NO_NAME AS CABINET_NAME,
       '' AS RES_GRADE,
       '' AS IPV4_DESC,
       '' AS BG_ID,
       T102.RUN_CORP_CODE AS BC_ID,
       T102.REMARKS AS RES_DESC,
       T102.ENABLED_STATUS,
       T102.DELETED_FLAG,

       '' AS OSTYPE_ID,
       '' AS OS_VERSION_NO,
       T102.CREATED_AT,
       T102.UPDATED_AT,
       T102.DELETED_AT

  FROM CI_T10204 T102
 WHERE T102.DELETED_FLAG = 'N'

下麵就來說明union和union all的區別

準備一張測試數據表。註意mysql中的varchar在oracle中是varchar2

drop table if exists student;
create table student
(
    id int primary key,
    name varchar2(50) not null,
    score number not null
);
insert into student values(1,'Aaron',78);
insert into student values(2,'Bill',76);
insert into student values(3,'Cindy',89);
insert into student values(4,'Damon',90);
insert into student values(5,'Ella',73);
insert into student values(6,'Frado',61);
insert into student values(7,'Gill',99);
insert into student values(8,'Hellen',56);
insert into student values(9,'Ivan',93);
insert into student values(10,'Jay',90);
commit;
select * from student where id < 4
union
select * from student where id > 2 and id < 6
--查詢結果為

1    Aaron    78
2    Bill     76
3    Cindy    89
4    Damon    90
5    Ella     73

select * from student where id < 4
union all
select * from student where id > 2 and id < 6
--查詢結果為

1    Aaron    78
2    Bill    76
3    Cindy    89
3    Cindy    89
4    Damon    90
5    Ella    73

由此可以看出union和union all的區別在於對重覆數據的處理。

  union 在進行錶鏈接後會篩選掉重覆的記錄,所以在錶鏈接後會對所產生的集果集進行排序運算,刪除重覆的記錄再返回結果集。實際使用時大部分是不會產生重覆的記錄。

  union all只是簡單的將兩個結果合併就返回。如果返回的結果集中有重覆的數據,那麼返回的結果集中就包含有重覆數據。

  從性能上講union all 要比union快很多,它沒有排序去重的耗時。如果表數據量很大,並且可以確定合併的結果集中不會包含重覆數據的話。就使用union all.

  我一般使用union all.真出現重覆數據了再檢查一下。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近使用 iDrac 和 iLO 總是會使用到 .jnlp 文件, 為了方便,今天把設置過程記錄下來。 JNLP 文件,全名為 Java Network Launching Protocol 文件, 我們需要 javaws 命令去執行它。 在 fedora 中 ,我們需要安裝 相應的 rpm 包,y ...
  • 基於centos7靜默安裝oracle 11gr2單實例資料庫 ...
  • 在開始博客之前,還是同樣的給一個大概的目錄結構,實則即為一般MySQL的優化步驟 1、查看SQL的執行頻率 使用show status命令 2、定位哪些需要優化的SQL 通過慢查詢記錄+show processlist命令查看當前線程 3、分析為什麼SQL執行效率低 使用explain/desc命令 ...
  • 關於{RDBMS(關係型資料庫管理系統)設計範式基礎概念 設計關係資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的範式,各種範式呈遞次規範,越高的範式資料庫冗餘越小。 目前關係資料庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴德斯科 ...
  • 數據頁是包含已添加到資料庫表中的用戶數據的結構。 如前所述, 數據頁有三種, 每個都以不同的格式存儲數據。 SQL server 有行內數據頁、行溢出數據頁和 LOB 數據頁。 與 SQL server 中的所有其他類型的頁一樣, 數據頁的大小固定為 8 KB 或8192位元組。 它們由三主要組件組成 ...
  • 學習SqlServer到現在快兩年了吧,分頁查詢總是忘了看筆記,看了又忘。之前用的分頁都是row_number函數的方式,背不住。。。直到今天,看到別人寫的另一種分頁寫法,看似比row_number簡單。好記。。。 分頁原理:越過多少條,取多少條 以前用的row_number函數的方式也記錄一下吧 ...
  • 一.概述 在資料庫中,數據是屬於共用資源,為了保證併發訪問的一致性,有效性,產生了鎖。接下來重點討論mysql鎖機制的特點,常見的鎖問題,以及解決mysql鎖問題的一些方法或建議。 相比其他資料庫,mysql 鎖機制比較簡單,顯著的特點是 不同的存儲引擎支持不同的鎖機制。在innodb中支持行鎖和表 ...
  • 上一篇文章寫過centos 7下clickhouse rpm包安裝和基本的目錄結構,這裡主要介紹clickhouse高可用集群的部署方案,因為對於預設的分散式表的配置,每個分片只有一份,這樣如果掛掉一個節點,則查詢分散式表的時候直接會報錯,這個是基於clickhouse自己實現的多分片單副本集群,配 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...