1. 程式人生 > >SQL中union(並集)、except(差集)、intersect(交集)用法,然而 mysql 不支援except 和 intersect

SQL中union(並集)、except(差集)、intersect(交集)用法,然而 mysql 不支援except 和 intersect

​​​​​​知識點:

  1. UNION返回兩個結果集的並集。還有一個union all的用法(union沒有包含重複列,union all 包含重複列)
  2. EXCEPT 返回兩個結果集的差(即從左查詢中返回右查詢沒有找到的所有非重複值(第一個表有,第二個表無))。
  3. INTERSECT 返回 兩個結果集的交集(即兩個查詢都返回的所有非重複值)。

一.union 的用法

語法:
UNION 子句的基本語法如下所示:
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

UNION

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

例:
select test1_num,test1_address from test1
union
select test2_num,test2_address from test2;

解析:
在使用 UNION 的時候,每個 SELECT 語句必須有相同數量的選中列、相同數量的列表達式、相同的資料型別,並且它們出現的次序要一致,不過長度不一定要相同。
如:兩個表查詢的都是兩列,即select語句有相同的數量的選中列;test1_num和test2_num都是相同的資料型別,且都是在查詢的結果中第一個出現,即出現的次序要一致。

union all 的用法

UNION ALL 運算子用於將兩個 SELECT 語句的結果組合在一起,重複行也包含在內。
UNION ALL 運算子所遵從的規則與 UNION 一致。
語法:

UNION ALL的基本語法如下:
    SELECT column1 [, column2 ]
    FROM table1 [, table2 ]
    [WHERE condition]

    UNION ALL

    SELECT column1 [, column2 ]
    FROM table1 [, table2 ]
    [WHERE condition]

二.except 的用法(同union)

語法:
EXCEPT 子句的基本語法如下所示:
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

EXCEPT

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

例:

第一步:建表,插入資料

表 t1

t1_num t1_name
4 a
5 b
6 c
7 null

表 t2

t2_num t2_name
6 c
7 null
8 d
9 e

 第二步:

select t1_num,t1_name from t1
except
select t2_num,t2_name from t2;

 結果:

t1_num t1_name
4 a
5 b

三.intersect 的用法(同union)

語法:
EXCEPT 子句的基本語法如下所示:
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

intersect

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

例:

select t1_num,t1_name from t1
intersect
select t2_num,t2_name from t2;

結果:

t1_num t1_name
6 c
7 null(這一行待就證)