`

转-oracle 子查询

阅读更多

1 关联子查询与非关联子查询

 关联子查询需要在内部引用外部表,而非关联子查询不要引用外部表。对于父查询中处理的记录来说,一个关联子查询是每行计算一次,然而一个非关联子查询只会执行一次,而且结果集被保存在内存中(如果结果集比较小),或者放在一张oracle临时数据段中(如果结果集比较大)。一个“标量”子查询十一哥非关联子查询,返回唯一记录。如果子查询仅仅返回一个记录,那么oracle优化器会将结果缩减为一个常量,而且这个子查询只会执行一次。

2.如何选择?

  根据外部查询,以及子查询本身所返回的记录的数目。如果两种查询返回的结果是相同的,哪一个效率更好?

  关联子查询的系统开销:对于返回到外层查询的记录来说,子查询回每次执行一次。因此,必须保证任何可能的时候子查询都要使用索引。

  非关联子查询的系统开销:子查询只会执行一次,而且结果集通常是排好序的,并保存在临时数据段中,其中每一个记录在返回时都会被父级查询引用,在子查询返回大量记录的情况下,将这些结果集排序回增大系统的开销。

  所以:如果父查询只返回较少的记录,那么再次执行子查询的开销不会非常大,如果返回很多数据行,那么直查询就会执行很多次。 如果子查询返回较少的记录,那么为内存中保存父查询的结果集的系统开销不会非常大,如果子查询返回多行,那么需要将结果放在临时段上,然后对数据段排序,以便为负查询中的每个记录服务。

 

3结论:1)在使用一个关联子查询是,使用in 或者 exists子句的子查询执行计划通常都相同

       2)exists子句通常不适于子查询

       3)在外部查询返回相对较少记录时,关联子查询比非关联子查询执行得要更快。

       4)如果子查询中只有少量的记录,则非关联子查询会比关联子查询执行得更快。

4 子查询转化:子查询可以转化为标准连接操作

       1)使用in的非关联子查询(子查询唯一)

          条件:1)在整个层次结构中最底层数据表上定义唯一主键的数据列存在于子查询的select列表中

                2)至少有个定义了唯一主键的数据列在select列表中,而且定义唯一主键的其他数据列都必须有指定的相等标准,不管是直接指定,还是间接指定。

       2)使用exists子句的关联子查询

          条件:对于相关条件来说,该子查询只能返回一个记录。

 

5。not in和not exists调整

  1)not in 非关联子查询:转化为in写法下的minus子句

  2)not exists关联子查询:这种类型的反连接操作会为外部查询中每一个记录进行内部查询,除了不满足子查询中where条件的内部数据表以外,他会过滤掉所有记录。

    可以重写:在一个等值连接中指定外部链接条件,然后添加select distinct

    eg:select distinct ... from a,b where a.col1 = b.col1(+) and b.col1 is null

6。在子查询中使用all any

 

 

分享到:
评论

相关推荐

    DBD-Oracle-1.75_2.tar.gz

    DBD-Oracle作为DBI的子模块,负责与Oracle数据库进行通信。它实现了DBI接口,让Perl程序能够通过标准的方式来访问Oracle数据库。DBD-Oracle支持Oracle数据库的各种特性,包括复杂查询、存储过程、事务处理、游标、...

    Oracle数据库应用教程--子查询与高级查询.pptx

    Oracle数据库应用教程--子查询与高级查询 Oracle数据库应用教程--子查询与高级查询是指在Oracle数据库应用中使用子查询和高级查询来实现复杂的数据查询和处理。子查询是一种嵌套的SELECT语句,可以在WHERE、HAVING...

    Oracle数据库-- 高级子查询chinese

    通过本章学习,您将可以: ...子查询对空值的处理 在 FROM 子句中使用子查询 在SQL中使用单列子查询 相关子查询 书写相关子查询 使用子查询更新和删除数据 使用 EXISTS 和 NOT EXISTS 操作符 使用 WITH 子句

    oracle笔记子查询

    oracle笔记子查询,有子查询相关的知识点笔记和具体的案例代码!

    oracle-----oracle多表查询

    本篇将深入探讨Oracle中的多表查询技术,包括基本概念、联接类型、子查询以及高级查询技巧。 一、基本概念 1. 表关系:在数据库设计中,表与表之间可能存在一对一、一对多、多对多的关系。这些关系决定了我们需要...

    ORACLE子查询

    ORACLE子查询

    Oracle 子查询

    Oracle子查询是构建复杂查询的基石,通过合理利用单行或多行子查询,结合`IN`、`ANY`、`SOME`、`ALL`、`EXISTS`等关键字,可以极大地提高查询的灵活性和效率。理解并熟练掌握子查询的使用,对于提升数据库操作技能和...

    compat-oracle-rhel4-1.0-5.i386

    9. **性能调优**:根据实际的硬件配置和应用需求,进行性能调优,包括内存分配、I/O子系统优化、SQL查询优化等。 10. **备份与维护**:定期进行数据库备份,确保数据的安全。同时,需要监控数据库的运行状态,及时...

    oracle子查询相关帮助

    在Oracle中,子查询是一个非常关键的概念,尤其对于初学者来说,理解和掌握子查询是提升SQL技能的基础。子查询,也称为嵌套查询,是在一个SQL语句中嵌入另一个查询,用于获取数据或对主查询进行条件判断。 1. **子...

    oracle中的子查询

    ### Oracle中的子查询详解 #### 一、子查询概述与应用场景 子查询是SQL语言中一项非常重要的功能,它允许我们在一个查询语句中嵌入另一个查询语句,以此来解决复杂的查询问题。子查询可以极大地提高SQL语言的灵活...

    oracle讲义:子查询

    在学习Oracle子查询时,学员需要通过实践来熟悉不同场景下子查询的使用方法,掌握其返回的数据类型,以及如何在WHERE、HAVING、FROM子句中嵌入子查询,解决实际问题。同时,理解子查询返回空值对主查询的影响,以及...

    ERP-oracle-ebs-帐户余额查询和追索.doc

    这种查询能力使得ERP-oracle-ebs能够支持复杂的企业财务管理,提供全面的财务报告和分析,帮助财务人员做出数据驱动的决策。通过深入理解和熟练运用这些功能,企业能够有效地监控财务状态,确保财务数据的准确性和...

    10-Oracle数据库(学习4天).txt

    - **复杂查询**:通过连接(JOIN)、子查询(SUBQUERY)等方式进行复杂的SQL查询操作,提高查询效率和灵活性。 - **PL/SQL编程**:介绍Oracle特有的过程化SQL语言——PL/SQL,学习如何编写存储过程、函数和触发器等...

    oracle子查询PPT课件.ppt

    Oracle子查询知识点总结 Oracle子查询是指在SQL语句中嵌套使用SELECT语句,以解决复杂的查询问题。下面是Oracle子查询的知识点总结: 一、子查询的定义和类型 * 子查询是一个完整的SELECT语句,嵌套在另一个...

    Oracle Press - Oracle Database 11g SQL

    6. **子查询**:讲解如何使用子查询来嵌套SQL语句,实现更复杂的查询逻辑。 7. **分组与聚合函数**:介绍GROUP BY、HAVING和聚合函数(如COUNT、SUM、AVG、MAX、MIN)的应用,用于统计和分析数据。 8. **窗口函数*...

    51CTO下载-ORACLE课

    2. **SQL语言**:Oracle基于结构化查询语言(SQL)进行操作,学习Oracle必须掌握SQL的基本语法,如查询、插入、更新和删除数据,以及更复杂的联接、子查询和聚合函数。 3. **PL/SQL**:Oracle特有的编程语言,结合...

    25.Oracle子查询1

    Oracle子查询是数据库查询中的一个重要概念,它是指在SQL语句中嵌套另一个查询语句,用于获取数据或满足特定条件。子查询可以被用在SELECT、INSERT、UPDATE和DELETE命令中,甚至可以在一个子查询内部再嵌套其他子...

Global site tag (gtag.js) - Google Analytics