1 显示所有雇员名、雇员工资及所在部门名
--select ename 雇员名,sal 雇员工资,dname 部门名 from emp,dept where emp.deptno=dept.deptno;
select ename 雇员名,sal 雇员工资,dname 部门名 from emp,dept where emp.deptno=dept.deptno;
2 显示部门代码为20的部门名,以及该部门的所有雇员名、雇员工资及岗位
select dname 部门名,ename 雇员名,sal 雇员工资, job 岗位 from emp,dept where emp.deptno=dept.deptno and emp.deptno=20;
3 显示所有雇员名、雇员工资及工资级别
select ename 雇员名,sal 雇员工资,grade 工资级别 from emp,salgrade where sal>=losal and sal<=hisal;
4 显示雇员"SCOTT"的管理者名
select ename from emp where empno=(select mgr from emp where ename='SCOTT');
5 显示获得补助的所有雇员名、补助额以及所在部门名
select ename 雇员名,comm 补助额,dname 部门名 from emp,dept where emp.deptno=dept.deptno and comm is not null;
6 查询EMP表和SALGRADE表,显示部门代码为20的雇员名、工资及其工资级别
select ename,sal,grade from emp,salgrade where deptno='20' and sal>=losal and sal<=hisal;
7 显示部门代码为10的所有雇员名、部门名,以及其他部门名
select ename,dname from emp right join dept on emp.deptno=10 and emp.deptno=dept.deptno;
8 显示部门代码为10的所有雇员名、部门名,以及其他雇员名
select ename,dname from emp left join dept on emp.deptno=10 and emp.deptno=dept.deptno;
9 显示部门代码为10的所有雇员名、部门名,以及其他部门名和雇员名
select ename,dname from emp full join dept on emp.deptno=10 and emp.deptno=dept.deptno;
10 显示"BLAKE"同部门的所有雇员,但不显示"BLAKE"
select * from emp where deptno=(select deptno from emp where ename='BLAKE') and ename<>'BLAKE';
select e.ename,e.deptno from emp e,emp d where e.deptno=d.DEPTNO and e.ename<>'BLAKE' and d.ename='BLAKE';
11 按以下格式显示下面的信息,条件是工资大于1500的。
-- 部门名称 姓名 工资
select dname,ename,sal from emp,dept where emp.deptno=dept.deptno and sal>1500;
12 按以下格式显示下面信息,条件是此人工资在所有人中最高。
-- 部门 姓名 工资
select dname,ename,sal from emp,dept where sal=(select max(sal) from emp) and emp.deptno=dept.deptno;
13 按以下格式显示下面信息
-- 某人 为 某人 工作
select e.ename||' 为 '||b.ename||' 工作' 描述 from emp e,emp b where e.mgr=b.empno;
14 为所有人长工资,标准是:10部门长10%;20部门长15%;
-- 30部门长20%其他部门长18%(要求用DECODE函数)
select ename,job,sal,sal*decode(deptno,10,1.1,20,1.15,30,1.2,1.18) 增长后的工资,deptno from emp;
!15 根据工作年限长工资,标准是:为公司工作了几个月就长几个百分点。
select ename,job,hiredate,sal,sal*(1+round(MONTHS_BETWEEN(sysdate,hiredate)/100.0)) 增长后的工资 from emp;
--select sal*(1+round(MONTHS_BETWEEN(sysdate,hiredate)/100.0)) 增长后的工资 from emp;
16 查询出king所在部门的部门号\部门名称\部门人数
select emp.deptno 部门名称,dname 部门名,count(1) 人数 from emp,dept where emp.deptno=dept.deptno
and emp.deptno=(select deptno from emp where ename='KING') group by emp.deptno,dname;
--select count(1) from emp where deptno=(select deptno from emp where ename='KING');
17 查询出king所在部门的工作年限最大的员工名字
select ename from emp where hiredate=(select min(hiredate)from emp);
!18 查询出管理员工人数最多的人的名字和他管理的人的名字
--select max(pt) from (select b.ename name,count(1) pt from emp a,emp b where a.mgr=b.empno group by b.ename) lk;
select b.ename,e.ename from emp e,emp b where e.mgr=b.empno and
b.empno in(select mgr from emp group by mgr
having count(1)>=all(select count(1)from emp group by mgr));
19 查询出工资成本最高的部门的部门号和部门名称
--select dept.deptno,sum(sal) from emp,dept where emp.deptno=dept.deptno group by dept.deptno;
select d.deptno,d.dname from dept d,emp e where d.deptno = e.deptno
group by d.deptno,d.dname having sum(e.sal) >= all (select sum(sal) from emp group by deptno);
20 查询出工资不超过2500的人数最多的部门名称
select dname,a.* from dept d,(select deptno,count(1) num from emp where sal<2500 group by deptno) a where a.deptno=d.deptno and deptno=(select deptno from a having max(num));
select d.deptno,d.dname from dept d,emp e where d.deptno = e.deptno and e.sal <= 2500 group by
d.deptno,d.dname having count(*) >= all (select count(*) from emp where sal <= 2500 group by deptno);
21 查询出没有下属员工的人的名字和他的职位
select ename,job from emp where empno not in(select distinct nvl(mgr,0) from emp);
select ename,job from emp where empno not in(select mgr from emp where mgr is not null);
22 查询出人数最多的那个部门的部门编号和部门名称
select d.deptno,d.dname from dept d,emp e where d.deptno=e.deptno
group by d.deptno,d.dname having sum(e.deptno)>= all(select sum(deptno) from emp group by deptno);
23 查询出没有员工的那个部门的部门编号和部门名称(要求用两种方法,其中一种要用集合运算)
select d.deptno,d.dname from dept d,emp e where d.deptno=e.deptno(+)
and d.deptno not in(select distinct deptno from emp);
select d.deptno,d.dname from dept d,emp e where d.deptno=e.deptno(+)
minus select d.deptno,d.dname from dept d,emp e where d.deptno=e.deptno;
24 查询出员工名字以A打头的人数最多的部门名称和员工名字
select d.dname,e.ename from emp e,dept d where e.deptno=d.deptno
and e.deptno in(select deptno from emp where ename like 'A%' group by deptno
having count(*)>=all(select count(*)from emp where ename like 'A%' group by deptno));
25 现在公司要给员工增加工龄工资,规则是:30*工作年限,请按以下格式显示下面结果:
-- 部门名称 员工姓名 原工资 增加额度 新工资
select dname 部门名称,ename 员工姓名,sal 原工资,30*round(MONTHS_BETWEEN(sysdate,hiredate)/12) 增加额度,
sal+30*round(MONTHS_BETWEEN(sysdate,hiredate)/12) 新工资 from emp e,dept d;
26 针对DEPT和EMP表,查询出下面格式的结果并要求按部门编号和工资降序排列。
-- 部门名称 员工姓名 工资
select dname 部门名称,ename 员工姓名,sal 工资 from emp e,dept d where e.deptno=d.deptno order by e.deptno desc,sal desc;
27 针对DEPT和EMP表,查询出下面格式的结果。
-- 部门编号 部门名称 部门工资最小值 部门工资最大值 部门工资平均值 部门工资合计值
select d.deptno 部门编号,dname 部门名称,min(sal)部门工资最小值,max(sal) 部门工资最大值,
avg(sal) 部门工资平均值 from emp e,dept d where e.deptno=d.deptno group by d.deptno,dname;
28 针对DEPT和EMP表,查询出SMITH所在部门的部门名称、部门工资平均值。(要求使用子查询)
select d.deptno,dname,avg(sal) 部门平均工资 from dept d,emp e
where e.deptno=(select deptno from emp where ename='SMITH') and e.deptno=d.deptno group by d.deptno,dname;
29 针对DEPT和EMP表,查询出下面格式的结果。(要求使用外连接,没有员工的部门名也要显示。
-- 员工姓名如果是空值,要求用"不存在"代替;如果工资是空值,要求用0代替。)
-- 部门名称 员工姓名 工资
select dname 部门名称,nvl(ename,'不存在') 员工姓名,nvl(sal,0) 工资 from emp e,dept d where e.deptno(+)=d.deptno;
30 针对DEPT和EMP表,查询出没有员工的部门号和部门名称(要求用两种方法)
select d.deptno 部门号,dname 部门名称 from emp e,dept d where e.deptno(+)=d.deptno
MINUS
select d.deptno 部门号,dname 部门名称 from emp e,dept d where e.deptno=d.deptno;
select d.deptno 部门号,dname 部门名称 from emp e,dept d where e.deptno(+)=d.deptno and d.deptno not in(select distinct deptno from emp);
31 查询出平均工资最高的部门编号、部门名称和平均工资。
select e.deptno,dname,avg(sal) from emp e,dept d where e.deptno=d.deptno
group by e.deptno,dname having avg(sal)>=all(select avg(sal) from emp group by deptno);
32 查询出工资高于全体平均工资人数最多的部门编号、部门名称和员工姓名、工资。
select e.deptno,dname,ename,sal from emp e,dept d where e.deptno=d.deptno
and e.deptno in(select deptno from emp group by deptno having avg(sal)>(select avg(sal) from emp));