高级子查询

查询比所在职位平均工资高的员工姓名,职位。

select outertab.ename,outertab.job
from emp outertab
where outertab.sal>(select avg(sal)
                  from emp
                  where outertab.job=job)

查询工资为其部门最低工资的员工编号,姓名,工资。

select aa.empno,aa.ename,aa.sal
from emp aa
where aa.sal=(select min(sal)
                        from emp
                        where aa.deptno=deptno)

查询哪些员工是经理

select *
from emp e
where 0<(select count(empno)
                from emp
                where e.empno=mgr)

查询所有雇员编号,名字和部门名字。

select emp.deptno,emp.ename,(select dname
from dept 
where emp.deptno=deptno)
from emp

查询哪些员工不是经理。

select *
from emp e
where 0=(select count(empno)
                from emp
                where e.empno=mgr)

查询每个部门工资最低的两个员工编号,姓名,工资。

select aa.empno,aa.ename,aa.job
from emp aa
 where 1>=(select count(empno)
                   from emp
                   where aa.sal>sal 
                   and aa.deptno=deptno)

列出至少有一个雇员的所有部门名称。

select dname
from dept
where exist (select count(*)
from emp 
where dept.deptno=emp.deptno
GROUP BY deptno
having count(*)>=1)

列出一个雇员都没有的所有部门名称。

select d.dname 
from dept d 
where not exists(select count(*)
from emp 
where deptno=d.deptno 
group by deptno 
having count(*)>=1)

查询薪水多于他所在部门平均薪水的雇员名字,部门号。

select e.ename,e.deptno
from emp e
where sal >(select avg(sal)
                   from emp
                   where e.deptno=deptno)

查询员工姓名和直接上级的名字。

select e.ename, (select ename 
from emp 
where empno=e.mgr)
from emp e

查询每个部门工资最高的员工姓名,工资。

select e.ename, e.sal 
from emp e
where e.sal in (select max(sal)
from emp 
where deptno=e.deptno 
group by deptno )

查询每个部门工资前两名高的员工姓名,工资。

select e.ename,e.job
from emp e
where 2>(select count(empno) 
                from emp
                where e.deptno=deptno
                and sal>e.sal)

你可能感兴趣的:(高级子查询)