`

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

    oracle中的子查询

    #### 三、子查询的使用方法 1. **子查询的基本语法**: ```sql SELECT select_list FROM table WHERE exproperator (SELECT select_list FROM table); ``` 其中 `exproperator` 是比较运算符,它可以是单行...

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

    Oracle数据库中的子查询是SQL查询语句的一种高级形式,它在一个查询中嵌套另一个查询,用于获取或处理数据。子查询可以在SELECT、FROM和WHERE子句中使用,以支持复杂的数据检索需求。以下是对子查询及其相关知识点的...

    oracle表连接和子查询实例

    以上实例展示了Oracle中表连接和子查询的各种应用方法,包括但不限于最大薪资部门员工信息、部门平均薪资等级、非经理员工姓名等。这些知识点对于理解和掌握Oracle数据库中的高级查询技术非常重要,对于数据库开发者...

    oracle子查询相关帮助

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

    oracle讲义:子查询

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

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

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

    oracle 子查询

    ### Oracle 子查询详解 #### 一、子查询概述 在Oracle数据库中,子查询(也称为嵌套查询)是一种非常强大的SQL特性,它允许在一条SQL语句中嵌入...掌握子查询的使用方法对于深入理解和高效利用Oracle数据库至关重要。

    Oracle性能查询包使用

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

    oracle 高级查询

    除了子查询,我们还会学习使用EXISTS和NOT EXISTS运算符。这两个运算符用于检查子查询是否返回任何行。EXISTS返回TRUE如果子查询返回至少一行,而NOT EXISTS返回TRUE如果子查询不返回任何行。这些运算符常用于优化...

    提高Oracle数据库查询效率

    在进行子查询时,使用`EXISTS`代替`IN`往往能获得更好的性能。这是因为`EXISTS`只需要判断子查询是否有结果返回即可,而`IN`则需要返回所有的结果值。例如,假设我们要查询所有属于某个部门的员工,可以使用如下方式...

    Oracle中(column1,column2..)in(集合/子查询)的hibernate实现

    在Oracle数据库中,`IN`操作符是一种常用的查询方式,它允许我们检查某个值是否在一个给定的集合或子查询结果中。例如,如果我们有一个表`employees`,包含`column1`和`column2`列,我们可以用如下SQL查询来找出`...

    Oracle作业查询报告

    本实验报告详细介绍了如何使用Oracle SQL语句进行数据的查询和插入,旨在帮助学生掌握各种查询技巧和方法。 一、实验目标 实验的主要目的是让学生熟练掌握SQL中的查询语句,包括但不限于SELECT语句的使用,以及与之...

    oracle 查询重复数据

    - **子查询**: `(select peopleid from people group by peopleid having count(peopleid) &gt; 1)` 这部分首先从`people`表中选择`peopleid`字段,然后使用`GROUP BY`对`peopleid`进行分组,计算每组的`peopleid`数量...

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

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

    oracle查询优化pdf

    优化查询通常从编写高效的SQL语句开始,包括选择合适的索引、避免全表扫描、减少子查询以及合理使用JOIN操作。在Oracle中,理解执行计划至关重要,因为它是Oracle解析和执行SQL语句的方式。通过使用EXPLAIN PLAN或...

    Oracle基础学习之子查询

    Oracle子查询是数据库查询中的一个重要概念,它是在一个SQL语句中嵌套另一个SQL查询,用以提供外部查询所需的...总之,Oracle子查询是数据库查询中的一个重要工具,熟练掌握它的使用能帮助我们更好地管理和分析数据。

Global site tag (gtag.js) - Google Analytics