##集合运算
集合运算:是用来把两个或多个查询的结果集做并、交、差的集合运算,包含集合运算的查询称为复合查询。
所有的集合运算符与等号的优先级相同,如果 SQL 语句包含多个集合运算符并且没有圆括号明确地指定另一个顺序,Oracle 服务器将以从左到右的顺序计算。
注:INTERSECT (相交) 和 MINUS (相减) 运算不是 ANSI SQL-99 兼容的,他们是 Oracle 特定的。
#联合运算
UNION (联合)运算
UNION 运算返回所有由任一查询选择的行。用UNION 运算从多表返回所有行,但除去任何重复的行。
原则
-
-
-
- 多个被联合的查询语句所选择的列数和列的数据类型必须一致,列的名字不必相同。
- 如果多个查询结果都有NULL值,整个结果中只包含一个NULL值
- IN 运算有比 UNION 运算高的优先级。
- 在默认情况下,按照第一列的升序排序。
- 每个查询不能包含自己的Order by语句,只能在联合之后使用Order by 。
-
-
#完全联合运算
完全联合 (UNION ALL) 运算 原则 和联合不同,重复的行不被过滤,并且默认情况下输出不排序。 如果每个查询结果中都有NULL值,也不被去掉。
注意:使用UNION ALL会比UNION的速度快,因为省去了去掉重复记录的时间。
#相交运算
相交运算 用相交运算返回多个查询中所有的公共行。
原则
-
-
-
-
- 在查询中被 SELECT 语句选择的列数和数据类型必须与其他查询中所使用的所有的 SELTCT 语句中的一样,但列的名字不必一样。
- 相交不忽略空值。
-
-
-
#相减运算
相减运算 用相减运算返回由第一个查询返回的行,那些行不出现在第二个查询中 (第一个 SELECT 语句减第二个 SELECT 语句)。
原则
-
-
-
- 在查询中被 SELECT 语句选择的列数和数据类型必须与在其他查询中所使用的所有的 SELTCT 语句中的一样,但列的名字不必一样。
- 相减运算不忽略空值
-
-
##Oracle 服务器和集合运算
-
-
- 在两个 SELECT 列表中的表达式必须在数目上和数据类型上相匹配
- 可以用圆括号改变执行的顺序
- ORDER BY 子句: 只能出现在语句的最后 从第一个 SELECT 语句接收列名、别名,或者位置记号
-
##本章重点总结
在本课中, 您应该已经学会如何:
-
- 用联合 (UNION) 返回所有不重复的行 用全联合 (UNION ALL) 返回所有行,包括重复行
- 用相交 (INTERSECT) 返回被两个查询共享的所有行
- 用相减 (MINUS) 返回由第一个查询选择但不被第二个查询选择的所有不重复的行
- ORDER BY 只能用在语句的最后