SQL查詢:並集、差集、交集
阿新 • • 發佈:2018-11-20
新建兩個表進行測試:
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.示例:
無重複記錄:
有重複記錄:
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展示結果。
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);