集合运算

一、表的加减法
1、集合运算
集合运算就是对满足同一规则的记录进行的加减等四则运算。
集合运算可以去除重复行。如果希望集合运算保留重复行,就需要使用all选项。
使用union(并集)、intersect(交集)、except(差集)、minus(差集)等集合运算符来进行集合运算。
    
         集合运算_第1张图片
         集合运算符会去除重复的记录,union all会保留重复行。

2、表的加法—union

         Union:对两个结果集进行并集操作,重复行只取一次,同时进行默认规则的排序。

         Unionall:对两个结果集进行并集操作,包括所有重复行,不进行排序。

        例:创建如下表dept1,进行集合运算。

        
         集合运算_第2张图片
        查看dept表
         集合运算_第3张图片
         使用union运算dept和dept1表:
         集合运算_第4张图片  

3、union all

         会包含重复行。

         集合运算_第5张图片
        注:可以看出只有union all的结果集是不排序的。

4、交集intersect

         即选取两个记录集合中的公共部分。

         集合运算_第6张图片

        若希望保留重复行也可以使用intersect all。

5、差集minus

         集合运算_第7张图片

        Oracle中差集使用的是minus,db2等数据库使用except来进行差集运算。

         注意被减数与减数位置不同得到的结果也不同。

         集合运算_第8张图片

6、集合运算的注意事项

         1>作为运算对象的记录的列数必须相同。

         2>作为运算对象的记录中列的类型必须一致。列名不必相同,但要类型匹配且顺序要对应,大类型对上就行了,比如char对varchar2,date对timestamp都可以,字段数要等同,不等需要补全。

         集合运算_第9张图片
         集合运算_第10张图片
        因表的列数不同,直接select*进行集合运算会出错。
         集合运算_第11张图片
        但使用相应类型匹配的列进行集合运算是可以的。
         集合运算_第12张图片
        3>可以使用任何select语句,即where、group by、having等子句都可以使用。但 order by 子句只能在最后使用一次。
        集合运算_第13张图片

        4> 四种集合运算符优先级按先后出现的顺序执行,如有特殊要求可以使用括号。

        5> 集合中order by的用法

            A、 缺省情况下,复合查询后的结果集是按所有字段的组合进行排序的(除union all 外),如果不希望缺省的排序,也可以使用order by显示排序。

            B、显式order by是参照第一个select语句的列元素。所以,order by后的列名只能是第一个select使用的列名、别名、列号。如果是补全的null值需要order by,则需要使用别名。

             集合运算_第14张图片
             集合运算_第15张图片
            集合运算_第16张图片

        






你可能感兴趣的:(Oracle)