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
----- ---------- --------- ----- ----------- --------- --------- ------
分享到:
相关推荐
Oracle 子查询
oracle笔记子查询,有子查询相关的知识点笔记和具体的案例代码!
oracle子查询学习教案.pptx
oracle表连接和子查询实例 所有的实例查询都包含在里面,不会担心笔试oracle子查询。
简单的介绍oracle子查询语句的使用,
Oracle子查询实例代码演示 详细而具体
oracle子查询PPT课件.ppt
oracle子查询PPT课件.pptx
oracle子查询PPT学习教案.pptx
Oracle子查询优化的最佳实践.pptx
基于成本的ORACLE子查询性能研究.pdf
oracle 数据库的子查询的相关内容,新手可以多看看
一个有关子查询的课件,简单明了,读者可以了解到:描述子查询可以解决的问题类型。 定义子查询。 列出子查询的类型。 写出单行或者多行的子查询。
通过本章学习,您将可以: ...子查询对空值的处理 在 FROM 子句中使用子查询 在SQL中使用单列子查询 相关子查询 书写相关子查询 使用子查询更新和删除数据 使用 EXISTS 和 NOT EXISTS 操作符 使用 WITH 子句
3、超女基本信息表编号(主键)姓名颜值代码(外键)身材代码(外键)身高备注0101西施24170这是一个非常漂亮姑娘,老公是夫差,男朋友是范蠡 4、表之间的关系
复杂相关子查询 动画版
oracle中的子查询使用场合,种类,使用方法,错误排除