4.7 数据库:单行子查询和多行子查询

以查询的结果及记录的数量来划分子查询,按照结果集里边记录的数量去划分子查询,可以分为单行子查询和多行子查询。

1. 单行子查询和多行子查询

顾名思义的单行子查询,就是返回一行记录,多行子查询就是返回多行记录。

单行子查询比较简单,能出现在select子句,from子句和where子句里边。但是多行子查询只能出现在where子句和from子句里边。当一个子查询返回多行记录的时候,如果在from子句里边的那是绝对没有问题的。因为结果集可以当做一张临时表来跟其他的数据表做连接。所以子查询的结果有多少条,记录是无所谓的,反正也是当做临时表来处理。如果多行记录出现在where子句里边,我们可以用特殊的表达式符号来做判断。

因为select子句的其他字段的一条记录没法跟子查询的多条记录做合并。所以说select子句里边绝对不可以出现多行字查询。

问题1:如何用子查询查找FORD和MARTIN两个人的同事?

select
ename
from t_emp
where deptno in (select deptno from t_emp where ename in ("FORD","MARTIN")) 

and ename not in ("FORD","MARTIN")

in:就是等于这个结果集里边任何一个值

2.WHERE 子句中多行子查询

问题2:查询比 FORD 和MARTIN 底薪都高的员工信息

select
ename
from t_emp
where sal >= all
(select sal from t_emp where ename in("FORD","MARTIN")) and ename not in("FORD","MARTIN");

all:结果集中所有的

any:结果集中的任意一个

exists:把原来在子查询之外的条件判断写到子查询里面

原来在where子句里边,我们用条件与子查询的结果做判断,现在这个条件改到了exist关键字对应的那个子查询里边了

问题3:查询工资等级是 3级或者 4级的员工信息

select
ename,sal
from t_emp
where exists
(select ename from t_salgrade where sal between losal and hisal and grade in(3,4))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值