Oracle!你必需要知道的Knowledge points(下)

子查询

什么是子查询

Oracle!你必需要知道的Knowledge points(下)
当查询中的限制条件须要另外一个查询提供时,咱们能够把两个查询语句嵌套起来,提供条件的查询语句做为子查询。
子查询,也叫内部查询,先于主查询执行,子查询的结果被用于主查询。
子查询分为单行子查询、多行子查询和多列子查询,单行子查询做为判断条件时用单行运算符,多行子查询和多列子查询做为判断条件时用多行运算符。
单行运算符:>、=、>=、<、<>、<=
多行运算符:in、all、anyide

子查询能够嵌套在哪里

Where子句:做为非分组函数筛选判断的条件
From子句:将子查询的查询结果做为一张表来使用
Having子句:做为分组函数筛选判断的条件函数

子查询使用规范

子查询须要用括号括起来
当子查询放在from子句中时,是将查询到的结果做为一张表来使用,需给别名
单行子查询用单行运算符,多行子查询用多行运算符
子查询放在运算符右边code

单行子查询

单行子查询返回一行一列,使用单行运算符进行链接blog

--显示和雇员7369从事相同工做而且工资大于雇员7876的雇员的姓名和工做。
select ename,job
from emp 
where job = (select job from emp where empno =7369)
and sal > (select sal from emp where empno = 7876);

--查询工资最低的员工姓名,岗位及工资(子查询中使用了分组函数)
select ename,job,sal
from emp
where sal = (select min(sal) from emp)

--查询部门最低工资比20部门最低工资高的部门编号及最低工资(子查询嵌套在having子句)
select  deptno,min(sal)
from  emp
group by deptno
having min(sal) > (select min(sal) from emp where deptno = 20 );

多行子查询

多行子查询返回一行或多行记录,使用多行运算符进行链接it

--查询是经理的员工姓名、工资
select ename,sal
from emp
where empno in (select mgr from emp)

ANY的使用

表示和子查询的任意一行结果进行比较,有一个知足条件便可。class

any:大于子查询结果的任意一个,即大于最小值便可。
<any:小于子查询结果的任意一个,即小于最大值便可。
=any:等于子查询结果的任意一个,即等一任意一个便可,至关于in。
Oracle!你必需要知道的Knowledge points(下)select

--查询部门编号不为10,且工资比10部门任意一名员工工资高的员工编号,姓名,职位,工资。
select empno,ename,job,sal
from emp
where deptno <> 10 and sal > any(select sal from emp where deptno = 10);

ALL的使用

表示和子查询的全部行结果进行比较,每一行必须都知足条件。im

<all:表示小于子查询结果集中的全部行,即小于最小值
>all:表示大于子查询结果集中的全部行,即大于最大值。
= all :表示等于子查询结果集中的全部行,即等于全部值。

Oracle!你必需要知道的Knowledge points(下)

--查询部门编号不为10,且工资比10部门全部员工工资低的员工编号,姓名,职位,工资。
select empno,ename,job,sal
from emp
where deptno <> 10 and sal > all(select sal from emp where deptno = 10);

持续更新中

相关文章
相关标签/搜索