1. 程式人生 > >SQL查詢:並集、差集、交集

SQL查詢:並集、差集、交集

新建兩個表進行測試: 
test_a

ID name
1 曹操
2 郭嘉
3 孫權
4 周瑜

test_b

ID name
1 劉備
2 關羽
3 張飛
4 孫權
5 周瑜

1.UNION形成並集

  UNION可以對兩個或多個結果集進行連線,形成“並集”。 
  子結果集所有的記錄組合在一起形成新的結果集。

1、限定條件

  要是用UNION來連線結果集,有4個限定條件。 
  (1)、子結果集要具有相同的結構。 
  (2)、字結果集的列數必須相同。 
  (3)、子結果集對應的資料型別必須可以相容。 
  (4)、每個子結果集不能包含order by和compute子句。

2、語法形式

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

3.示例:

  無重複記錄: 
Union形成並集-無重複記錄 
  有重複記錄: 
Union形成並集-重複記錄

2.EXCEPT形成差集

  EXCEPT可以對兩個或多個結果集進行連線,形成“差集”。 
  返回左邊結果集合中已經有的記錄,而右邊結果集中沒有的記錄。

1、限定條件

  要是用EXCEPT來連線結果集,有4個限定條件。 
  (1)、子結果集要具有相同的結構。 
  (2)、字結果集的列數必須相同。 
  (3)、子結果集對應的資料型別必須可以相容。 
  (4)、每個子結果集不能包含order by和compute子句。

2、語法形式

SELECT column_name(s) FROM table1
EXCEPT
SELECT column_name(s) FROM table2;

  博主的MySQL版本不支援EXCEPT,暫用NOT IN展示結果。 
NOT IN

3.INNER JOIN形成交集

  INNER JOIN可以對兩個或多個結果集進行連線,形成“交集”。 
  返回左邊結果集和右邊結果集中都有的記錄。

1、限定條件

  要是用INNER JOIN來連線結果集,有4個限定條件。 
  (1)、子結果集要具有相同的結構。 
  (2)、字結果集的列數必須相同。 
  (3)、子結果集對應的資料型別必須可以相容。 
  (4)、每個子結果集不能包含order by和compute子句。

2、語法形式

SELECT column_name(s) FROM table1
INNER JOIN table2
ON table2.column_name(s) = table1.column_name(s);
SELECT column_name(s) FROM table1
JOIN table2
ON table2.column_name(s) = table1.column_name(s);

INNER JOIN