数据库中的集合运算

1.数据库中的集合运算主要有联合,完全联合,相交,相减
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
Intersect:对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
Minus:对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。
数据库中的集合运算
1)联合union
• UNION 操作符返回两个查询的结果集的并集,消除重复⾏
选择的列数必须相同。
所选列的数据类型必须在相同的数据类型
组中(如数字或字符)。
列的名称不必相同。
UNION操作选择的所有列。
在重复检查期间,NULL值不会被忽略。
默认情况下,输出按照SELECT句列的升
序排序。
SQL> select deptno from emp;

    DEPTNO  
----------
        20
        30
        30
        20
        30
        30
        10
        20
        10
        30
        20
        30
        20
        10
 
 emp表中的deptno 列的数据
SQL> select deptno from dept;

    DEPTNO
----------
        10
        20
        30
        40
dept 表中deptno的列
SQL> select deptno from emp
  2  union
  3  select deptno from dept;

    DEPTNO
----------
        10
        20
        30
        40

通过union指令将两个表中的的deptno联合起来
2)完全联合union all
SQL> select deptno from emp
union all
3 select deptno from dept;

DEPTNO

    20
    30
    30
    20
    30
    30
    10
    20
    10
    30
    20
    30
    20
    10


    10
    20
    30
    40

3)相交 intersect
1.查询中SELECT语句选择的列的数量和数据类型必须与查询中使的所有SELECT语句相同。
但是,列的名称不必相同。
2.颠倒交叉表的顺序不会改变结果。
3.INTERSECT不会忽略空值。

SQL> select deptno from emp
2 intersect
3 select deptno from dept;

DEPTNO

    10
    20
    30

4)相减 minus

SQL> select deptno from dept
  2  minus
  3  select deptno from emp;

    DEPTNO
----------
        40

用相减命令将部门的中相同的去掉,默认排序
5)操作注意事项
1.在select列表中的列名和表达式必须在数量上匹配
2.第二个查询中的每一列数据类型必须与第一个查询列的数据类型相匹配
3.可以用括号来改变执行顺序
4.重点!!!
order by子句只能在最后出现,可以使用第一个查询中的列名,别名或相对位置
2.相匹配的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;
3 集合中使用order by
1.复合查询中使用order by 语句在结束时只能出现一次
2.集合操作中每一个查询不能有单独的order by语句
order by 子句中只能识别第一个select 查询使用升序对输出进行排序。