员工表经典查询"/>
oracle中部门员工表经典查询
直接上代码
1.查询至少有一个员工的所有部门
select dname from dept where deptno in(select deptno from emp group by deptno having count(*)>1);
2.查询薪金比SMITH 的所有员工
select * from EMP where SAL > (select SAL from EMP where ENAME='SMITH')
3列出所有员工姓名以及其直接上司的姓名
select t1.ename,t2.ename from emp t1 left join emp t2 on t1.mgr=t2.empno;
4.列出所有员工中受雇日期早于其直接上级的姓名
select w.ename,w.hiredate,b.ename ,b.hiredate from emp w,emp b where w.mgr=b.empno and w.hiredate>b.hiredate
5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门
select dname,emp.* from dept left join emp on dept.deptno=emp.deptno;
6.列出所有CLERK的姓名及其部门名称
SELECT e.ename,d.dname from emp e join dept d on e.deptno=d.deptno where e.job='CLERK'
7.查询所有薪金大于1500的各种工作
select job from emp where sal >1500 group by job
8.列出在部门“SALES”工作的员工的姓名,假定不知道该部门编号
select ename from emp where deptno=(select deptno from dept where dname='SALES')
9.列出所有薪金高于公司平均水平的员工
SELECT * from emp where SAL >(select AVG(SAL) from emp )
10.列出所有于SCOTT相关工作的员工
select * from emp where job in (select job from emp where ename ='SCOTT')
11.列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金
select ename,sal from emp where sal in(select sal from emp where deptno=30)
12.列出薪金高于部门30工作的所有员工的薪金的员工姓名和薪金
select * from emp where sal >(select max(sal) from emp where deptno=30)
13.列出每个部门工作的员工数量,平均工资和平均服务期限
select deptno,count(*) 员工人数,avg(a.sal) 平均工资,avg(sysdate-HIREDATE) 平均服务期限 from emp a group by deptno;
14.列出所有员工的姓名,部门名称和工资
select e.ename,d.dname,e.sal+nvl(em,0) as 工资 from emp e join dept d on e.deptno=d.deptno
15.列出所有部门的信息和部门人数
select * from dept a left join (select deptno,count(*) 部门人数 from emp group by deptno) b on a.deptno=b.deptno ;
16.列出各种工作的最低工资
select job,min(sal) from emp group by job
17列出各个部门的MANAGER的最低薪金
第一种;select min(sal) from emp where job in ( select job from emp where job='MANAGER')
第二种;select * from (select sal from emp where job='MANAGER') where rownum<=1
18,列出所有员工的年工资,按年薪从低到高排序
select job,ename, sal+nvl(comm,0) as 工资 from emp order by 工资
--NVL函数的功能是实现空值的转换,根据第一个表达式的值是否为空值来返回相应的列名或表达式,主要用于对数据列上的空值进行处理,
19.用一条sql语句查询出emp表中每个部门工资前三的数据
第一种
select deptno, ename, sal from emp e1 where
( select count(1) from emp e2 where e2.deptno=e1.deptno and e2.sal>=e1.sal ) <=3 /*这里的数值表示你想取前几名*/order by deptno, sal desc;
第二种,每次手动改变里面的deptno的值
select * from (select sal,deptno as sal1 from emp where deptno=10) where rownum<=3
更多推荐
oracle中部门员工表经典查询
发布评论