您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Oracle子查询详解

2024/6/16 17:40:20发布47次查看
oracle子查询详解,根据查询的结果(内部嵌套查询的结果)把子查询的类型分为单行子查询与多行子查询,
子查询概念 :当一个查询的结果是另一个查询的条件时,,称之为子查询。
使用子查询注意事项:
         子查询可以嵌套多层
         子查询需要圆括号()括起来
子查询语法:
select     select_list
from       table
where    expr operator
                           (select    select_list
                         from                  table);
l  子查询 (内查询) 在主查询之前一次执行完成。
l  子查询的结果被主查询使用 (外查询)。
举例:查询员工的工资大于jones的员工信息
分析过程如下:
首先:查询jones的员工工资是多少 :结果2975
sql> select sal from emp where ename='jones';
实际上我们要查询的是:薪资大于2975的员工的信息写法如下:
sql> select * from emp where sal>2975;
//综合以上写出子查询的结果如下:
sql> select * from emp where sal>(select sal from emp where ename='jones');
注意:
l  子查询要包含在括号内。
l  将子查询放在比较条件的右侧。
根据查询的结果(内部嵌套查询的结果)把子查询的类型分为单行子查询与多行子查询,
   注意:
l  单行操作符对应单行子查询,多行操作符对应多行子查询。
单行操作符
>、>=、 、=
举例:
//查询编号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);
备注:子查询可以返回空行 没要查询到结果是可以的。
多行子查询
l   返回多行。
l  使用多行比较操作符。
操作符如下图:
操作符
描述
in
等于列表中的任何一个
any
子查询返回的任意一个值比较 相同还有some
all
和子查询返回的所有值比较
exists
//查询薪水小于工作岗位clerk的任何一个薪资的员工信息并且不包含工作岗位为clerk的员工信息
sql> select * from emp where sal '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 deptno10;
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product