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高级查询语句,供大家参考和学习。