1. 程式人生 > >SQL UNION 和 UNION ALL 操作符的區別

SQL UNION 和 UNION ALL 操作符的區別

SQL UNION 操作符

UNION 操作符用於合併兩個或多個 SELECT 語句的結果集,不包括重複行,同時進行預設規則的排序。

請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每條 SELECT 語句中的列的順序必須相同。

SQL UNION 語法

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2

SQL UNION ALL 語法

SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2

Union:對兩個結果集進行並集操作,不包括重複行,同時進行預設規則的排序;

Union All:對兩個結果集進行並集操作,包括重複行,不進行排序;

另外,UNION 結果集中的列名總是等於 UNION 中第一個 SELECT 語句中的列名。


下面進行簡單的測試(因為是測試,所以sql程式碼寫的很簡單,沒有什麼很嚴格的規範,只是為了理解這兩者之間的區別)

嚴格的標準寫法應該先判斷資料庫是否存在,表是否存在等等約束

第一步,建庫:

Create database Test  
go  
  
use Test  
go  
第二步,建表:
Create table Table1  
(  
    id int not null,  
    name varchar(20) not null  
)  
  
Create table Table2  
(  
    id int not null,  
    name varchar(20) not null  
) 
第三步,插入測試資料:
Insert into Table1 values (1,'姚羽')  
Insert into Table1 values (2,'邊兵兵')  
Insert into Table1 values (3,'袁磊')  
  
Insert into Table2 values (1,'姚羽')  
Insert into Table2 values (2,'柳春平')  
Insert into Table2 values (3,'張永超')  
Insert into Table2 values (4,'劉華健')  
第四步,測試開始:
select * from Table1  
select * from Table2 
執行兩個表的查詢結果如下

可以很容易的看到,上面插入的測試資料當中,有一條是重複的

那麼我們  先看執行union 看看:

select * from Table1  
union   
select * from Table2  

再執行union  all 看看:

select * from Table1  
union all  
select * from Table2