子查询的作用:查询条件未知的事物
查询条件已知的问题:例如:查询工资为800的员工信息
查询条件未知的问题:例如:查询工资为20号部门平均工资的员工信息
一个条件未知的问题,可以分解为多个条件已知的问题
查询工资比WARD高的员工信息
第一:查询WARD的工资?
select sal from emp where ename = 'WARD'; 第二:查询工资比1250高的员工信息?
select * from emp where sal > 1250; 子查询:
select *
from emp
where sal > (
select sal
from emp
where ename = 'WARD'
);
查询'SALES'部门的员工信息(方式一:子查询)
第一:查询部门名为'SALES'的编号?
select deptno from dept where dname = 'SALES'; 第二:查询部门号为30的员工信息?
select * from emp where deptno = 30; 子查询:
select *
from emp
where (dept.deptno=emp.deptno) and (dept.dname='SALES');
查询每个员工编号,姓名,部门名,工资等级(三表查询,这三张表并无外健关联)
select e.empno,e.ename,d.dname,s.grade
from emp e,dept d,salgrade s
where (e.deptno=d.deptno) and (e.sal between s.losal and s.hisal);
查询工资最低的员工信息(单行子查询,使用=号)
第一:查询出工资最低是多少?
select min(sal) from emp; 第二:查询工资为800的员工信息?
select * from emp where sal = 800; 子查询:
select *
from emp
where sal = (
select min(sal)
from emp
);
查询部门名为'ACCOUNTING'或'SALES'的员工信息(多行子查询,使用in关键字)
第一:查询部门名为'ACCOUNTING'或'SALES'的部门编号?
select deptno from dept where dname in ('ACCOUNTING','SALES'); 第二:查询部门号为10或30号的员工信息?
select * from emp where deptno in (10,30); 子查询:
select *
from emp