17 SQL语言——子查询与关键字in
子查询
单行子查询
--使用时机:筛选条件并不明确需要执行一次查询,并且查询结果只有一个字段并只有一个值
--注意:where子句中允许出现查询语句,该查询语句称为子查询
--例1:查询所有比雇员‘CLARK’工资高的员工信息。
--普通两步:
select sal from emp where ename='CLARK';--得到2450
select* from emp where sal>2450;
--使用子查询:
select * from emp where sal>(select sal from emp where ename='CLARK');
--例2:查询工资高于平均工资的员工的名字和工资
select ename,sal from emp where sal>(select avg(sal) from emp);
--例3:查询和scott属于同一部门且工资比他低的员工资料
select * from emp where sal<(select sal from emp where ename='SCOTT');
--例4:查询工资最高的员工资料
select * from emp where sal=(select max(sal) from emp);
--例5:查询职务和scott相同,雇佣时间早的员工信息
select * from emp where hiredate<(select hiredate from emp where ename='SCOTT');
--例6:查询工资比scott高或者雇佣时间早的员工编号和姓名
select *
from emp
where hiredate<(select hiredate from emp where ename='SCOTT')
or (sal>(select sal from emp where ename='SCOTT'));
;
多行子查询
--any任意一个
--all所有
--例7:查询工资高于 任何一个 CLERK的所有员工的员工信息
--单行子查询方式:
- select * from emp where sal>(select min(sal) from emp where job='CLERK') order by empno;
--多行子查询方式:
- select * from emp where sal> any(select sal from emp where job='CLERK')order by empno;
--例8:查询工资高于 所有 SALESMAN的员工信息
--单行子查询方式
- select * from emp where sal>(select max(sal) from emp where job='SALESMAN') order by empno;
--多行子查询方式
- select * from emp where sal >all(select sal from emp where job='SALESMAN') order by empno;
in关键字
in相当于 =any
例如 select * from emp where deptno in(10,20);