WHCSRL 技术网

Oracle Select语句 连接查询 练习1_LLLZZZai

color=FF1F8F
color=1F8FFF
重点color=FF5C5C
注释color=00E000
题目:

--1. 查询所有部门及其员工信息,包括那些没有员工的部门
--2. 查询所有员工及其部门信息,包括那些还不属于任何部门的员工
--3. 查询所有工种为CLERK的员工的姓名及其部门名称
--4. 显示部门号为10的部门名、员工名和工资
--5. 显示雇员名,雇员工资及所在部门的名字,并按部门排序
--6. 列出在部门“SALES”(销售部)工作的员工姓名、基本工资、雇佣日期、部门名称
--7. 显示各个员工的姓名,工资及工资的级别

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

–1. 查询所有部门及其员工信息,包括那些没有员工的部门 (右外连接)
select * from emp e right join dept d on e.deptno=d.deptno;
–2. 查询所有员工及其部门信息,包括那些还不属于任何部门的员工 (左外连接)
select * from emp e left join dept d on e.deptno=d.deptno;
–3. 查询所有工种为CLERK的员工的姓名及其部门名称
select ename,dname from emp e join dept d on e.deptno=d.deptno where job=‘CLERK’;
–4. 显示部门号为10的部门名、员工名和工资
select dname,ename,sal from emp e join dept d on e.deptno=d.deptno where e.deptno=10;
–5. 显示雇员名,雇员工资及所在部门的名字,并按部门排序 (不能按照文字排序)
select ename,sal,dname from emp join dept on emp.deptno=dept.deptno order by emp.deptno;
–6. 列出在部门“SALES”(销售部)工作的员工姓名、基本工资、雇佣日期、部门名称
select ename,sal,hiredate,dname from emp e join dept d on e.deptno=d.deptno
where d.dname=‘SALES’;

–7. 显示各个员工的姓名,工资及工资的级别
select ename,sal,grade from emp e join salgrade s on sal between losal and hisal;


--1. 查询最高工资员工的名字,工作岗位
--2. 算出部门 30 中得到最多奖金的员工姓名
--3. 找出工资比ford高的员工的信息
--4. 找出不在部门20,且比部门20的任何一个员工的工资都高的员工的姓名和所在部门名称。
--5. 查询与SMITH的部门和岗位完全相同的所有雇员。
--6. 查询每个部门工资最高的员工
--7. 显示员工‘FORD’的上级
--8. 查询工资比部门30的所有员工的工资高的员工的姓名、工资和部门号
--9. 查询工资比部门30的任意一个员工的工资高的员工的姓名、工资和部门号
--10. 查询emp表中平均工资的最大值和其所在的部门编号
--11. 查询emp表中平均工资的最大值和其所在的部门编号及部门名称
--12. 查询所有在任职职位上工资最高的员工
--13. 查找所有工资高于自己本部门平均工资的员工
--14. 显示每个部门的信息和人员数量
--15. 查找工资大于同职位的平均工资的员工信息
--16. 查询员工表中是领导的员工
--17. 查询员工表中不是领导的员工

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

–1. 查询最高工资员工的名字,工作岗位
select ename,job from emp where sal in(select max(sal) from emp);
–2. 算出部门 30 中得到最多奖金的员工姓名
select ename from emp where comm in(select max(comm) from emp group by deptno having deptno=30);
–3. 找出工资比ford高的员工的信息
select * from emp where sal>(select sal from emp where ename=‘FORD’);

–4. 找出不在部门20,且比部门20的任何一个员工的工资都高的员工的姓名和所在部门名称。
select ename,dname from emp e join dept d on e.deptno=d.deptno where sal>(select max(sal) from
emp where deptno=20) and e.deptno<>20 ;

–5. 查询与SMITH的部门和岗位完全相同的所有雇员。
select ename from emp e join dept d on e.deptno=d.deptno where e.deptno=(select deptno from emp where
ename=‘SMITH’) and e.job=(select job from emp where ename=‘SMITH’);

–6. 查询每个部门工资最高的员工
select ename from emp where sal in(select max(sal) from emp group by deptno);

–7. 显示员工‘FORD’的上级
自连接典例
select ename from emp worker join emp boss on worker.mgr=boss.empno where worker.ename=‘FORD’;

–8. 查询工资比部门30的所有员工的工资高的员工的姓名、工资和部门号
select ename,sal,deptno from emp where sal>all(select sal from emp where deptno=30);
–9. 查询工资比部门30的任意一个员工的工资高的员工的姓名、工资和部门号
select ename,sal,deptno from emp where sal>any(select sal from emp where deptno=30);

–10. 查询emp表中平均工资的最大值和其所在的部门编号
这里注意嵌套组函数在后面查询.
select avg(sal),deptno from emp group by deptno having avg(sal)=(select max(avg(sal)) from emp group by
deptno);

–11. 查询emp表中平均工资的最大值和其所在的部门编号及部门名称
select avg(sal),e.deptno,d.dname from emp e join dept d on e.deptno=d.deptno group by e.deptno, d.dname
having avg(sal)=(select max(avg(sal)) from emp group by deptno);

–12. 查询所有在任职职位上工资最高的员工
select ename,job,sal from emp where sal in(select max(sal) from emp group by job);

–13. 查找所有工资高于自己本部门平均工资的员工
select ename from emp where sal>all(select avg(sal) from emp group by deptno);

–14. 显示每个部门的信息和人员数量
这里计算数量是计算分组后有部门号的数量,且需要外连接,把部门没有人员的也显示出来
select d.deptno,d.dname,d.loc,count(e.deptno) from dept d left join emp e on d.deptno=e.deptno group by d.deptno,
d.dname, d.loc;

–15. 查找工资大于同职位的平均工资的员工信息
select a.ename,a.job from emp a join emp b on a.deptno=b.deptno where a.sal>(select avg(sal) from emp where
a.deptno=b.deptno);

–查询各职位平均工资
select job,avg(sal) from emp group by job;

–16. 查询员工表中是领导的员工
select ename from emp where empno in(select mgr from emp);–empno=112 or empno=113

–17. 查询员工表中不是领导的员工
这里不能只用not in,它相当于empno<>112 and empno <>113 and empno<>null 遇到一个空都会没有数据
select ename from emp where empno not in (select mgr from emp where mgr is not null);

推荐阅读