子查询
单行子查询(single-row subqueries)
使用的运算符号(=,>,<,>=,<=,<>)
多行子查询(multiple-row subqueries)
使用的运算符号(in,not in,exists,not exits,all,any)
相关子查询(correlated subqueries)
格式 select 列名,(select 语句) from 表名
标量子查询(scalar subqueries)
子查询是返回单行单列,格式同上
多列子查询(multiple-column subqueries)
在DDL语句中使用子查询
在DML语句中使用子查询
--------
单行子查询
--显示工资最高的雇员信息
Select ename,deptno,sal from emp
Where sal=(select max(sal) from emp);
--------
多行子查询
--显示与部门编号为20的岗位相同的雇员信息
Select ename,deptno,sal,job from emp
Where job in (select distinct job from emp where deptno=20);
--显示不与部门编号为20的岗位相同的雇员信息
Select ename,deptno,sal,job from emp where job not in (select distinct job from emp where deptno=20);
--显示高于部门编号为20的所有雇员的工资的雇员信息
select ename,deptno,sal ,job from emp
where sal>all(select sal from emp where deptno=20);
--显示高于部门编号为20的任何雇员的工资的雇员信息
select ename,deptno,sal ,job from emp
where sal>any(select sal from emp where deptno=20);
---------
相关子查询
--显示每个部门的最高工资的雇员信息
select deptno,(select max(sal) from emp b where b.deptno=a.deptno) maxsal
from emp a order by deptno;
--增加distinct
select distinct deptno,(select max(sal) from emp b where b.deptno=a.deptno) maxsal
from emp a order by deptno;
--显示工作在NEW YORK的雇员信息
select ename,deptno,sal,job from emp
where exists (select 'x' from dept where dept.deptno=emp.deptno and dept.loc='NEW YORK');
---------
标量子查询
--返回单行单列
Select count(*) from emp;
Select sum(sal) ......