select * from emp;
--1.计算员工入职多少天
select ename,hiredate,(sysdate-hiredate)days from emp;
--2.计算员工入职多少个月
select ename,hiredate,months_between(sysdate,hiredate) from emp;
--3.计算员工的年终奖金
select sum(comm)from emp;
--4.根据员工职位计算加薪后的薪水
---a) 如果职位是Analyst(分析师),加薪10%
select sal*1.1 from emp where job ='ANALYST';
--b) 如果职位是Programmer,加薪5%
select sal*1.05 from emp where job ='PROGRAMMER';
--c) 如果职位是clerk,加薪2%
select sal*1.02 from emp where job ='CLERK';
--d) 其他职位不变
--5.计算员工的薪水综合
select sum(sal) from emp;
--6.计算员工的员工人数、薪水综合、平均薪水
select count(*),sum(sal),avg(sal) from emp;
--7.计算员工最高薪水和最低薪水
select max(sal),min(sal) from emp;
--8.按部门计算每个部门的最高和最低薪水是多少
select max(sal),min(sal) from emp group by deptno;
--9.计算每个部门的薪水综合和平均薪水
select sum(sal),avg(sal) from emp group by deptno;
--10.按职位分组,求每个职位的最高和最低薪水以及人数
select job,max(sal),min(sal),count(empno) from emp group by job;
--11.计算平均大于5000元的部门数据,没有部门的不算在内
select avg(sal),count(empno) from emp group by deptno
having avg(sal)>5000 and count(empno)is not null;
--12.计算那些职位的人数超过2人
select job,count(job) from emp group by job having count(*)>2;
--13.将ename的长度设置为10,如果不够左边用*补齐 LPAD(拼接)
select LPAD(ename,10,'*') from emp;
--14.求本月最后一天是多少号
select last_day(sysdate) from dual;
--15.研发部有那些职位?
select distinct(job) from emp where deptno in(select
deptno from dept where dname ='RESEARCH');
--16.求每个部门拿最高薪水的是谁
select ename,sal,job,deptno from emp where(deptno,sal)
in(select deptno,max(sal)from emp where deptno is not
null group by deptno);
--17.哪些部门的平均薪水比部门20的平均薪水高?
select deptno from emp group by deptno having avg(sal)>
(select avg(sal) from emp where deptno=20);
--18.列出员工的名字和职位,这些员工所在部门的平均薪水大于2500
select eename,e.job from empe,
(select avg(sal) as mysal,deptno from emp group
by deptno having avg(sal)>2500)s
where e.deptno =s.deptno;
--19.哪些员工的薪水比本部门的平均薪水低?
--方法1
select ename,sal,deptno from emp a where sal<(select
avg(nvl(sal,0))from emp where deptno=a.deptno)
--方法2
select ename,sal from emp e,(select avg(sal)mysal,deptno
from emp group by deptno )s where e.deptno =s.deptno and e.sal<s.mysal;
--20.哪些人是其他人的经理
select ename,DEPTNO from emp where job ='MANAGER';
select ename from emp e where e.empno in(
select distinct( mgr) from emp where mgr is not null);
--21.哪些部门没有员工
select * from dept where deptno
not in (select deptno from emp group by deptno);
--列出员工名字和所在城市
--方法(等值连接)
select ename,loc from emp,dept where emp.deptno=dept.deptno;
--内连接
select ename,loc from emp inner join dept on
emp.deptno=dept.deptno
--列出员工的姓名和他上司的名字
select e.ename from emp e inner join emp a on e.mgr=a.empno;
--列出员工的名字和他所在的部门,把没有部门的员工也查出来
select e.ename,d.deptno,d.dname from emp e left join
dept d on e.deptno=d.deptno;
--列出员工的名字和他所在的部门的名字,把没有部门的员工也查出来
select e.ename,d.deptno,d.dname from emp e right join
dept d on e.deptno=d.deptno;
--1.计算员工入职多少天
select ename,hiredate,(sysdate-hiredate)days from emp;
--2.计算员工入职多少个月
select ename,hiredate,months_between(sysdate,hiredate) from emp;
--3.计算员工的年终奖金
select sum(comm)from emp;
--4.根据员工职位计算加薪后的薪水
---a) 如果职位是Analyst(分析师),加薪10%
select sal*1.1 from emp where job ='ANALYST';
--b) 如果职位是Programmer,加薪5%
select sal*1.05 from emp where job ='PROGRAMMER';
--c) 如果职位是clerk,加薪2%
select sal*1.02 from emp where job ='CLERK';
--d) 其他职位不变
--5.计算员工的薪水综合
select sum(sal) from emp;
--6.计算员工的员工人数、薪水综合、平均薪水
select count(*),sum(sal),avg(sal) from emp;
--7.计算员工最高薪水和最低薪水
select max(sal),min(sal) from emp;
--8.按部门计算每个部门的最高和最低薪水是多少
select max(sal),min(sal) from emp group by deptno;
--9.计算每个部门的薪水综合和平均薪水
select sum(sal),avg(sal) from emp group by deptno;
--10.按职位分组,求每个职位的最高和最低薪水以及人数
select job,max(sal),min(sal),count(empno) from emp group by job;
--11.计算平均大于5000元的部门数据,没有部门的不算在内
select avg(sal),count(empno) from emp group by deptno
having avg(sal)>5000 and count(empno)is not null;
--12.计算那些职位的人数超过2人
select job,count(job) from emp group by job having count(*)>2;
--13.将ename的长度设置为10,如果不够左边用*补齐 LPAD(拼接)
select LPAD(ename,10,'*') from emp;
--14.求本月最后一天是多少号
select last_day(sysdate) from dual;
--15.研发部有那些职位?
select distinct(job) from emp where deptno in(select
deptno from dept where dname ='RESEARCH');
--16.求每个部门拿最高薪水的是谁
select ename,sal,job,deptno from emp where(deptno,sal)
in(select deptno,max(sal)from emp where deptno is not
null group by deptno);
--17.哪些部门的平均薪水比部门20的平均薪水高?
select deptno from emp group by deptno having avg(sal)>
(select avg(sal) from emp where deptno=20);
--18.列出员工的名字和职位,这些员工所在部门的平均薪水大于2500
select eename,e.job from empe,
(select avg(sal) as mysal,deptno from emp group
by deptno having avg(sal)>2500)s
where e.deptno =s.deptno;
--19.哪些员工的薪水比本部门的平均薪水低?
--方法1
select ename,sal,deptno from emp a where sal<(select
avg(nvl(sal,0))from emp where deptno=a.deptno)
--方法2
select ename,sal from emp e,(select avg(sal)mysal,deptno
from emp group by deptno )s where e.deptno =s.deptno and e.sal<s.mysal;
--20.哪些人是其他人的经理
select ename,DEPTNO from emp where job ='MANAGER';
select ename from emp e where e.empno in(
select distinct( mgr) from emp where mgr is not null);
--21.哪些部门没有员工
select * from dept where deptno
not in (select deptno from emp group by deptno);
--列出员工名字和所在城市
--方法(等值连接)
select ename,loc from emp,dept where emp.deptno=dept.deptno;
--内连接
select ename,loc from emp inner join dept on
emp.deptno=dept.deptno
--列出员工的姓名和他上司的名字
select e.ename from emp e inner join emp a on e.mgr=a.empno;
--列出员工的名字和他所在的部门,把没有部门的员工也查出来
select e.ename,d.deptno,d.dname from emp e left join
dept d on e.deptno=d.deptno;
--列出员工的名字和他所在的部门的名字,把没有部门的员工也查出来
select e.ename,d.deptno,d.dname from emp e right join
dept d on e.deptno=d.deptno;