欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SQL复杂查询(四)

程序员文章站 2024-03-04 20:35:42
...

16.列出各种工作的最低工资及从事此工作的雇员姓名

确定所需要的数据表:
emp表:最低工资,雇员名称

16.1 各种工作的最低工资

SELECT MIN(e.sal) minsal,e.job job FROM emp  e GROUP BY e.job;

SQL复杂查询(四)

16.2 从事此工作的雇员姓名

SELECT e.ename ,temp.job,temp.minsal FROM emp e ,
(SELECT MIN(e.sal) minsal,e.job job FROM emp  e GROUP BY e.job) temp 
WHERE e.sal IN temp.minsal;

SQL复杂查询(四)

SELECT e.ename ,e.job,e.sal FROM emp e ,
(SELECT job,MIN(sal) min FROM emp GROUP BY job) temp 
WHERE e.job=temp.job AND e.sal=temp.min;

SQL复杂查询(四)

17.列出各个部门的MANAGER的最低薪金、姓名、部门名称、部门人数

确定所需要的数据表:
emp表:姓名,各个部门的MANAGER薪金
emp表:统计部门人数
dept表:部门名称

确定已知的关联字段:
emp.deptno=dept.deptno

17.1 各个部门的MANAGER的最低薪金,姓名

SELECT deptno,MIN(sal) FROM emp WHERE job='MANAGER'
GROUP BY deptno;

SQL复杂查询(四)

17.2 找到姓名,但是以上的查询不能出现其它字段,需要写子查询

SELECT e.ename,temp.dno,temp.min
FROM emp e,(SELECT deptno dno ,MIN(sal) min FROM emp WHERE job='MANAGER'
GROUP BY deptno) temp
WHERE e.deptno=temp.dno AND e.job='MANAGER' AND e.sal=temp.min;

SQL复杂查询(四)

17.3 部门的名称

SELECT e.ename,e.sal,d.dname
FROM emp e,(SELECT deptno dno ,MIN(sal) min FROM emp WHERE job='MANAGER'
GROUP BY deptno) temp,dept d 
WHERE e.deptno=temp.dno AND e.job='MANAGER' AND e.sal=temp.min AND e.deptno=d.deptno  ;

SQL复杂查询(四)

17.4 统计部门的人数

SELECT e.ename,e.sal,d.dname,res.count
FROM emp e,(SELECT deptno dno ,MIN(sal) min FROM emp WHERE job='MANAGER'
GROUP BY deptno) temp,dept d ,(SELECT COUNT(empno) count,deptno dno FROM emp GROUP BY deptno) res
WHERE e.deptno=temp.dno AND e.job='MANAGER' AND e.sal=temp.min AND e.deptno=d.deptno AND res.dno=d.deptno;

SQL复杂查询(四)

18.列出所有员工的年工资,所在部门名称,按年薪从低到高排序

确定所需要的数据表:
emp表:年工资
dept表:部门名称

确定已知的关联字段:
emp.deptno = dept.deptno

SELECT e.ename,(NVL(e.sal,0)+NVL(e.comm,0))*12 salary,d.dname 
FROM emp e ,dept d 
WHERE e.deptno=d.deptno
ORDER BY salary desc;

SQL复杂查询(四)

19.查出某个员工的上级主管及所在的部门名称,并要求出这些主管中的薪水超过3000

确定所需要的数据表:
emp表:员工信息
emp表:上级主管,薪水
dpet表:部门名称

确定已知的关联字段:
emp1.mgr=emp2.empno
emp.deptno=dept.deptno

19.1 员工的上级主管以及所在部门名称

SELECT DISTINCT e.ename ,m.ename boss ,d.dname ,m.sal
FROM emp e,emp m ,dept d 
WHERE e.mgr=m.empno AND m.deptno=d.deptno AND m.sal>3000;

SQL复杂查询(四)

20.求出部门名称中,带“S”字符的部门员工的工资合计、部门人数

确定所需要的数据表:
dept表: 部门名称
emp表:部门人数,工资合计

确定已知的关联字段:
emp.deptno=dept.deptno;

SELECT d.dname ,COUNT(e.empno),SUM(e.sal)
FROM emp e ,dept d 
WHERE d.dname like '%S%'  
GROUP BY d.dname;

SQL复杂查询(四)

21.给任职日期超过30年或者再87年雇佣的雇员加薪,加薪原则:10部门在增长10%,20部门增长20%,30部门增长30%,依次类推

emp表:任职日期,部门

SELECT e.ename ,e.sal ,NVL(e.sal,0)*(1+NVL(e.deptno,0)/100) sals
FROM emp e 
WHERE MONTHS_BETWEEN(SYSDATE,hiredate)/12>30 OR TO_CHAR(e.hiredate,'yyyy')=87;

SQL复杂查询(四)

相关标签: sql 复杂查询