知识点:
- UNION返回两个结果集的并集。还有一个union all的用法(union没有包含重复列,union all 包含重复列)
- EXCEPT 返回两个结果集的差(即从左查询中返回右查询没有找到的所有非重复值(第一个表有,第二个表无))。
- 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(这一行待就证) |