`
DXL_xiaoli
  • 浏览: 71783 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

ORACLE子查询

阅读更多
Oracle子查询
子查询概念 :当一个查询的结果是另一个查询的条件时,称之为子查询。
使用子查询注意事项:
         子查询可以嵌套多层
         子查询需要圆括号()括起来
子查询语法:
SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
       FROM table);
 子查询 (内查询) 在主查询之前一次执行完成。
 子查询的结果被主查询使用 (外查询)。
举例:查询员工的工资大于JONES的员工信息
分析过程如下:
首先:查询JONES的员工工资是多少 :结果2975
SQL>  select sal from emp where ename='JONES';
      SAL
---------
  2975.00

实际上我们要查询的是:薪资大于2975的员工的信息写法如下:
SQL> select * from emp where sal>2975;
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7788 SCOTT      ANALYST    7566 1982/12/9     3000.00               20
7839 KING       PRESIDENT       1981/11/17    5000.00               10
7902 FORD       ANALYST    7566 1981/12/3     3000.00               20

综合以上写出子查询的结果如下:
SQL> select * from emp where sal>(select sal from emp where ename='JONES');

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7788 SCOTT      ANALYST    7566 1982/12/9     3000.00               20
7839 KING       PRESIDENT       1981/11/17    5000.00               10
7902 FORD       ANALYST    7566 1981/12/3     3000.00               20
注意:
 子查询要包含在括号内。
 将子查询放在比较条件的右侧。

根据查询的结果(内部嵌套查询的结果)把子查询的类型分为单行子查询与多行子查询,
   注意:
 单行操作符对应单行子查询,多行操作符对应多行子查询。
单行操作符
>、>=、 <、 <= 、<>、=
举例:
//查询编号7876相同职位的员工信息 并且薪资大于编号为7521的薪资的员工信息
SQL> select * from emp where job=( select job from emp where empno=7876) and sal>( select sal from emp where empno=7521);
//子查询含有组函数
SQL> select * from emp where sal>(select avg(nvl(sal,0)) from emp);
//子查询含有having子句 查询部门的最小工资大于20号部门最小工资的部门号及最小工资数
SQL> select deptno,min(sal) from emp group by deptno having min(sal)>( select min(sal) from emp where deptno=20);

备注:子查询可以返回空行 没要查询到结果是可以的。

多行子查询
 返回多行。
 使用多行比较操作符。
操作符如下图:
操作符 描述
In 等于列表中的任何一个
Any 子查询返回的任意一个值比较 相同还有some
All 和子查询返回的所有值比较 
Exists

//查询薪水小于工作岗位CLERK的任何一个薪资的员工信息 并且不包含工作岗位为CLERK的员工信息
SQL> select * from emp where sal < any (select sal from emp where job='CLERK') and job<>'CLERK';
//all与所有值比较 >all 代表的是大于查询结果的最大值
SQL> select * from emp where sal > all (select sal from emp where job='CLERK') and job<>'CLERK';
//查询岗位与部门编号为10相同的员工信息 不包含自己。
SQL> select * from emp where job in(select job from emp where deptno=10) and deptno<>10;

只做思考?

SQL> select * from emp where exists(select * from dept);

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH      CLERK      7902 1980/12/17     800.00               20
7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30
7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30
7566 JONES      MANAGER    7839 1981/4/2      2975.00               20
7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00   1400.00     30
7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30
7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10
7788 SCOTT      ANALYST    7566 1982/12/9     3000.00               20
7839 KING       PRESIDENT       1981/11/17    5000.00               10
7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30
7876 ADAMS      CLERK      7788 1983/1/12     1100.00               20
7900 JAMES      CLERK      7698 1981/12/3      950.00               30
7902 FORD       ANALYST    7566 1981/12/3     3000.00               20
7934 MILLER     CLERK      7782 1982/1/23     1300.00               10

14 rows selected

SQL> select * from emp where exists(select * from dept where deptno=80);

EMPNO ENAME  JOB        MGR HIREDATE       SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------

0
0
分享到:
评论

相关推荐

    Oracle 子查询

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

    oracle子查询PPT课件.ppt

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

    oracle笔记子查询

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

    25.Oracle子查询1

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

    oracle 子查询

    ### Oracle 子查询详解 #### 一、子查询概述 在Oracle数据库中,子查询(也称为嵌套查询)是一种非常强大的SQL特性,它允许在一条SQL语句中嵌入另一条查询语句。子查询可以用来解决各种复杂的数据检索问题,特别是...

    oracle子查询教程(ppt )

    Oracle子查询是数据库查询语言SQL中的一个重要概念,它在数据处理和分析中起着至关重要的作用。子查询,也称为嵌套查询,是指在另一个查询内部的查询,它作为一个独立的查询被执行,并且其结果被主查询使用。下面...

    Oracle子查询

    根据提供的文件信息,我们可以归纳出以下关于Oracle子查询的关键知识点: ### Oracle子查询概述 子查询是指在SQL语句中的一个查询嵌套在另一个查询之中。这种查询方式可以帮助我们更灵活地处理数据,并且能够实现...

    oracle子查询PPT学习教案.pptx

    Oracle子查询是数据库查询语言中的一个关键概念,它在处理复杂的数据分析和查询时非常有用。子查询,也称为内部查询或嵌套查询,是指在一个更大的查询(外查询)内部执行的独立查询,用于获取主查询所需的数据或者...

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

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

    oracle子查询学习教案.pptx

    oracle子查询学习教案.pptx

    Oracle子查询优化的最佳实践.pptx

    Oracle子查询优化是数据库性能调优的关键环节,尤其是在处理复杂SQL语句时,正确的优化策略能够显著提升系统效率。以下是一些关于Oracle子查询优化的最佳实践: ### SQL优化的核心思想 1. **减少IO次数**:无论是...

    oracle子查询PPT课件.pptx

    oracle子查询PPT课件.pptx

    oracle子查询相关帮助

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

    ORACLE子查询ppt

    子查询的类型 1、单行子查询:不向外部的SQL语句返回结果,或者只返回一行 2、多行子查询:向外部的SQL语句返回一行或者多行 1、多列子查询:向外部的SQL语句返回多列 2、关联子查询:引用外部的SQL语句中的一列...

    oracle讲义:子查询

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

    Oracle初级(子查询).doc

    Oracle子查询的语法结构如下: ```sql SELECT [DISTINCT] * | 列名 1 [别名 1], 列名 2 [别名 2]… FROM 表名, (SELECT [DISTINCT] * | 列名 1 [别名 1], 列名 2 [别名 2]… FROM 表名 [WHERE 条件] [GROUP BY...

    Oracle基础学习之子查询

    Oracle子查询是数据库查询中的一个重要概念,它是在一个SQL语句中嵌套另一个SQL查询,用以提供外部查询所需的条件或值。子查询可以作为WHERE、HAVING、FROM或SELECT子句的一部分,用于处理复杂的查询需求。以下是...

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

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

Global site tag (gtag.js) - Google Analytics