SQL集合操作


SQL集合操作用於組合兩個或多個SQL SELECT語句。

集合操作的型別

  • 聯合 - Union
  • 聯合所有 - UnionAll
  • 交集 - Intersect
  • 差集 - Minus

聯合 - Union

SQL Union操作用於組合兩個或多個SQL SELECT查詢的結果。
union操作中,在應用UNION操作的兩個表中,所有資料型別和列的數量必須相同。
union操作從結果集中刪除重複的行。

語法

SELECT column_name FROM table1  
UNION  
SELECT column_name FROM table2;

假設有兩個表,第一個表:First 的結構和資料如下 -

ID NAME
1 Jack
2 Harry
3 Jackson

第二個表:Second 的結構和資料如下 -

ID NAME
3 Jackson
4 Stephan
5 David

Union的SQL查詢如下:

SELECT * FROM First   
UNION  
SELECT * FROM Second;

執行查詢後如下所示:

ID NAME
1 Jack
2 Harry
3 Jackson
4 Stephan
5 David

2. 全聯合 - Union All

Union All操作等於Union操作。它返回集合但不刪除重複和排序資料。

語法:

SELECT column_name FROM table1  
UNION ALL  
SELECT column_name FROM table2;

範例: 使用上面的第一個和第二個表。

Union All查詢語句如下:

SELECT * FROM First   
UNION ALL  
SELECT * FROM Second;

執行查詢後結果如下所示:

ID NAME
1 Jack
2 Harry
3 Jackson
3 Jackson
4 Stephan
5 David

3. 相交

它用於組合兩個SELECT語句。 相交(Intersect)操作從兩個SELECT語句返回公共行。
在「相交」操作中,資料型別和列的數量必須相同。
它沒有重複項,預設情況下按升序排列資料。

語法

SELECT column_name FROM table1  
INTERSECT  
SELECT column_name FROM table2;

範例:

使用上面的First表和Second表。

相交查詢語句是:

SELECT * FROM First   
INTERSECT  
SELECT * FROM Second;

執行上面查詢語句,得到以下結果:

ID    NAME
----------------------------------
3    Jackson

4. 差集

它結合了兩個SELECT語句的結果。 差集運算子用於顯示第一個查詢中存在但第二個查詢中不存在的行。
它沒有重複項,預設情況下按升序排列資料。

語法:

SELECT column_name FROM table1  
MINUS  
SELECT column_name FROM table2;

範例

使用上面的First表和Second表。

差積查詢語句是:

SELECT * FROM First   
MINUS  
SELECT * FROM Second;

執行上面查詢語句,得到以下結果:

ID    NAME
------------------------------------
1    Jack
2    Harry