【SqlServer系列】集合運算

来源:http://www.cnblogs.com/wangjiming/archive/2017/07/28/7248369.html
-Advertisement-
Play Games

1 概述 1 概述 已發佈【SqlServer系列】文章如下: 【SqlServer系列】SQLSERVER安裝教程 【SqlServer系列】資料庫三大範式 【SqlServer系列】表單查詢 【SqlServer系列】表連接 【SqlServer系列】子查詢 【SqlServer系列】開啟Sql ...


1   概述

已發佈【SqlServer系列】文章如下:

本篇文章接著寫【SqlServer系列】集合運算,主要內容為:1、並集(UNION)運算、交集(INTERSECT)運算、差集(EXCEPT)運算  2、集合運算優先順序  3、避開不支持的邏輯查詢處理

1.2  關於三種運算簡要概述

 

1.3 本章測試樣表和SQL

業務場景

有兩張表,分別為員工表(員工ID,員工姓名,職位,學位,籍貫,電話)和銷售表(銷售ID,員工ID,員工姓名,職位,學位,銷售額)

(1)創建集合DB:WJM_CollectDemo

1 IF DB_ID('WJM_CollectDemo') IS NOT NULL
2    DROP DATABASE WJM_CollectDemo
3    GO
4    CREATE DATABASE WJM_CollectDemo

(2)創建員工表並初始化

 1 USE WJM_CollecDemo
 2 
 3 --CREATE TABLE(Employees) AND INITIAL
 4 CREATE TABLE Employees
 5 (
 6   empID INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
 7   empName VARCHAR(50),
 8   position VARCHAR(50),
 9   degree VARCHAR(50),
10   jiGuan VARCHAR(50),
11   tel VARCHAR(50),
12 )
13 
14 INSERT INTO Employees VALUES
15 ('張三','銷售經理','本科','上海','021-298989'),
16 ('李四','銷售','本科','北京','010-298181'),
17 ('李明','銷售','','深圳','0755-698988'),
18 ('王華','銷售','本科','杭州','0571-593132')

執行查詢語句

1  SELECT *
2  FROM Employees

查詢結果為:

(3)創建銷售表並初始化

 1 USE WJM_CollectDemo
 2 
 3 --CREATE TABLE(Sales) AND INITIAL
 4 CREATE TABLE Sales
 5 (
 6   salesID INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
 7   empID INT,
 8   empName VARCHAR(50),
 9   position VARCHAR(50),
10   degree VARCHAR(50),
11   SaleCount VARCHAR(100)
12 )
13 
14 INSERT INTO Sales VALUES
15 ('1','張三','銷售經理','本科','5000w'),
16 ('3','李明','銷售','','100w'),
17 ('4','王華','銷售','本科','1500w'),
18 ('','張濤','外聘銷售','碩士','2000w')

執行查詢語句

1  SELECT *
2  FROM Sales

查詢結果

 

2   三種基本的集合運算

 2.1   並集運算(UNION)

 (1)UNION ALL(不刪除重覆行) 

 Code:

1 SELECT empID,empName,position,degree
2 FROM Employees
3 UNION ALL
4 SELECT empID,empName,position,degree
5 FROM Sales

查詢結果:

結果分析:

生成結果為:第一個查詢結果集與第二個查詢結果集簡單的組合,保留重覆行。

 (2)UNION(隱式DINSTINCT,刪除重覆行)

 Code:

1 SELECT empID,empName,position,degree
2 FROM Employees
3 UNION  
4 SELECT empID,empName,position,degree
5 FROM Sales

查詢結果:

結果分析:

UNION(隱式DISTINCT)相當與把UNION ALL當作中間結果,然後在其基礎上通過DISTINCT過濾掉重覆行;

 (3)小結

a.並集為兩個查詢結果集的簡單組合;
b.多集指集合中有重覆的行,單集指集合中沒有重覆行; c.UNION ALL一般為多集,UNION(UNION DISTINCT)一般為集合; d.具有對稱性,即無論哪個查詢在前面,查詢結果都是一樣的;
e.進行null值比較時,認為是相等的,而內連接,EXISTS謂詞在進行null比較結果為UNKNOWN;

 2.2 交集(INTERSECT)

 Code:

1 SELECT empID,empName,position,degree
2 FROM Employees
3 INTERSECT  
4 SELECT empID,empName,position,degree
5 FROM Sales

查詢結果:

結果分析:

交集為第一個查詢結果集和第二個查詢結果集公有的部分

 小結

