- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ORACLEd的一些技巧
ORACLE 集合运算
■■集合运算(UNION、UNION ALL、INTERSECT、MINUS)
集合运算组合两个或多个部分查询的结果到一个结果中。包含集合运算的查询称为复合查询。
Operator Returns
UNION(联合) 由每个查询选择的所有不同的行(无重复值)
UNION ALL 由每个查询选择的所有的行,包括所有重复的行
INTERSECT(交叉) 由两个查询选择的所有不同的行
MINUS 由第一个查询选择的所有不同的行
所有的集合运算与等号的优先级相同,如果SQL语句包含多个集合运算并且没有圆括号明确地指定另一个顺序,Oracle服务器将以从左到右的顺序计算。你应该使用圆括号来明确地指定带另外的集合运算INTERSECT (相交) 运算查询中的赋值顺序。
INTERSECT (相交) 和MINUS (相减) 运算不是ANSI SQL-99兼容的,他们是Oracle特定的。
■联合(UNION)
UNION(联合)运算
UNION运算返回所有由任一查询选择的行。用UNION运算从多表返回所有行,但除去任何重复的行。
?原则
:: 被选择的列数和列的数据类型必须是与所有用在查询中的SELECT语句一致。列的名字不必相同。
:: 联合运算在所有被选择的列上进行。
:: 在做重复检查的时候不忽略空(NULL)值。
:: IN运算有比UNION运算高的优先级。
:: 在默认情况下,输出以SELECT子句的第一列的升序排序。
■全联合(UNION ALL)
运算从两个查询返回包括所有重复值的结果
原则
:: 和联合不同,重复的行不被过滤,并且默认情况下输出不排序。
:: 不能使用DISTINCT关键字。
注:除了上面的两点,UNION ALL的原则与UNION相同。
■相交(INTERSECT)
用相交运算返回多个查询中所有的公共行。
原则
:: 在查询中被 SELECT 语句选择的列数和数据类型必须与在查询中所使用的所有的 SELTCT 语句中的 一样,但列的名字不必一样。
:: 颠倒相交的表的排序不改变结果。
:: 相交不忽略空值。
■相减(MINUS)
用相减运算返回由第一个查询返回的行,那些行不出现在第二个查询中 (第一个SELECT语句减第二个SELECT语句)。
原则
:: 在查询中被SELECT语句选择的列数和数据类型必须与在查询中所使用的所有的SELTCT语句中的一样,但列的名字不必一样。
:: 对于MINUS运算,在WHERE子句中所有的列都必须在SELECT子句中。
■
※集合运算的原则
:: 在两个SELECT列表中的表达式必须在数目上和数据类型上相匹配
:: 可以用圆括号改变执行的顺序
:: ORDER BY子句:
–只能出现在语句的最后
–从第一个SELECT语句接收列名、别名,或者位置记号
:: 集合运算可以用在子查询中。
■Oracle 服务器和集合运算
:: 除了UNION ALL,重复行自动被清除
:: 在结果中的列名是第一个查询中出现的列名
:: 除了UNION ALL(无排序),默认情况下按升序顺序输出
在一个复合查询的各查询组成部分的选择列表中相应的表达式必须在数目和类型上匹配。如果查询的组成部分选择字符数据,返回值的数据类型被如下决定:
:: 如果查询选择的数据类型的值为CHAR,那么,返回值的数据类型也为CHAR。
:: 如果查询选择的两者之一或两者的数据类型值为VARCHAR2,那么,返回值的数据类型也是VARCHAR2。
你可能需要提及,输出以第一个SELECT子句的第一列的升序被排序,然后是第二列,等等。
■匹配SELECT语句 //凑数
eg:
SELECT department_id, TO_NUMBER(null) location, hire_date
FROM employees
UNION
SELECT department_id, location_id, TO_DATE(null)
FROM departments;
DEPARTMENT_ID LOCATION HIRE_DATE
80 21-4月 -00
90 1700
90 17-6月 -87
90 21-9月 -89
90 13-1月 -93
100 1700
100 16-8月 -94
100 17-8月 -94
100 28-9月 -97
100 30-9月 -97
100 07-3月 -98
匹配SELECT语句
由于在两个查询的SELECT列表中的表达式必须在数量上匹配,你可以使用虚拟列和转换函数数据类型来满足该规则。在幻灯片中使用了虚拟列,在第一个查询中的TO_NUMBER函数被用以匹配第二个查询中返回的LOCATION_ID列的数字数据类型,同样地,第二个查询中的T
文档评论(0)