目标:
1、了解Set操作符类型
2、学会使用Set操作符使得多个查询形成一个查询
3、对返回的结果如何控制次序
Agenda
一、Set操作符的类型和原则
二、本章使用的两张表
三、学会使用UNION和UNION ALL操作符
四、学会使用INTERSECT操作符
五、学会使用MINUS操作符
六、匹配SELECT查询
七、在ORDER BY子句中使用Set操作符
一、Set操作符的类型和原则
UNION ---> 去掉重复元素
UNION ALL ---> 不考虑重复元素
![](http://img.blog.itpub.net/blog/attachment/201601/13/30197839_1452686630oeUO.jpg?x-oss-process=style/bb)
INTERSECT ---> 取交集,取两个集合共有的部分
![](http://img.blog.itpub.net/blog/attachment/201601/13/30197839_1452686630mqlV.jpg?x-oss-process=style/bb)
MINUS ---> 相减,即减去A中包含于B的元素
![](http://img.blog.itpub.net/blog/attachment/201601/13/30197839_14526866301kCs.jpg?x-oss-process=style/bb)
Set操作符使用原则
1、两个集合查询的列数要相同
2、查询的次序要相同,只要属于相同的类型组就可以,比如CHAR和VARCHAR2
3、可以使用括号改变优先级
4、ORDER BY只可以出现在查询子句最后
Oracle 中Set操作符特点
1、除了UNION ALL其他三种操作中没有重复行
2、最终的结果使用第一个查询的列名
3、除了UNION ALL其他操作要排序,且为第一列升序排序
二、本章使用的两张表
EMPLOYEES:员工表
JOB_HISTORY:记录员工变更记录
三、学会使用UNION和UNION ALL操作符
UNION 没有重复行
示例:
![](http://img.blog.itpub.net/blog/attachment/201601/13/30197839_1452686631ZW69.jpg?x-oss-process=style/bb)
![](http://img.blog.itpub.net/blog/attachment/201601/13/30197839_1452686631gxkK.jpg?x-oss-process=style/bb)
UNION ALL 含有重复行
![](http://img.blog.itpub.net/blog/attachment/201601/13/30197839_1452686631Nz36.jpg?x-oss-process=style/bb)
![](http://img.blog.itpub.net/blog/attachment/201601/13/30197839_1452686631mBq1.jpg?x-oss-process=style/bb)
明显比使用 UNION 时多了两行,且没有排序
四、学会使用INTERSECT操作符
将两个集合中相同的部分返回出来
示例:查看哪些员工变更工作后又变更回来了
![](http://img.blog.itpub.net/blog/attachment/201601/13/30197839_1452686632DdXU.jpg?x-oss-process=style/bb)
五、学会使用MINUS操作符
减去A中包含于B的元素
示例:查询没有变更工作的员工
![](http://img.blog.itpub.net/blog/attachment/201601/13/30197839_1452686632DSOp.jpg?x-oss-process=style/bb)
![](http://img.blog.itpub.net/blog/attachment/201601/13/30197839_1452686632BKIu.jpg?x-oss-process=style/bb)
六、匹配SELECT查询
当两个集合中对应的数据类型不同的是,需要使用TO_CHAR等匹配相同
示例1:
![](http://img.blog.itpub.net/blog/attachment/201601/13/30197839_14526866329v7H.jpg?x-oss-process=style/bb)
![](http://img.blog.itpub.net/blog/attachment/201601/13/30197839_1452686633H1Qi.jpg?x-oss-process=style/bb)
示例2:
![](http://img.blog.itpub.net/blog/attachment/201601/13/30197839_1452686633nqOq.jpg?x-oss-process=style/bb)
七、在ORDER BY子句中使用Set操作符
1、ORDER BY子句放在组合查询最后,且只能出现一次
2、组合查询中每个子查询不能出现单独的ORDER BY子句
3、ORDER BY子句只认识第一个查询的列名
示例1:
![](http://img.blog.itpub.net/blog/attachment/201601/13/30197839_1452686633iiSa.jpg?x-oss-process=style/bb)
![](http://img.blog.itpub.net/blog/attachment/201601/13/30197839_1452686634dyq0.jpg?x-oss-process=style/bb)
即子查询中不能出现单独的ORDER BY子句
示例2:
![](http://img.blog.itpub.net/blog/attachment/201601/13/30197839_1452686634TY80.jpg?x-oss-process=style/bb)
即ORDER BY子句不认识第二个查询的列名
但是如果想按照第三个次序查询,怎么办?
示例:![](http://img.blog.itpub.net/blog/attachment/201601/13/30197839_1452686665Z6d2.jpg?x-oss-process=style/bb)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30197839/viewspace-1976111/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30197839/viewspace-1976111/