a.交集為第一個查詢結果集和第二個查詢結果集公有的部分;
b.進行null值比較時,認為是相等的,而內連接,EXISTS謂詞在進行null比較結果為UNKNOWN; c.有兩種INTERSECT和INTETSECT ALL(SQL2008版本沒實現); d.具有對稱性,即無論哪個查詢在前面,查詢結果都是一樣的;

2.3  差集

Code:

1 SELECT empID,empName,position,degree
2 FROM Employees
3 EXCEPT  
4 SELECT empID,empName,position,degree
5 FROM Sales

查詢結果:

結果分析:

差集運算對兩個輸入查詢的結果集進行操作,返回出現在第一個結果集,但不出現在第二個結果集中的所有行

小結:

a. EXCEPT運算對兩個輸入查詢的結果集進行操作,返回出現在第一個結果集,但不出現在第二個結果集中的所有行;
b.不具有對稱性;
c.有兩種EXCEPT和EXCEPT ALL(SQL2008版本沒實現);

 

3   集合運算的優先順序

SQL定義了集合運算之間的優先順序。INTERSECT優先順序比UNION和EXCEPT高,UNION和EXCEPT優先順序一樣。執行順序為從左到右執行。

CODE:

1 SELECT empID,empName,position,degree
2 FROM Employees
3 UNION 
4 SELECT empID,empName,position,degree
5 FROM Sales
6 INTERSECT
7 SELECT empID,empName,position,degree
8 FROM Employees

查詢結果:

結果分析:

小結:

a.INTERSECT優先順序最高,UNION和EXCEPT優先順序一樣;
b.按照從左=>右的執行順序執行;

 

4   避開不支持的查詢處理

 略(高級部分講解)

5   參考文獻

【01】Microsoft  SqlServer 2008技術內幕:T-SQL 語言基礎

【02】Microsoft  SqlServer 2008技術內幕:T-SQL 查詢

6   版權

 

  • 感謝您的閱讀,若有不足之處,歡迎指教,共同學習、共同進步。
  • 博主網址:http://www.cnblogs.com/wangjiming/。
  • 極少部分文章利用讀書、參考、引用、抄襲、複製和粘貼等多種方式整合而成的,大部分為原創。
  • 如您喜歡,麻煩推薦一下;如您有新想法,歡迎提出,郵箱:[email protected]
  • 可以轉載該博客,但必須著名博客來源。

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

-Advertisement-
Play Games
更多相關文章
  • text-overflow: -o-ellipsis-lastline;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical; ...
  • activity ...
  • Android高效記憶體之讓你的圖片省記憶體 在做記憶體優化的時候,我們發現除瞭解決記憶體泄露問題,剩下的就只有想辦法減少真實的記憶體占用。而在App中,大部分記憶體可能被我們圖片占用了,所以減少圖片的記憶體占用可以帶來直接的效果。 一、一張圖片到底占用多少記憶體 我們先假設我們有一張圖片是600 * 800像素的 ...
  • 1. keytool 命令 1)使用JDK中的一個命令keytool,都有哪些命令呢,使用 keytool -help 進行查看 2)本次使用 keytool -genkeypair 命令生成簽名,查看此命令都有哪些參數keytool -genkeypair -help 發現keytool -gen ...
  • 索引的概念 索引的用途:我們對數據查詢及處理速度已成為衡量應用系統成敗的標準,而採用索引來加快數據處理速度通常是最普遍採用的優化方法。 索引是什麼:資料庫中的索引類似於一本書的目錄,在一本書中使用目錄可以快速找到你想要的信息,而不需要讀完全書。在資料庫中,資料庫程式使用索引可以重啊到表中的數據,而不 ...
  • 轉自:http://www.maomao365.com/?p=4508 <span style="color:red;font-weight:bold;">我們熟知一個視圖需要滿足以下條件,我們才可以使用upate視圖來通過視圖修改數據的目標,那麼現在有一個需求,領導需要我們建立一個視圖,並且禁止通 ...
  • 在一切開始之前,先看下微軟的建議:在系統的整體性能優化裡面, TSQL優化優先順序並不是最高的。 本文包括四部分: SET STATISTICS TIME ON SET STATISTICS IO SET SHOWPLAN_ALL ON SET STATISTICS PROFILE ON SET 函數 ...
  • Apache Spark的工作原理 "Why Apache Spark" "關於Apache Spark" "如何安裝Apache Spark" " Apache Spark的工作原理" "spark彈性分散式數據集" "RDD持久性" "spark共用變數" "Spark SQL" "Spark ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...