Home [SQL] 集合運算子 Union (聯集)、Except (差集)、Intersect (交集)
Post
Cancel

[SQL] 集合運算子 Union (聯集)、Except (差集)、Intersect (交集)

集合運算子

  • Union (聯集):垂直合併兩資料表。(沒有重複資料)
  • Union All(聯集):垂直合併兩資料表。(有重複資料)
  • Except (差集):只取「第一個 select」但不存在「第二個 select」的資料。
    將 table1 的資料減去 table2的資料 (相當於是減法運算的概念)
  • Intersect (交集):將兩資料表相同的資料取出來 (無重複的資料)。
    找出 table1 和 table2 相同的資料
1
2
3
4
select column_name1, column_name2 from table1
union -- union all, except, intersect
select column_name3, null from table1 --欄位數量要相同,沒有的欄位用null使其相同
order by 1 --欄位名不同,可指定編號排序
  • 每個 select語句的「欄位數量」要一致。(欄位名可以不相同)
    沒有的欄位可以加上null使其數量相同。
  • 每個 select語句對應的欄位,「資料型態」必須要相同。

返回結果的資料集欄位名稱,通常會依據「第一個SELECT」查詢的欄位名稱。

若要對結果集進行排序,當每個select語法中的欄位名有所不同時,就要在order by語法中指定「欄位編號」,比如 order by 1就會按第一個欄位排序。

sql-union-except-intersect

Union 聯集

無重複列Row

垂直合併兩資料表(無重複資料)

將2個資料表的紀錄垂直結合在一起,會過濾掉兩個結果集重複的資料,只保留一筆(有重複的資料只會顯示其中一筆)。

UNIONJOIN 不同的地方在於:

  • JOIN:橫向結合 (合併多個資料表的各欄位)
  • UNION:垂直結合 (合併多個資料表中的紀錄)

語法

1
2
3
select column1, column2 from table1
union
select column4, column4 from table2

Union All 聯集

有重複列Row

垂直合併兩資料表(有重複資料)

將2個資料表的紀錄垂直結合在一起,會保留原始結果(不會過濾重複的資料,有重複的資料)。

語法

1
2
3
select column1, column2 from table1
union all
select column4, column4 from table2

Except 差集

只取「第一個select」但不存在「第二個select」的資料。
將 table1 的資料減去 table2的資料 (相當於是減法運算的概念)

語法

1
2
3
select column1, column2 from table1
except
select column4, column4 from table2

Intersect 交集

將兩資料表相同的資料取出來,且有重複的資料只會顯示其中一筆 (無重複的資料)。
找出 table1 和 table2 相同的資料

語法

1
2
3
select column1, column2 from table1
intersect
select column4, column4 from table2
This post is licensed under CC BY 4.0 by the author.

[SQL] 求負責人的總業績(差集Except)

[SQL] SQL語句的執行順序、EXISTS執行順序、EXISTS和IN執行效率