以下基于Oeacle提供的scott管理员权限和自带的emp表格。
–1、列出至少有一个雇员的所有部门
select distinct deptno from ```
/
–2、列出薪金比”SMITH”多的所有雇员
–方法1:子查询
ename,sal
from emp
where sal>(select sal from emp where upper(ename)=’SMITH’)
/
–方法2:自联接
select tbA.*
from emp tbA,emp tbB
where tbA.sal>tbB.sal
and UPPER(tbB.ename)='SMITH'
/
–3、列出所有雇员的姓名及其直接上级的姓名
–方法1:自联接
select tbA.ename as 雇员姓名,tbB.ename as 上级姓名
from emp tbA,emp tbB
where tbA.mgr=tbB.empno(+)
/
–方法2:关联子查询
select ename as 雇员姓名,(select ename from emp where empno=tbA.mgr) as 上级姓名
from emp tbA
/
–4、列出入职日期早于其直接上级的所有雇员
–方法1:关联子查询
select *
from emp tbA
where hiredate<(select hiredate from emp where empno=tbA.mgr)
/
–方法2:自联接
select tbA.* from emp tbA,emp tbB where tbA.mgr=tbB.empno and
tbA.hiredate
select dname as 部门名称,ename as 雇员名称
from dept,emp
where dept.deptno=emp.deptno(+)
/
–6、列出所有”CLERK”(办事员)的姓名及其部门名称
select ename as 雇员姓名,dname as 部门名称
from dept,emp
where dept.deptno=emp.deptno
and UPPER(emp.job)='CLERK'
/
–7、列出各种工作类别的最低薪金,并使最低薪金大于1500
select job as 工作 , min(sal) as 最低薪金
from emp
group by job
having min(sal) >1500
/
–8、列出从事”SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号
select ename as 雇员姓名
from emp,dept
where emp.deptno=dept.deptno
and dept.dname='SALES'
/
–9、列出薪金高于公司平均水平的所有雇员
select *
from emp
where sal>(select AVG(sal) from emp)
/
–10、列出与”SCOTT”从事相同工作的所有雇员
–方法1:子查询
select *
from emp tbA
where job in (select job from emp where ename='SCOTT') and ename<>'SCOTT'
/
–方法2:自联接
select tbA.*
from emp tbA,emp tbB
where tbA.job=tbB.job
and tbB.ename='SCOTT' and tba.ename<>'SCOTT'
/
–方法3:关联子查询
SELECT * FROM EMP A WHERE EXISTS(SELECT JOB FROM EMP b WHERE
b.ENAME='SCOTT' AND A.JOB=b.JOB ) and a.ename<>'SCOTT'
–11、列出某些雇员的姓名和薪金,条件是他们的薪金等于部门30中任何一个雇员的薪金
select ename,sal
from emp
where sal in (select sal from emp where deptno=30)
--and deptno<>30
/
–12、列出某些雇员的姓名和薪金,条件是他们的薪金高于部门30中所有雇员的薪金
select ename,sal
from emp
where sal > all (select sal from emp where deptno=30)
/
–13、列出每个部门的信息以及该部门中雇员的数量
select dept.*,count(empno)
from dept,emp
where dept.deptno=emp.deptno(+)
group by dept.deptno,dname,loc
/
–注意:count(empno)
–14、列出所有雇员的雇员名称、部门名称和薪金
select ename,dname,sal
from dept,emp
where emp.deptno=dept.deptno(+)
/
–15、列出从事同一种工作但属于不同部门的雇员的不同组合
select tbA.ename,tbB.ename,tbA.job,tbB.job,tbA.deptno,tbB.deptno
from emp tbA,emp tbB
where tbA.job=tbB.job
and tbA.deptno<>tbB.deptno
/
–16、列出分配有雇员数量的所有部门的详细信息,即使是分配有0个雇员
select dept.deptno ,dname,loc,count(empno)
from dept,emp
where dept.deptno =emp.deptno(+)
group by dept.deptno,dname,loc
/
–17、列出各种类别工作的最低工资
select job,min(sal)
from emp
group by job
/
–18、列出各个部门的MANAGER(经理)的最低薪金
SELECT DEPTNO,MIN(SAL) FROM EMP
WHERE JOB='MANAGER' GROUP BY DEPTNO
/
–19、列出按计算的字段排序的所有雇员的年薪
select empno,ename , (sal+nvl(comm,0))*12 as 年薪
from emp
order by 年薪
/
–20、列出薪金水平处于第四位的雇员
第一种理解答案:按工资位次排,处于第4位的员工
select *
from (select empno,sal, rank() over (order by sal desc) as 工资位次 from emp)
where 工资位次=4
/
第二种理解答案:按工资水平排,处于第4档的员工
select emp.*
from emp , salgrade
where sal between losal and hisal
and grade=4