当前位置:  数据库>oracle

Oracle 集操作和exists、in的运用场景

    来源: 互联网  发布时间:2017-05-08

    本文导语: 1 集操作 定义:把多个sql的结果集,通过逻辑上的整合运算,拼在一起显示。 集操作缺省下都是按第一个查询的第一列升序排序,当然除了union all: minus:取差集,可用于对两个结果集进行测试 union:取并集,除重 union all:取...

1 集操作

定义:把多个sql的结果集,通过逻辑上的整合运算,拼在一起显示。

集操作缺省下都是按第一个查询的第一列升序排序,当然除了union all:

minus:取差集,可用于对两个结果集进行测试

union:取并集,除重

union all:取并集,不剔重

intersect:取交集

注释:

① union all不排序、不剔重,在效率上比union高。在业务允许下,用union all,则不用union

② 两表作集操作时,字段类型、个数要相同,列的名字可以不必相同;若不一样可补齐,补齐时应注意字段类型,进行显示转换:to_char、to_number、to_date等

③ 多个集操作可通过括号改变sql引擎的执行顺序(缺省sql引擎是自顶向下)

④ union、minus和intersect的共同点:

剔重、排序、不忽略null

⑤ order by只能出现在语句的最后,是对整个集操作结果的排序,列名、别名或者按位置指定,但不能使用第一个select没有出现的列

⑥ 第一个select语句接收列名、别名,或位置记号,查询结果的列名和第一个select语句保持一致

⑦ 可以用于子查询

2 exists、in的运用场景

能不写子查询,尽量不写子查询,而是直接编写多表连接操作。理由如下:

① Oracle CBO在parse阶段,会尽可能把子查询转化为多表连接

② 子查询可读性较低

③ 复杂的逻辑,子查询可能导致oracle CBO选择错误的执行路径

但如果必须写子查询,到底是in还是exists?exists/not exists专门用于关联子查询。10g之后,oracle对in的改进,这两者无甚区别。

in和select的技术原理:

㈠ in:先进行子查询,再进行主查询

㈡ exists:先进行主查询,再到子查询中过滤

in和exists的使用建议:

Ⅰ 如果限制性强的条件在子查询,则使用in

Ⅱ 如果限制性强的条件在主查询,则使用exists

可用查询结果集来理解上面这段话,采用最优化匹配原则:拿最小记录匹配大记录。限制性强,则结果集小;反之,则大。

注释:

① 使用exists可以将子查询结果定位常量,不影响查询结果,而且,效率高。

比如:

  • select e.*  
  •   from emp e  

  •     
     
     

    您可能感兴趣的文章:

     
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • ORACLE日期相关操作
  • Linux下如何用C语言操作Oracle数据库相关的图书推荐
  • Oracle终于涉入支持Linux操作系统了
  • Linux平台下Oracle的操作
  • linux c 怎样利用pro*c/c++操作 win2000 下 oracle 谢谢
  • Window客户端通过ADO是否能够连接和操作Unix平台下的Oracle数据库?
  • Oracle将字符编码从GBK转到UTF8,如何操作比较稳妥?
  • 如何设定linux red hat 9的oracle9,让window的电脑可以操作数据库
  • linux oracle数据库删除操作指南
  • Linux环境中Oracle数据导入与导出备份操作
  • Oracle针对数据库某一行进行操作的时候,如何将这一行加行锁
  • oracle的plsql里有没有位操作的功能
  • fedora core5 (FC5) 下面不能装 Oracle 10g 么? (检查操作系统就通不过啊,晕)
  • Linux操作系统下Oracle数据库多实例启动方式及修改内存
  • 怎样在c语言的代码里内嵌的操作oracle数据库,各位大虾谢谢了
  • 一个关于JAVA操作oracle数据库时UPDATE权限的问题
  • Oracle中操作分页
  • Oracle 数据库操作技巧集
  • secureCRT远程连接服务器操作oracle数据库出现的问题
  • 请教各位:JAVA操作ORACLE的问题 急!!!
  • 学习登录oracle数据库时常用的操作命令
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,