#查询各个部门的名称及其部门下职员的名称
SELECT dept.DNAME,emp.ENAME FROM dept JOIN emp ON dept.DEPTNO=emp.DEPTNO
#查询部门20的名称及其部门下职位名称与人数
SELECT dept.DNAME,emp.JOB,COUNT(*) FROM dept JOIN emp ON dept.DEPTNO=emp.DEPTNO WHERE dept.DEPTNO=20 GROUP BY emp.JOB
#查询各个部门名称及部门下最高工资 并按部门编号升序排列
SELECT dept.DEPTNO,dept.DNAME,MAX(SAL) FROM dept JOIN emp ON dept.DEPTNO=emp.DEPTNO GROUP BY dept.DEPTNO,dept.DNAME ORDER BY dept.DEPTNO ASC
#查询各个部门名称以及clerk人员的人数
SELECT dept.DNAME,COUNT(*) FROM dept JOIN emp ON dept.DEPTNO=emp.DEPTNO WHERE emp.JOB='clerk' GROUP BY dept.DNAME
#查询各个部门及其部门下的人数 仅显示5人以上的部门 根据部门人数进行降序
SELECT dept.DNAME,COUNT(*) FROM dept JOIN emp ON dept.DEPTNO=emp.DEPTNO GROUP BY dept.DNAME HAVING COUNT(*)>=5 ORDER BY COUNT(*) DESC #此处不是调用聚合函数 是select生成临时表字段名 ORDER BY使用排序的字段只能来自select生成的临时表
#查询所有员工的姓名 工资 工资等级
SELECT emp.ENAME,emp.SAL,salgrade.grade
FROM salgrade JOIN emp
ON emp.SAL BETWEEN salgrade.losal AND salgrade.hisal
#查询部门20的名称及其部门下职位名称与人数
SELECT dept.DNAME,emp.JOB,COUNT(*)
FROM dept JOIN emp
ON dept.DEPTNO=emp.DEPTNO
WHERE dept.DEPTNO=20
GROUP BY emp.JOB
#查询各个部门名称及其部门下最高工资
SELECT dept.DEPTNO,dept.DNAME,MAX(SAL)
FROM dept JOIN emp
ON dept.DEPTNO=emp.DEPTNO
GROUP BY dept.DEPTNO,dept.DNAME #一定要注意这里 除了count其他select都需要先group by
ORDER BY 1 ASC
#查询各个部门名称下clerk的人数
SELECT dept.DNAME,COUNT(*)
FROM dept JOIN emp
ON dept.DEPTNO=emp.DEPTNO
WHERE emp.JOB='clerk'
GROUP BY dept.DNAME
ORDER BY 2 DESC
#查询各个部门的名称及其部门下的人数【无论部门是否有人都要展示出来(部门40没有人)】 使用外链接!
SELECT dept.DEPTNO,COUNT(emp.EMPNO)
FROM dept LEFT JOIN emp
ON dept.DEPTNO=emp.DEPTNO
GROUP BY dept.DEPTNO
ORDER BY 1 ASC
#将部门名称 部门名称 职员编号 职员名称展示出来
SELECT DEPTNO,DNAME FROM dept
UNION
SELECT EMPNO,ENAME FROM emp
#工资高于平均工资的职员信息以及公司的平均工资 子查询
SELECT *,(SELECT avg(SAL) FROM emp)
FROM emp
WHERE sal>(SELECT avg(SAL) FROM emp)
#子查询生成临时表交给FROM定位
SELECT t1.DEPTNO,t1.DNAME
FROM(
SELECT dept.DEPTNO,dept.DNAME,emp.ENAME,emp.JOB,emp.SAL
FROM dept LEFT JOIN emp
ON dept.DEPTNO=emp.DEPTNO
)AS t1
#查询部门平均工资高于公司平均工资的部门名称
SELECT DEPTNO,AVG(SAL)
FROM emp
GROUP BY DEPTNO
HAVING AVG(SAL)>(SELECT AVG(SAL) FROM emp)