最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Oracle集合运算符详细说明:UNION和UNIONALL的区别是什么
时间:2026-08-23 09:25:51 编辑:袖梨 来源:一聚教程网
前情提要:本篇博客详细介绍了oracle的SQL的集合运算符,包括UNION、UNION ALL、INTERSECT、MINUS,并且介绍了对应的操作规则和注意事项,并且有使用示例和解析
oracle版本:19c
一、集合运算符的类型和准则
集合操作

集合操作准则
SELECT列表中的表达式必须在个数上匹配。
后续查询中每列的数据类型必须与第一个查询中其对应列的数据类型匹配。
括号可用于更改执行顺序。
ORDER BY子句只能出现在语句的最后。
Oracle服务器和集合运算符
除UNION ALL外,所有行都将自动消除(除UNION ALL运算符外其余集合运算符都会自动去重)。
来自第一个查询的列名将出现在结果中(结果的列名是第一个查询写的列名)。
默认情况下,输出以升序排序,但UNION ALL除外。
二、UNION 和 UNION ALL 运算符
2.1 UNION
UNION操作

UNION运算符使用示例:
SELECT 'A','B' FROM DUALUNION SELECT 'A','D' FROM DUAL;

-- UNION会自动去重SELECT 'A','B' FROM DUALUNION SELECT 'A','B' FROM DUAL;

2.2 UNION ALL

UNION ALL 使用示例:
-- UNION ALL 不会去重SELECT 'A','B' FROM DUALUNION ALLSELECT 'A','B' FROM DUAL;

三、INTERSECT运算符(相交运算符)

使用示例
select * from employees-- 员工表中的所有人的信息INTERSECTselect * from employees where salary > 10000;-- 员工表中工资大于10000的人的信息-- 最后相交返回的结果就是工资大于10000的人的信息

四、MINUS运算符(相减运算符)

使用示例
select * from employees-- 所有员工的信息minus select * from employees where salary > 10000;-- 工资大于10000的员工的信息-- 返回的结果就是所有员工减去工资大于10000的员工,也就是所有工资不大于10000的员工的信息-- 可见返回了92行信息

-- 需要注意的是使用MINUS时要用大表-小表,比如上例中所有员工包含了107行信息,是大表,工资大于10000的员工包含了15行信息,是小表-- 如果将小表写在前面就变成了小表-大表,会造成如下结果-- 将上例查询内容调换位置select * from employees where salary > 10000minus select * from employees;-- 可见查询结果为空,所以使用MINUS时要注意保证大表-小表

五、匹配SELECT列的数据类型
当一个或另一个表中不存在列时,必须匹配数据类型(使用TO_CHAR函数或任何其他转换函数)。
示例
-- 准备两个示例表B和C,可见B的ID3列和C的ID2列的数据类型不一样SQL> DESC B;Name Null? Type----------------------------------------- -------- ----------------------------ID3 NUMBERID4 NUMBER(10)SQL> DESC C;Name Null? Type----------------------------------------- -------- ----------------------------ID4 NUMBERID2 VARCHAR2(10)-- 直接进行集合运算会报错,因为数据类型不一致SQL> SELECT ID4,ID3 FROM B 2 UNION 3 SELECT ID4,ID2 FROM C;SELECT ID4,ID3 FROM B *ERROR at line 1:ORA-01790: expression must have same datatype as corresponding expression-- 使用TO_CHAR转换ID3的数据类型,可见可以成功进行集合运算SQL> SELECT ID4,TO_CHAR(ID3) AS HAHA FROM B 2 UNION 3 SELECT ID4,ID2 FROM C; ID4 HAHA---------- ---------------------------------------- 3 10 4 20 10 100 20 200
六、在集合操作中使用ORDER BY 子句
在复合查询的末尾,ORDER BY子句只能出现一次。
组件查询不能有单独的ORDER BY子句。
ORDER BY子句仅识别第一个SELECT查询的列。
默认情况下,第一个SELECT查询的第一列用于按升序对输出进行排序。
示例
-- ORDER BY 只能放在语句的最后,并且只能识别第一个SELECT中查询的列SQL> SELECT ID4,TO_CHAR(ID3) AS HAHA FROM B 2 UNION 3* SELECT ID4,ID2 FROM C ORDER BY HAHA; ID4 HAHA---------- ---------------------------------------- 3 10 10 100 4 20 20 200
总结
相关文章
- 大模型知识蒸馏实战:用小模型替代大模型的企业级方案 08-23
- 孪生体带动缩放组件操作步骤 08-23
- 小米路由器扩展器怎么安装(小米路由器扩展器安装方法) 08-23
- 如何将AI内容高效转化为引人注目的PPT演示文稿 08-23
- 处理Excel表格被分割的高效做法有哪些? 08-23
- 如何选择合适的AI数据存储解决方案以提升工作效率 08-23