文章目录
1. 集合运算
将多个查询用集合运算符连接组成⼀个单个的查询
控制返回的顺序
注意事项
- 在select列表中中得列表和表达式在数量上必须匹配
- 在第二个查询中得每一列得数据类型必须与第一个查询其对应列得数据类型相匹配
- 可以用括号来改变执行顺序
- order by 子句
- 只能在语句最后出现
- 可以使用第一个查询中得列名,别名或相对位置)
- 除了union all之外,系统会自动删除重复得记录
- 列明为第一个查询返回的结果
- 除union all之外,系统自动按照第一个查询中得第一个列得升序排列
2. UNION 操作符
UNION 操作符返回两个查询的结果集的并集,消除重复行
- 选择的列数必须相同。
- 所选列的数据类型必须在相同的数据类型组中(如数字或字符)。
- 列的名称不必相同。
- UNION操作选择的所有列。
- 在重复检查期间,NULL值不会被忽略。
- 默认情况下,输出按照SELECT子句列的升序排列
3. UNION ALL 操作符
UNION ALL操作符返回两个查询的结果集的并集,包括所有重复⾏
4. INTERSECT 操作符
INTERSECT 操作符返回两个查询公共的行
- 查询中SELECT语句选择的列的数量和数据类型必须与查询中使⽤的所有SELECT语句相同。但是,列的名称不必相同。
- 颠倒交叉表的顺序不会改变结果。
- INTERSECT不会忽略空值
SQL> select deptno from emp
2 intersect
3 select deptno from dept;
DEPTNO
----------
10
20
30
5. MINUS 操作符
MINUS是从第⼀个查询结果减去第二个查询结果,如果有相交部分就减去相交部分;否则和第⼀个查询结果没有区别
- 列的数量必须相同,查询中的SELECT语句所选择的列的数据类型必须属于查询中使用的所有SELECT语句中的相同数据类型组。
- 列的名称不必相同
6. 相匹配的select语句
- 当字段在⼀个或另⼀个表中不存在。
select ename , ‘xxx’ from emp;
- 使⽤union操作符匹配字段
select ename , ‘xxx’ from emp
union
select dname , ‘ddd’ from dept;
- 当字段在⼀个或另⼀个表中不存在,必须匹配上数据类型
select empno , ename from emp
union
select deptno , to_char(null) dname from dept;
7. 集合操作中使⽤order by
- 复合查询中 order by子句只能在结束时出现一次
- 集合操作中每个查询不能有单独得order by 子句
- order by 子句中只能识别第一个select查询得列
- 默认情况下,第一列得第一个select查询使用升序对输出进行排序