SQL多表查询

[sql] view plain copy
 
  1. --1,列出至少有一个雇员的所有部门  
  2. SELECT E.DEPTNO, COUNT(E.EMPNO)  
  3. FROM EMP E  
  4. WHERE E.EMPNO IS NOT NULL   
  5. GROUP BY E.DEPTNO  
  6. HAVING COUNT(E.EMPNO) > 0;  
  7.   
  8. --2,列出薪金比‘SMITH’多的所有雇员  
  9. SELECT *   
  10. FROM EMP E  
  11. WHERE E.SAL >   
  12. (  
  13.       SELECT P.SAL  
  14.       FROM EMP P  
  15.       WHERE P.ENAME = 'SMITH'  
  16. );  
  17.   
  18. --3,列出所有雇员的姓名及其上级的姓名  
  19. SELECT E.ENAME , P.ENAME  
  20. FROM EMP E, EMP P  
  21. WHERE E.MGR = P.EMPNO(+);  
  22.   
  23. --4,列出入职日期早于其直接上级的所有雇员  
  24. SELECT E.ENAME, P.ENAME  
  25. FROM EMP E, EMP P  
  26. WHERE E.MGR = P.EMPNO(+)  
  27. AND E.HIREDATE < P.HIREDATE;  
  28.   
  29. --5,列出部门名称和这些部门的雇员,同时列出那些  
  30. --没有雇员的部门  
  31. SELECT E.ENAME, D.DNAME   
  32. FROM EMP E, DEPT D  
  33. WHERE E.DEPTNO(+) = D.DEPTNO;  
  34.   
  35. --6,列出所有‘CLERK’(办事员)的姓名及其部门名称  
  36. SELECT E.ENAME, D.DNAME  
  37. FROM EMP E, DEPT D  
  38. WHERE E.DEPTNO = D.DEPTNO   
  39. AND E.JOB = 'CLERK';  
  40.   
  41. --7,列出各种岗位的最低薪金(?),并显示最低薪金  
  42. --大于1500所有工作岗位及其最低薪资  
  43. SELECT MIN(E.SAL), E.JOB  
  44. FROM EMP E  
  45. GROUP BY E.JOB   
  46. HAVING MIN(E.SAL) > 1500;  
  47.   
  48. --8,列出从事'SALES'(销售)工作的雇员的姓名,  
  49. --假定不知道销售部的部门编号。  
  50. SELECT E.ENAME,D.DEPTNO  
  51. FROM EMP E, DEPT D  
  52. WHERE E.DEPTNO = D.DEPTNO  
  53. AND E.JOB = 'SALESMAN';  
  54.   
  55. --9,列出薪金高于公司平均的所有雇员  
  56. SELECT E.ENAME  
  57. FROM EMP E  
  58. WHERE E.SAL >   
  59. (  
  60.       SELECT AVG(P.SAL)  
  61.       FROM EMP P  
  62. );  
  63.   
  64. --10,列出与'SCOTT'从事相同工作的所有雇员  
  65. SELECT E.NAME   
  66. FROM EMP E  
  67. WHERE E.ENAME != 'SCOTT'  
  68. AND E.JOB =   
  69. (  
  70.     SELECT P.JOB  
  71.     FROM EMP P  
  72.     WHERE P.ENAME = 'SCOTT'  
  73. );  
  74.   
  75. --11,列出薪金等于在部门30工作的所有雇员的  
  76. --薪金的雇员的姓名和薪金。  
  77. SELECT E.ENAME, E.SAL  
  78. FROM EMP E  
  79. WHERE E.SAL = ANY  
  80. (  
  81.     SELECT P.SAL   
  82.     FROM EMP P  
  83.     WHERE P.DEPTNO = 30   
  84. );  
  85.   
  86. --12,列出薪金高于在部门30工作的所有雇员的薪金  
  87. --的雇员的姓名和薪金  
  88. SELECT E.ENAME, E.SAL  
  89. FROM EMP E  
  90. WHERE E.SAL > ALL  
  91. (  
  92.       SELECT P.SAL   
  93.       FROM EMP P  
  94.       WHERE P.DEPTNO = 30  
  95. );  
  96.   
  97. --13,列出每个部门工作的雇员的数量以及其它信息  
  98. SELECT D.DEPTNO, D.DNAME, D.LOC, COUNT(E.EMPNO)  
  99. FROM EMP E, DEPT D  
  100. WHERE E.DEPTNO(+) = D.DEPTNO   
  101. GROUP BY D.DEPTNO, D.DNAME, D.LOC;  
  102.   
  103. --14,列出所有雇员的雇员名称、部门名称和薪金  
  104. SELECT E.ENAME, D.DNAME, E.SAL  
  105. FROM EMP E, DEPT D  
  106. WHERE E.DEPTNO = D.DEPTNO(+);  
  107.   
  108. --15,列出从事同一种工作但属于不同部门  
  109. --雇员的不同组合  
  110. SELECT DISTINCT E.EMPNO, E.ENAME, E.JOB, E.DEPTNO  
  111. FROM EMP E,  
  112. (  
  113.      SELECT P.JOB, P.DEPTNO  
  114.      FROM EMP P  
  115.      GROUP BY P.JOB, P.DEPTNO  
  116. ) M  
  117. WHERE E.DEPTNO != M.DEPTNO  
  118. AND E.JOB = M.JOB;  
  119.   
  120. --16,列出分配有雇员数量的所有部门的详细信息  
  121. --即使是分配有0个雇员  
  122. SELECT COUNT(E.EMPNO), D.DEPTNO, D.DNAME, D.LOC  
  123. FROM EMP E, DEPT D  
  124. WHERE E.DEPTNO(+) = D.DEPTNO  
  125. GROUP BY D.DEPTNO, D.DNAME, D.LOC;  
  126.   
  127. --17,列出各种类别工作的最低工资  
  128. SELECT MIN(E.SAL)  
  129. FROM EMP E  
  130. GROUP BY E.JOB;  
  131.   
  132. --18,列出各种部门的MANAGER(经理)的最低薪金  
  133. SELECT E.DEPTNO, MIN(E.SAL)  
  134. FROM EMP E  
  135. WHERE E.JOB = 'MANAGER'  
  136. GROUP BY E.DEPTNO;  
  137.   
  138. --19,列出按计算的字段排序的所有雇员的年薪  
  139.   
  140. SELECT E.ENAME,  
  141. (E.SAL + NVL(E.COMM,0))*12 SALBYYEAR  
  142. FROM EMP E  
  143. ORDER BY SALBYYEAR;  
原文地址:https://www.cnblogs.com/guanghe/p/6054101.html