`

Oracle子查询的用法

阅读更多

子查询的用法

        在执行数据库操作(包括查询、添加、修改、删除等操作)的过程中,如果某个操作需要依赖另一个SELECT语句的查询结果,那么就可以把SELECT语句嵌入到该操作语句中,这样就形成了一个子查询。实际上,在关系型数据库中,各表之间的数据关系非常密切,它们相互关联,相互依存,这样就可以根据数据之间的关系使用相应的子查询,从而实现复杂的查询。

 

1. 子查询

        子查询是在SQL语句内的另外一条SELECT语句,也被称为内查询或是内SELECT语句。在SELECT、INSERT、UPDATE或DELETE命令中允许是一个表达式的地方都可以包含子查询,子查询甚至可以包含在另外一个子查询中。

 

例,在emp表中查询部门名称(dname)为“RESEARCH”的员工信息:



 
查询也可以使用多表关联查询实现(多表关联效率高于子查询):



 
        在执行子查询操作的语句中,子查询也称为内查询,包含子查询的查询语句也被称为外查询或主查询。子查询:select deptno from dept where dname=‘RESEARCH’;那么外查询语句就是:select empno,ename,job from emp

 

        在一般情况下,外查询语句检索一行,子查询语句需要检索一遍数据,然后判断外查询语句的条件是否满足。如果条件满足,则外查询语句将检索到的数据行添加到结果集中,如果条件不满足,外查询语句继续检索下一行数据,所以子查询相对多表关联查询要慢一些。


        另外,在使用子查询时,还应注意以下规则:子查询必须使用括号“()”括起来;子查询中不能包含ORDER BY子句。;子查询允许嵌套多层,但不能超过255层。在Oracle 11g中,通常把子查询再细化为单行子查询,多行子查询和关联子查询3种。

 

2. 单行子查询

        单行子查询是指返回一行数据的子查询语句,当在WHERE子句中引用单行子查询时,可以使用单行比较运算符(=、>、<、>=、<=和<>)。


例,在emp表中,查出既不是最高工资,也不是最低工资的员工的信息:
 

 

        在上面的语句中,如果内层子查询语句的执行结果为空值,那么外层的WHERE子句就始终不会满足条件,这样该查询的结果就必须为空值,因为空值无法参与比较运算。


        在执行单行子查询时,要注意查询的返回结果必须是一行数据,否则Oracle系统会提示无法执行。另外,子查询也不能包含ORDER BY子句,如果非要对数据进行排序的话,那么只能在外查询语句中使用ORDER BY子句。

 

3. 多行子查询

        多行子查询是指返回多行数据的子查询语句。当在WHERE子句中使用多行子查询时,必须使用多行运算符(IN、ANY、ALL)。

 

使用IN运算符:当在多行子查询中使用IN运算符时,外查询会尝试与子查询结果中的任何一个结果进行匹配,只要有一个匹配成功,则外查询返回当前检索的记录。例,在emp表中,查询不是销售部门(SALES)的员工信息:



 

使用ANY运算符:ANY运算符必须与单行比较运算符结合使用,并且返回行只要匹配子查询的任何一个结果即可。例,在emp表中,查询工资大于部门编号为10的任意一个员工工资即可的其他部门的员工信息:



 
使用ALL运算符:ALL运算符必须与单行运算符结合使用,并且返回行必须匹配所有子查询结果。例,在emp表中,查询工资大于部门编号为30的所有员工工资的员工信息:



 

4. 关联子查询

        在单行子查询和多行子查询中,内查询和外查询是分开执行的,也就是说内查询的执行与外查询的执行是没有关系的,外查询仅仅是使用内查询的最终结果。在一些特殊需求的子查询中,内查询的执行需要借助于外查询,而外查询的执行又离不开内查询的执行,这时,内查询和外查询是相互关联的,这种子查询就被称为关联子查询。


在emp表中,使用“关联子查询”检索工资大于同职位的平均工资的员工信息:



 
        在上面的查询语句中,内层查询使用关联子查询计算每个职位的平均工资。而关联子查询必须知道职位的名称,为此外层查询就要使用f.job字段值为内层查询提供职位名称,以便于计算出某个职位的平均工资。如果外层查询正在检索的数据行的工资高于平均工资,则该行的员工信息会显示出来,否则不显示。
注意,在执行关联子查询的过程中,必须遍历数据表中的每条记录,因此如果被遍历的数据表中有大量数据记录,则关联子查询的执行速度会比较慢。关联子查询不但可以作为SELECT语句的子语句,也可以作为INSERT、UPDATE和DELETE语句的关联子查询。

  • 大小: 5.5 KB
  • 大小: 7.3 KB
  • 大小: 8.7 KB
  • 大小: 7.2 KB
  • 大小: 6.8 KB
  • 大小: 5.1 KB
  • 大小: 5.9 KB
分享到:
评论

相关推荐

    oracle基本查询操作子查询用法实例分析

    本文实例讲述了oracle基本查询操作子查询用法。分享给大家供大家参考,具体如下: 一、子查询语法 SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table); 子查询在主查询之前一次...

    oracle中的子查询

    oracle中的子查询使用场合,种类,使用方法,错误排除

    oracle子查询相关帮助

    - 练习编写不同类型的子查询,熟悉其语法和用法。 - 解决实际问题,如找出销售额超过平均销售额的员工,或者找出没有订单的客户。 8. **学习资源**: - 子查询的PPT文件"subquery.ppt"可能包含详细的讲解、示例...

    SQLServer与ORACLE数据库实现子查询方法比较.docx

    “SQL Server 与 Oracle 数据库实现子查询方法比较” 数据库查询都是通过 SELECT 语句来完成的,子查询就是在一个 SELECT 语句中嵌套另一个 SELECT 语句,通过子查询的嵌套可以实现复杂的数据查询功能。在 SQL ...

    基于成本的ORACLE子查询性能研究.pdf

    【基于成本的ORACLE子查询性能研究】 Oracle数据库在处理SQL查询时,特别是涉及子查询时,会基于一种称为“成本”的评估标准来选择最佳执行计划。本文将深入探讨Oracle中的几种子查询类型,以及如何优化子查询以...

    Oracle性能查询包使用

    4. **子查询优化**:子查询可能会导致多次表访问,考虑使用连接(JOIN)或连接重写来替换子查询。 三、性能监控与调优工具 1. **V$视图**:Oracle提供了一系列V$视图,如V$SESSION, V$SQL, V$BUFFER_CACHE等,用于...

    oracle分页查询

    常用的 Oracle 分页查询方法有三种:使用 ROWNUM、使用 ROW_NUMBER() 和使用子查询。 第一种方法:使用 ROWNUM Oracle 的 ROWNUM 函数可以用来实现分页查询。基本格式如下: ```sql SELECT * FROM (SELECT A.*,...

    Oracle提高查询效率的方法

    3. 查询时尽量不要返回不需要的行、列:在多表连接查询时,尽量改成连接查询,少用子查询。 4. 尽量少用视图:视图的效率低,特别的是不要用视图嵌套,嵌套视图增加了寻找原始资料的难度。 5. 创建合理的索引:...

    oracle讲义:子查询

    oracle学习,内容为子查询的基本概念,以及子查询常见的用法等

    如何解决Oracle分页查询中排序与效率问题

    方法一:使用子查询 可以使用子查询来解决排序问题。首先,执行一个子查询来获取所有记录,然后在外层查询中进行分页处理。例如: SELECT * FROM ( SELECT ROWNUM rn, t.id ID, o.name YYB, u.name XM, t.MC ...

    ORACLE多表查询优化

    开发者可以使用其他查询方式,例如使用子查询或 EXISTS 语句来替代多表连接查询。 6. 优化数据统计 数据统计是数据库性能的关键。开发者可以使用不同的统计方法,例如使用索引、分区表、物化视图等来提高数据统计...

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

    子查询是一种在主要查询(外部查询)内部嵌套另一个查询(内部查询或子查询)的方法,用于提供外部查询所需的数据或条件。子查询可以出现在SELECT、UPDATE或DELETE语句中,并在WHERE或HAVING子句中使用。 1. **子...

    oracle树结构查询方法

    Oracle 数据库管理系统是一个广泛使用的、基于关系模型的数据库系统,它通过表格的形式存储数据。...在进行树结构查询时,理解这些语句的工作原理和用法是至关重要的,这有助于优化查询性能,提高数据处理的效率。

    Oracle树查询实例分析

    使用带有`EXISTS`子查询的方法可以找出与特定节点具有相同`sjflid`但`ID`不同的其他节点,这些就是兄弟节点。此查询方法避免了直接连接操作,但可能不是最优解,具体效率取决于数据量和索引。 除了这些基本操作,...

    oracle经典查询练手

    1. **子查询**:在Oracle中,子查询可以嵌套在SELECT、FROM、WHERE、HAVING子句中,用来检索满足特定条件的数据。例如,你可以用子查询来找出销售额超过平均销售额的产品。 2. **连接查询**:连接查询用于合并两个...

    Oracle的Rollup用法

    Oracle 的 Rollup 用法是指在 SQL 语句中使用 ROLLUP 子句来对数据进行聚合和分组。ROLLUP 子句可以将查询结果按照一个或多个字段进行分组,并且可以生成子总计和总计。 在 Oracle 中,ROLLUP 子句可以与 GROUP BY ...

    oracle查询优化

    15. **优化子查询**:子查询可以通过连接或在FROM子句中重写为JOIN操作来优化,减少嵌套层次。 通过这些优化技巧,可以显著提升Oracle SQL查询的效率,降低系统资源消耗,提高整体数据库性能。在实际应用中,需要...

    Oracle游标使用方法及语法大全

    Oracle 游标使用方法及语法大全 Oracle 游标是 PL/SQL 程序中的一种重要组件,用于处理查询结果集。游标可以分为隐式游标和显式游标两种,隐式游标由 PL/SQL 管理,隐式游标打开时查询开始,查询结束时隐式游标自动...

    基于ORACLE数据库查询优化方法研究.pdf

    优化SQL语句包括编写高效的查询语句,避免全表扫描,减少子查询,以及利用索引等。DBA需要定期审查和重构SQL,以确保它们能够以最有效的方式运行。 综上所述,ORACLE数据库的查询优化是一个多方面的工作,涉及到...

Global site tag (gtag.js) - Google Analytics