OracleSET运算符
SET操作符可以将多个查询组合成一个新的查询。在使用SET操作符时,特别需要注意的是查询的两个集合字段要互相对应,即数量和数据类型要相互对应。SET操作符有UNION、UNION ALL、INTERSECT、MINUS。查询出来的结果默认排序顺序是升序排序,可以用ORDER BY改变排序方式,而且ORDER BY语句只能出现在最后。
NUMONE表与NUMTWO表:
一、UNION(并集、去重复)
UNION 操作符返回两个查询结果集的并集,对于两个结果集重复的部分会去除。
由上面的全表查询可以知道NUMONE表中有五条数据,NUMTWO表中有六条数据,这两个表经过UNION操作符求并集然后去重复之后返回的结果是9条,也就是说这两个表中存在两条相同的数据(1,2和1,4)。
二、UNION ALL(并集、不去重)
UNION ALL 操作符返回两个查询结果集的并集,对于两个结果集重复的部分不会去除。
UNION ALL 操作符返回的是两个表的并集且不会去除重复的数据,所以返回的数据中是含有重复数据的。条数为NUMONE表中的5条数据加上NUMTWO表中的6条数据,即11条数据。
三、INTERSECT(交集)
INTERSECT 操作符返回两个查询结果集的交集。
INTERSECT 操作符返回的是两个查询结果集的交集,也就是返回这两个查询结果中重复的数据,这两条数据与UNION操作符去除掉的数据是一样的,因为UNION操作符去除的就是重复数据。
四、MINUS(差集)
MINUS操作符返回两个查询结果集的差集。
MINUS操作符返回在第一个集合中存在且在第二个集合中不存在的数据,所以返回的结果是第一个查询结果集减去两个查询结果集中重复的数据。
五、多个SET操作符
SET操作符中并不仅限于只能用一个操作符来对结果集进行处理,可以同时使用多个相同的操作符或者不同的操作符
左图用两个INTERSECT来对这三个查询结果集求交集,右图用MINUS和INTERSECT来对这三个查询结果集求差集之后再求交集。这两种写法都是可行无误的,至于具体要用哪种来操作查询结果集就要根据查询所需要的结果来使用。
六、ORDER BY(排序)
在SET操作符中有个需要注意的地方是排序,在不写ORDER BY子句的情况下,系统的默认排序方式是结果集的第一列的升序排序。如果要改变排序方式就要加上ORDER BY子句,ORDER BY子句只能在语句的最后出现。
这里ORDER BY子句后面的2是根据结果集的第几列来进行排序,2就是第二列,不写排序方式默认的是升序排序。