暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle SQL高级查询

知识共鸣 2019-03-19
395

01.查询所有工种为CLERK的员工的姓名及其部门名称。

select ename,dname from emp a1,dept a2 where a1.deptno=a2.deptno and job='CLERK';

select ename,dname from emp a1 inner join dept a2 on a1.deptno=a2.deptno where job='CLERK';

 

02.查询所有部门及其员工信息,包括那些没有员工的部门。

select * from emp a1  right join dept a2 on a1.deptno=a2.deptno;

 

03.查询所有员工及其部门信息,包括那些还不属于任何部门的员工。

select * from emp a1  left join dept a2 on a1.deptno=a2.deptno;

 

04.查询在SALES部门工作的员工的姓名信息。

select * from emp where deptno in(select deptno from dept where dname='SALES');

select * from emp a1 inner join dept a2 on a1.deptno=a2.deptno

where a2.dname='SALES';

 

05.查询所有员工的姓名及其直接上级的姓名。

select a1.empno ,a1.ename 员工信息,a2.empno ,a2.ename 上级信息 from emp a1,emp a2 where a1.mgr=a2.empno;

 

06.查询入职日期早于其上级领导的所有员工的信息。

select a1.empno ,a1.hiredate,a1.ename 员工信息,a2.empno ,a2.hiredate,a2.ename 上级信息 from emp a1,emp a2 where a1.mgr=a2.empno and a1.hiredate<a2.hiredate;

 

07.查询从事同一种工作但不属于同一部门的员工信息。

select a1.ename,a1.job,a1.deptno,a2.ename,a2.job,a2.deptno from emp a1 cross join emp a2 where a1.job=a2.job and a1.deptno<>a2.deptno;

 

 

08.查询10号部门员工及其领导的信息。

select a1.ename 员工姓名,a2.ename 经理姓名 from emp a1  inner join emp a2 on a2.empno=a1.mgr where  a1.deptno=10;

 

09.使用UNION将工资大于2500的雇员信息与工作为ANALYST的雇员信息合并。

select * from emp  where nvl(sal,0)>2500 union (select * from emp where job='ANALYST');

 

 

 

10. 通过INTERSECT/intersect交集集合运算,查询工资大于2500,并且工作为ANALYST的雇员信息。

select * from emp where sal>2500 intersect (select * from emp where job='ANALYST');

 

 

11. 使用MINUS/minus差集集合查询工资大于2500,但工作不是ANALYST的雇员信息。

select * from emp where sal>2500 minus (select * from emp where job='ANALYST');

 

12. 查询工资高于公司平均工资的所有员工信息。

select a1.* from emp a1,(select avg(nvl(sal,0)) sal from emp) a2 where a1.sal>a2.sal;

select * from emp where sal>(select avg(nvl(sal,0)) from emp);

 

13. 查询与SMITH员工从事相同工作的所有员工信息。

select * from emp where job=(select job from emp where ename='SMITH');

 

14. 查询工资比SMITH员工工资高的所有员工信息。

select * from emp where sal>(select nvl(sal,0) from emp where ename='SMITH');

 

15. 查询比所有在30号部门中工作的员工的工资都高的员工姓名和工资。

select ename,sal from emp where sal>(select max(nvl(sal,0)) from  emp where deptno=30);

select ename,sal from emp where sal>all(select sal from emp where deptno=30);

 

16. 查询部门人数大于5的部门的员工信息。

select * from emp where deptno in (select deptno from emp group by deptno having count(*)>5);

 

17. 查询所有员工工资都大于2000的部门的信息。

select * from dept where deptno in(select deptno from emp group by deptno having min(nvl(sal,0)) > 2000);

 

18. 查询人数最多的部门信息。

select * from dept where deptno in(select deptno from (select deptno,count(*) as 人数 from emp group by deptno) where 人数=(select max(人数) from (select deptno,count(*) 人数 from emp group by deptno)));

 

19. 查询至少有一个员工的部门信息

select * from dept where deptno in(select deptno from emp group by deptno having count(*)>=1);

 

20. 查询工资高于本部门平均工资的员工信息。

select * from emp a1,(select avg(nvl(sal,0)) 各部门平均工资,deptno from emp group by deptno) a2  where a1.deptno=a2.deptno and a1.sal>各部门平均工资;

select * from emp a1 where sal>(select avg(sal) from emp

group by deptno having a1.deptno=deptno);

 

21. 查询工资高于本部门平均工资的员工信息及其部门的平均工资。

select * from emp a1,(select avg(nvl(sal,0)) 部门平均工资,deptno from emp group by deptno) a2  where a1.deptno=a2.deptno and a1.sal>部门平均工资;

 

22. 查询每个员工的领导所在部门的信息。

select * from dept where deptno in(select distinct deptno from emp where empno in(select distinct mgr from emp));

 

23. 查询平均工资低于2000的部门及其员工信息。

select * from emp where deptno in(select deptno from (select avg(nvl(sal,0)) 平均值,deptno from emp group by deptno)  where 平均值<2000);

以上就是个人整理出来的oracle sql高级查询语句,供大家参考和学习。

文章转载自知识共鸣,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论