1. #取得每个部门最高薪水的人员名称
    2. select e.ENAME,t.* from EMP e
    3. JOIN
    4. (select DEPTNO,MAX(SAL) as maxsal from EMP GROUP BY DEPTNO) t
    5. ON e.DEPTNO=t.DEPTNO and e.SAL = t.maxsal;
    6. select DEPTNO,AVG(SAL) from EMP GROUP BY DEPTNO;
    7. #哪些人的薪水在部门的平均薪水之上
    8. select e.ENAME,e.SAL from EMP e
    9. JOIN
    10. (select DEPTNO,AVG(SAL) as avgsal from EMP GROUP BY DEPTNO) t
    11. ON e.DEPTNO=t.DEPTNO AND e.SAL > t.avgsal;
    12. #取得部门中(所有人的)平均的薪水等级
    13. select e.DEPTNO, avg(s.GRADE) from EMP e
    14. JOIN
    15. SALGRADE s
    16. ON e.SAL BETWEEN s.LOSAL and s.HISAL
    17. GROUP BY e.DEPTNO
    18. #不准用组函数(Max),取得最高薪水。至少给出两种解决方案。
    19. #第一种以降序方式,limit 1
    20. select SAL as maxsal from EMP ORDER BY SAL desc limit 1
    21. #表的自连接
    22. select SAL as maxsal from EMP where SAL not in(
    23. select DISTINCT a.SAL
    24. from
    25. EMP a
    26. JOIN
    27. EMP b
    28. on a.SAL < b.SAL
    29. )
    30. #取得平均薪水最高的部门的部门编号
    31. #第一种方案:降序取第一个。
    32. ## 第一步:找出每个部门的平均薪水
    33. select DEPTNO,AVG(sal) as avgsal from EMP group by DEPTNO;
    34. ## 第二步:降序选择第一个。
    35. select DEPTNO, AVG(SAL) as avgsal from EMP GROUP BY DEPTNO ORDER BY avgsal desc limit 1;
    36. ## 第二种方案:max
    37. select max(t.avgsal) from (select DEPTNO ,avg(SAL) as avgsal from EMP GROUP BY DEPTNO ) t;
    38. select DEPTNO,avg(sal) as avgsal from EMP GROUP BY DEPTNO HAVING avgsal=(select max(t.avgsal) from (select DEPTNO ,avg(SAL) as avgsal from EMP GROUP BY DEPTNO ) t)
    39. #取得平均薪水最高的部门的部门名称
    40. select DNAME from DEPT as d
    41. JOIN
    42. (select DEPTNO,AVG(sal) as avgsal from EMP group by DEPTNO ORDER BY avgsal desc limit 1) t
    43. ON d.DEPTNO=t.DEPTNO;
    44. #求平均薪水的等级最低的部门的部门名称
    45. #第一步:按照部门名称分组,找出每个部门的平均薪水。
    46. select avg(SAL) from EMP GROUP BY
    47. #9、取得薪水最高的前五名员工
    48. select ename,sal from EMP ORDER BY SAL DESC LIMIT 0, 5;
    49. #取得薪水最高的第六到第十名员工
    50. select ename,sal from EMP ORDER BY SAL DESC LIMIT 5,5;
    51. #11、取得最后入职的5名员工
    52. select ename,hiredate from EMP ORDER BY hiredate DESC LIMIT 5 ;
    53. #12、取得每个薪水等级有多少员工
    54. select
    55. s.GRADE,count(*)
    56. from
    57. EMP e
    58. join
    59. SALGRADE s
    60. on
    61. e.SAL between s.LOSAL and s.HISAL
    62. GROUP BY s.GRADE
    63. #14、列出所有员工及领导的姓名
    64. select a.ENAME as '员工', b.ENAME as '领导'
    65. from
    66. EMP a
    67. left join
    68. EMP b
    69. on
    70. a.MGR=b.EMPNO;
    71. #15、列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称
    72. select
    73. e.EMPNO,e.ENAME,d.DNAME
    74. from
    75. EMP e
    76. join
    77. EMP b
    78. on
    79. e.MGR = b.EMPNO
    80. join
    81. DEPT d
    82. on e.DEPTNO =d.DEPTNO
    83. where e.HIREDATE < b.HIREDATE
    84. #16、列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门.
    85. select
    86. d.DNAME,e.*
    87. from
    88. EMP e
    89. right JOIN
    90. DEPT d
    91. on
    92. e.DEPTNO=d.DEPTNO
    93. #17、列出至少有5个员工的所有部门
    94. select
    95. d.DNAME,count(*)
    96. from
    97. EMP e
    98. JOIN
    99. DEPT d
    100. on e.DEPTNO = d.DEPTNO
    101. GROUP BY e.DEPTNO
    102. HAVING count(*)>=5
    103. #18、列出薪金比"SMITH"多的所有员工信息.
    104. select * from EMP where SAL > (select SAL from EMP where ENAME = 'SMITH')
    105. #19、列出所有"CLERK"(办事员)的姓名及其部门名称,部门的人数.
    106. #查询部门人手
    107. select DEPTNO, count(*) as deptcount from EMP GROUP BY DEPTNO;
    108. #列出所有"CLERK"(办事员)的姓名及其部门名称
    109. select
    110. e.ENAME,d.DNAME,d.DEPTNO
    111. from
    112. EMP e
    113. JOIN
    114. DEPT d
    115. on e.DEPTNO = d.DEPTNO
    116. where
    117. e.JOB = 'CLERK';
    118. #组合查询
    119. select
    120. t1.*,t2.deptcount
    121. from
    122. (select
    123. e.ENAME,d.DNAME,d.DEPTNO
    124. from
    125. EMP e
    126. JOIN
    127. DEPT d
    128. on e.DEPTNO = d.DEPTNO
    129. where
    130. e.JOB = 'CLERK') t1
    131. JOIN
    132. (select DEPTNO, count(*) as deptcount from EMP GROUP BY DEPTNO) t2
    133. on
    134. t1.DEPTNO=t2.DEPTNO
    135. #20、列出最低薪金大于1500的各种工作及从事此工作的全部雇员人数.
    136. select JOB,count(*) from EMP GROUP BY JOB HAVING MIN(sal) >1500
    137. #21、列出在部门"SALES"<销售部>工作的员工的姓名,假定不知道销售部的部门编号.
    138. select
    139. e.ENAME
    140. from
    141. EMP e
    142. JOIN
    143. (select DEPTNO from DEPT where DNAME='SALES' ) t
    144. on
    145. e.DEPTNO= t.DEPTNO
    146. #22、列出薪金高于公司平均薪金的所有员工,所在部门,上级领导,雇员的工资等级.
    147. #平均工资
    148. select avg(SAL) from EMP
    149. select
    150. e.ENAME as '姓名',
    151. d.DNAME as '部门名称',
    152. b.ENAME as '上级领导',
    153. s.GRADE as '工资等级'
    154. from
    155. EMP e
    156. JOIN
    157. DEPT d
    158. on
    159. e.DEPTNO = d.DEPTNO
    160. left JOIN
    161. EMP b
    162. on
    163. e.MGR = b.EMPNO
    164. JOIN
    165. SALGRADE s
    166. on
    167. e.SAL BETWEEN s.LOSAL AND s.HISAL
    168. where
    169. e.SAL >(select avg(SAL) from EMP);
    170. #23、列出与"SCOTT"从事相同工作的所有员工及部门名称.
    171. select
    172. EMP.ENAME,DEPT.DNAME
    173. from
    174. EMP,DEPT
    175. WHERE
    176. JOB=(select JOB from EMP where ENAME = 'SCOTT') and ENAME != 'SCOTT' and EMP.DEPTNO = DEPT.DEPTNO
    177. #24、列出薪金等于部门30中员工的薪金的其他员工的姓名和薪金.
    178. select
    179. e.ENAME,e.SAL
    180. from
    181. EMP e
    182. where
    183. e.SAL in (select DISTINCT SAL from EMP where DEPTNO=30) and e.DEPTNO <> 30;
    184. #25、列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金.部门名称.
    185. select DISTINCT SAL from EMP where DEPTNO=30;
    186. select
    187. e.ENAME,e.SAL,d.DNAME
    188. from
    189. EMP e
    190. JOIN
    191. DEPT d
    192. on
    193. e.DEPTNO = d.DEPTNO
    194. where
    195. e.SAL > (select max(SAL) from EMP where DEPTNO=30 ) and e.DEPTNO <> 30;
    196. #26、列出在每个部门工作的员工数量,平均工资和平均服务期限.
    197. #mysql当中怎么计算两个日期的“年差”,查了多少年?
    198. #TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
    199. #间隔类型 second 秒 MINUTE 分钟 HOUR 小时 DAY 天 WEEK 星期 MONTH 月 QUARTER季度 YEAR 年
    200. select
    201. count(e.ENAME) as '员工数量',
    202. IFNULL(avg(e.SAL),0) as '平均工资',
    203. IFNULL(avg(TIMESTAMPDIFF(YEAR,e.HIREDATE,NOW())),0) as '平均服务期限'
    204. from
    205. EMP e
    206. right JOIN
    207. DEPT d
    208. on
    209. e.DEPTNO = d.DEPTNO
    210. GROUP BY
    211. d.DEPTNO
    212. #27、列出所有员工的姓名、部门名称和工资。
    213. select
    214. e.ENAME,d.DNAME,e.SAL
    215. from
    216. EMP e
    217. join
    218. DEPT d
    219. on e.DEPTNO = d.DEPTNO;
    220. #28、列出所有部门的详细信息和人数
    221. select
    222. d.*,count(e.ENAME)
    223. from
    224. EMP e
    225. right JOIN
    226. DEPT d
    227. on
    228. e.DEPTNO = d.DEPTNO
    229. GROUP BY DEPTNO
    230. #29、列出各种工作的最低工资及从事此工作的雇员姓名
    231. select
    232. ENAME,
    233. SAL
    234. from
    235. EMP
    236. where sal in (select
    237. min(SAL)
    238. from
    239. EMP
    240. GROUP BY
    241. JOB)
    242. #30、列出各个部门的MANAGER(领导)的最低薪金
    243. select DISTINCT MGR from EMP GROUP BY MGR