--1、显示所有部门名
selectdept.dname from dept;
--2、显示所有雇员名及其全年收入(工资+补助),并指定列别名“年收入” select emp.ename as 雇员名,nvl2(comm,comm+sal,sal)*12 as 年收入 from emp; select emp.ename , (emp.sal+nvl(bonus.sal,0))*12 as 年收入 fromemp left join bonus on emp.ename = bonus.ename; --3、显示存在雇员的所有部门号 selectemp.deptno from emp;
--4.显示工资超过2850的雇员名和工资
select emp.ename as 雇员名,emp.sal as 工资 from emp where emp.sal> 2850; --5.显示工资不在1500到2850之间的所有雇员名及工资
select emp.ename as 雇员名,emp.sal as 工资 from emp where emp.sal not between 1500 and 2850;
--6、显示雇员代码为7566的雇员名及所在部门号 selectdeptno from emp where empno = 7566;
--7、显示部门代码为10和30中工资超过1500的雇员名及工资
select emp.ename as 雇员名,emp.sal as 工资 from emp where emp.deptno in(10,30) and emp.sal< 1500;
--8、显示无管理者的雇员名及岗位
selectemp.ename,emp.job from emp where mgr is null;
--9、显示所有雇员的平均工资、总计工资、最高工资、最低工资
select round(avg(emp.sal),2) as 平均工资,count(emp.sal) as 总计工资,max(emp.sal) as 最高工资,
min(emp.sal) as 最低工资 from emp ; --10、显示每种岗位的雇员总数、平均工资 select * from emp;
select count(empno) as 总人数 , round(avg(sal),2) as 平均工资 fromemp group by job;
--11、显示雇员总数,以及获得补助的雇员数 select * from emp;
select count(emp.empno) as 总人数 ,
count(bonus.ename) as 补助总人数
fromemp left join bonus on emp.ename = bonus.ename; --12、显示管理者的总人数
select count(distinct mgr) as 管理者总人数 from emp ; --13、显示雇员工资的最大差额
select * from emp;
select max(sal)-min(sal) as 最大差额 from emp;
--14、显示部门代码为20的部门号,以及该部门的所有雇员名、雇员工资及岗位 selectemp.ename,emp.sal,emp.job
fromemp where emp.deptno = 20;
--15、显示获得补助的所有雇员名、补助额以及所在部门号 selectemp.ename,bonus.sal,emp.deptno
fromemp inner join bonus
onemp.ename = bonus.ename;
--16、显示所有雇员的姓名、部门编号、工资,并且列名要显示为中文 select ename as 姓名 , deptno as 部门编号 , sal as 工资 from emp;
--17、显示每个部门每个岗位的平均工资、每个部门的平均工资、每个岗位的平均工资 selecta.deptno,a.job,a.deptno_job_avg,b.deptno_avg,c.job_avg from
(selectdeptno,job,avg(sal) as deptno_job_avg from emp group by deptno,job) a left join (select deptno,avg(sal) as deptno_avg from emp group by deptno) b ona.deptno = b.deptno
left join (select job,avg(sal) as job_avg from emp group by job) c ona.job = c.job order by deptno;
select job,deptno,avg(job) as 岗位的平均工资,avg(emp.deptno) as 部门的平均工资 fromemp group by grouping sets (job,deptno);
selectdeptno,job,avg(sal) from emp group by grouping sets(emp.deptno,emp.job); --18、显示工资大于1500的雇员名和工资,并且按照工资的降序排列 select emp.ename as 雇员名,emp.sal as 工资
fromemp where emp.sal> 1500 order by emp.saldesc;
--19、显示雇员部门编号为10或20的信息(要求使用IN关键字) select * from emp where emp.deptno in(10,20); --20、显示雇员名的第二个字母为A的信息 select * from emp;
select * from emp where emp.ename like '_A%'; --21、显示没有发放补助的雇员信息 select * from emp
whereename not in (select ename from bonus); --22、显示雇员表中记录总数
select count(*) from emp; --第二部分
--1、显示所有雇员名、雇员工资及所在部门名 selectemp.ename,emp.sal,dept.dname fromemp,dept
whereemp.deptno=dept.deptno;
--2、显示部门代码为20的部门名,以及该部门的所有雇员名、雇员工资及岗位 selectdept.dname,emp.ename,emp.sal,emp.job fromemp,dept
whereemp.deptno=dept.deptno and emp.deptno=20; --3、显示所有雇员名、雇员工资及工资级别 selectemp.ename,emp.sal,salgrade.grade
fromemp,salgrade
whereemp.sal>salgrade.losal and emp.sal<=salgrade.hisal --4、显示雇员“SCOTT”的管理者名 selectdept.loc from emp,dept
whereemp.ename='SCOTT' and emp.deptno = dept.deptno;
--5、显示获得补助的所有雇员名、补助额以及所在部门名
selectemp.ename,bonus.sal,dept.dname fromemp,dept,bonus
whereemp.ename = bonus.ename and emp.deptno=dept.deptno;
--6、查询EMP表和SALGRADE表,显示部门代码为20的雇员名、工资及其工资级别 selectemp.ename,emp.sal,salgrade.grade fromemp,salgrade
whereemp.deptno=20 and emp.sal>salgrade.losal and emp.sal<=salgrade.hisal; --7、显示部门代码为10的所有雇员名、部门名,以及其他部门名 select * from emp; select * from bonus; select * from dept;
select * from salgrade;
selecte.ename,d.dname from emp e left join dept d on e.deptno=10 and d.deptno=10 order by d.dname
--8、显示部门代码为10的所有雇员名、部门名,以及其他雇员名 selectemp.ename,dept.dname fromemp
right join dept
onemp.deptno=10 and emp.deptno=dept.deptno order by emp.ename;
--9、显示部门代码为10的所有雇员名、部门名,以及其他部门名和雇员名 selectemp.ename,dept.dname fromemp full join dept
onemp.deptno=10 and emp.deptno=dept.deptno order by emp.ename; --10、显示\同部门的所有雇员,但不显示\select * from emp where emp.deptno=(select emp.deptno fromemp
whereemp.ename='BLAKE' )and emp.ename<>'BLAKE' ;
第三部分
1、按以下格式显示下面的信息,条件是工资大于1500的。 部门名称姓名工资
select d.dname as 部门名称, e.ename as 姓名,e.sal as 工资 fromemp e, dept d
wheree.deptno = d.deptno and sal> 1500
2、按以下格式显示下面信息,条件是此人工资在所有人中最高。 部门姓名工资
select d.dname as 部门名称, e.ename as 姓名,e.sal as 工资 fromemp e, dept d wheree.sal
in (
select max(sal) from emp )
ande.deptno = d.deptno
3、按以下格式显示下面信息 某人为某人工作
select a.ename as 某人为 ,b.ename as 某人 ,a.job as 工作 from empa,emp b where a.empno = b.mgr
4、为所有人长工资,标准是:10部门长10%;20部门长15%;30部门长20%其他部门长18%(要求用DECODE函数)
select round(decode(deptno,'10',sal*(1+0.1), '20',sal*(1+0.15), '30',sal*(1+0.2),sal*(1+0.18)),2) as 工资 from emp updateemp
setsal=decode(deptno,'10',sal*(1+0.1), '20',sal*(1+0.15), '30',sal*(1+0.2),sal*(1+0.18)); 5、根据工作年限长工资,标准是:为公司工作了几个月就长几个百分点。 select round(sal * (1+(sysdate - hiredate)/365/12/100),2) from emp updateemp
setsal= round(sal * (1+(sysdate - hiredate)/365/12/100),2); 6、查询出king所在部门的部门号\\部门名称\\部门人数 select e.deptno as 部门号,d.dname as 部门名称, (
select count(*) from (select deptno from emp where deptno in (select deptno from emp where ename='KING') )
) as 部门人数 fromemp e, dept d
wheree.deptno = d.deptno and e.ename = 'KING';
7、查询出king所在部门的工作年限最大的员工名字
selectename, hiredate from emp wherehiredate in (
select min(hiredate) from (select hiredate from emp where deptno in (select deptno from emp where ename='KING') ) )
8、查询出管理员工人数最多的人的名字和他管理的人的名字 select a.ENAME员工,b.ENAME as 管理员 fromEmp a join Emp b on a.MGR=b.EMPNO wherea.MGR=( select MGR from Emp group by MGR having count(MGR)=( select max(cn)
from (
select count(MGR) as cn,MGR fromEmp
group by MGR ) a ) )
order by a.MGR
select a.ename员工,b.ename管理员 from emp a, emp b wherea.empno in( selectmgr from (
select max(num) as num1 from ( select count(*) as num ,mgr from emp
wheremgr in (select a.mgr from empa,emp b where a.mgr = b.empno) group by mgr
)) a,( select count(*) as num ,mgr from emp
wheremgr in ( select a.mgr from empa,emp b where a.mgr = b.empno) group by mgr) b where a.num1 = b.num
) and b.mgr in ( selectmgr from ( select max(num) as num1 from ( select count(*) as num ,mgr from emp
wheremgr in (select a.mgr from empa,emp b where a.mgr = b.empno ) group by mgr)) a,
( select count(*) as num ,mgr from emp
wheremgr in ( select a.mgr from empa,emp b where a.mgr = b.empno ) group by mgr) b where a.num1 = b.num)
9、查询出工资成本最高的部门的部门号和部门名称 select DEPTNO 部门编号,DNAME 部门名称 fromDept
where DEPTNO=(select DEPTNO fromEmp
group by DEPTNO
having sum(SAL)=( select max(SSAL) from (select sum(SAL) as SSAL,DEPTNO fromEmp
group by DEPTNO) a ) )
10、查询出工资不超过2500的人数最多的部门名称 select deptno as 部门编号,DNAME as 部门名称 fromDept
wheredeptno=(select deptno
from (select count(EMPNO) as cn,deptno
fromEmp
where SAL<=2500 group by deptno )a
wherecn=(select max(cn)