嵌套子查询--基于Orace scott用户

SQL提供嵌套子查询,子查询是嵌套在另一个查询中的select-from-where 表达式。

集合成员资格

连接词 in 测试元组是否是集合中的成员,not in 相反

查询部门号为10和20的员工信息:

select *
from emp
where deptno in (10, 20);

where子句中的子查询

子查询在where子句中,通常对于集合的成员资格、集合的比较以及集合的基数进行检查。

1.集合成员资格

单行单列子查询
查询部门名字为SALES的员工信息:
//因为部门名字为SALES的部门只有一个,所以可以使用 = ,当然也可以使用 in

select ename
from emp
where deptno in (
  select deptno 
  from dept
  where dname = 'SALES');

多行单列自查询
查询每个部门中最低工资的员工信息:

select deptno, ename, sal
from emp
where sal in(
  select min(sal)
  from emp
  group by deptno);

多列子查询
查询和30号部门中的某一位员工的薪金和奖金相同的员工信息:

select *
from emp
where (sal, nvl(comm, 0)) in (
  select sal, nvl(comm, 0)
  from emp
  where deptno = 30);

nvl(comm, 0) 如果comm为空,返回0

2.集合的比较

some和any :至少比一个大

查询工资大于任意一个部门平均工资的员工信息:

select *
from emp
where sal > some(
  select avg(sal)
  from emp
  group by deptno);

all:大于所有
查询工资大于所有部门平均工资的员工信息:

select *
from emp
where sal > all(
  select avg(sal)
  from emp
  group by deptno);

3.空关系测试

exists 结构在作为参数的子查询中返回true值
该查询语句中,外层select返回的每一行数据都要根据子查询来评估。

查询在’NEW YORK’工作的员工信息:

select *
from emp e
where exists(
  select * 
  from dept d
  where e.deptno = d.deptno and d.loc = 'NEW YORK');

//上述查询还说明了sql的一个特性,来自外层查询的一个相关名称可以用在where子句的子查询中。这种子查询被称为相关子查询

查询不在’NEW YORK’工作的员工信息:

select *
from emp e
where not exists(
  select * 
  from dept d
  where e.deptno = d.deptno and d.loc = 'NEW YORK');

from子句中的子查询

sql允许在from中使用子查询表达式,采用的主要观点支撑是:select-from-where返回的都是关系

查询部门的工资总和最高的工资:

select max(sum_sal)
from (
  select sum(sal) as sum_sal
  from emp
  group by deptno) ;

查询公司中工资最高的前三个员工的信息:

select ename,sal
from (
  select ename,sal 
  from emp
  order by sal desc)
where rownum <= 3;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值