日期:2014-05-16  浏览次数:20401 次

Oracle DB 使用集合运算符
? 描述集合运算符
? 使用集合运算符将多个查询组成一个查询
? 控制返回行的顺序

? 集合运算符:类型和准则
? 本课中使用的表
? UNION和UNION ALL运算符
? INTERSECT运算符
? MINUS运算符
? 匹配SELECT语句
? 在集合运算中使用ORDER BY子句

  • 集合运算符
集合运算符用于将两个或更多查询的结果合并成一个结果。包含集合运算符的查询被称为复合查询。
所有集合运算符都具有相同的优先级。如果SQL 语句包含多个集合运算符,在没有使用括号明确地指定其它顺序时,Oracle Server 会从左(上)到右(下)对这些运算符进行计算。在将INTERSECT运算符与其它集合运算符配合使用的查询中,应使用括号明确地指定计算的顺序。

  • 集合运算符准则
? SELECT列表中的表达式在数量上必须匹配。
? 第二个查询中每一列的数据类型必须与第一个查询中对应列的数据类型相匹配。
? 可以使用括号更改执行顺序。
? ORDER BY子句只能出现在语句的末尾。


? 查询的SELECT列表中的表达式在数量和数据类型上必须匹配。在WHERE子句中使用UNION、UNION ALL、INTERSECT和MINUS运算符的查询,其SELECT列表中
的列必须具有相同的数量和数据类型。对于复合查询中包含的各个查询,其SELECT列表中各个列的数据类型可能不完全相同。第二个查询中的列必须与第一个查询中的
对应列属于相同的数据类型组(如数字或字符)。
? 可在子查询中使用集合运算符。
? 在将INTERSECT运算符与其它集合运算符配合使用的查询中,应使用括号指定计算的顺序。这可确保符合新出台的SQL 标准,从而为INTERSECT运算符赋予比
其它集合运算符更高的优先级。

  • Oracle Server 和集合运算符
? 除非使用UNION ALL运算符,否则会自动删除重复行。
? 第一个查询中的列名将显示在结果中。
? 除非使用UNION ALL运算符,否则默认情况下输出按升序进行排序。


如果查询使用了集合运算符,则Oracle Server 会自动删除重复行,除非使用的是UNION ALL运算符。输出中的列名由第一个SELECT语句中列的列表确定。默认情况下,输出按SELECT子句第一列的升序进行排序
对于复合查询包含的各个查询,其SELECT列表中的相应表达式在数量和数据类型上必须是相匹配的。如果这些查询选择了字符数据,则会按如下方式确定返回值的数据类型:
? 如果两个查询选择了数据类型为CHAR且长度相等的值,则返回值的数据类型也为CHAR且长度保持不变。如果两个查询选择了数据类型为CHAR但长度不同的值,
则返回值的数据类型为VARCHAR2,长度为较大的CHAR值。
? 如果其中一个或两个查询选择了数据类型为VARCHAR2的值,则返回值的数据类型也为VARCHAR2。
如果这些查询选择了数字数据,则按数字优先级确定返回值的数据类型。如果所有查询选择了数据类型为NUMBER的值,则返回值的数据类型也为NUMBER。
在使用集合运算符的查询中,Oracle Server 不会执行跨数据类型组的隐式转换。因此,如果这些查询的相应表达式解析为字符数据和数字数据,Oracle Server 则会返回错误。

<