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

2021/5/10 2:25:20

本文主要是介绍Oracle 19C学习 - 09. 使用集合运算符UNION和UNION ALL,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

集合操作准则

  • SELECT列表中的表达式必须在数字上匹配。
  • 后续查询中每列的数据类型必须与第一个查询中其对应列的数据类型匹配。
  • 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出现在最后一个查询语句,不能出现在别的位置。

 



这篇关于Oracle 19C学习 - 09. 使用集合运算符UNION和UNION ALL的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程