Oracle 19C学习 - 09. 使用集合运算符UNION和UNION ALL

 (本博文采用的数据库是Oracle自带的hr用户范本数据库)

集合操作准则

  • 进行集合运算的两个查询结果的字段数量必须相同。
  • 进行集合运算的两个查询结果的梅格列的数据类型要匹配。
  • ORDER BY子句只能出现在语句的最后。
  • 来自第一个查询的列名将作为结果的抬头。
  • 默认情况下,输出以升序排序,但UNION ALL除外。

 

实例注解:

  • 后续查询中每列的数据类型必须与第一个查询中其对应列的数据类型匹配:

第一个查询得到两个列的数据,第二个查询同样得到两个列的数据,并且COL1和COL3的数据类型要相同; COL2和COL4的数据类型要相同。

  • 来自第一个查询的列名将出现在结果中:

UNION后得到的视图的两个列的列名叫做COL1和COL2.

SELECT COL1, COL2 FROM TAB

UNION ALL

SELECT COL3, COL4 FROM TAB

 

UNION ALL运算符

将第一个查询的结果和第二个查询的结果拼接起来,不去重。

 

 

 

UNION运算符

将第一个查询的结果和第二个查询的结果拼接起来,去重。

--UNION去重--
SELECT 'A' ,'B' FROM dual UNION SELECT 'A', 'B' FROM dual; ' ' - - A B
--UNION ALL不去重-- SELECT
'A' ,'B' FROM dual UNION ALL SELECT 'A', 'B' FROM dual; ' ' - - A B A B

 

INTERSECT相交运算符

返回两个查询结果共有的行(下图的黄色部分)

 

SELECT * FROM employees
INTERSECT
SELECT * FROM employees WHERE salary > 10000;
--相交后,只保留工资大于一万的查询结果  

 

 

MINUS相减运算符

返回第一个查询结果中所有在第二个查询结果中不存在的行(下图的黄色部分), 用大的结果集去减小的结果集。

 

 

SELECT * FROM employees
MINUS 
SELECT * FROM employees WHERE salary > 10000;
--相减后,只保留工资小于等于一万的查询结果  

 

 

在集合操作中使用ORDER BY子句

  • 在复合查询的末尾,ORDER BY子句只能出现一次。
  • ORDER BY子句仅识别第一个SELECT查询结果集的列名。
  • 默认情况下,第一个SELECT查询的第一列用于按升序对输出进行排序。
SELECT last_name, salary FROM employees
MINUS 
SELECT last_name, salary FROM employees WHERE salary > 10000 ORDER BY salary DESC;
--ORDER BY出现在最后一个查询语句,不能出现在别的位置。

 

posted on 2021-05-09 22:45  LeoZhangJing  阅读(332)  评论(0编辑  收藏  举报

导航