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(e.comm,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
 

  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值