1. Función de agrupación
SUM, AVG, MAX, MIN, COUNT de uso común
* Ejercicio
1. Consulta el salario máximo y el salario mínimo *
SELECT MIN(SAL),MAX(SAL) FROM EMP
2. Consultar el salario medio, salario mínimo, salario máximo, salario y ** de todos los empleados del puesto VENDEDOR
SELECT AVG(SAL),MIN(SAL),MAX(SAL),SUM(SAL) FROM EMP
WHERE JOB = 'SALESMAN'
3. Consultar cuántos empleados hay en el departamento 30
SELECT COUNT(*) FROM EMP
WHERE DEPTNO = 30
4. Consultar el número de departamentos con empleados
SELECT COUNT(DISTINCT DEPTNO) FROM EMP
5. Consultar el salario medio y el salario máximo de todos los empleados cuyos puestos comienzan con VENTA
SELECT AVG(SAL),MAX(SAL) FROM EMP
WHERE JOB LIKE 'SALE%'
6. Consultar cuántos empleados del departamento 30 reciben bonificaciones
SELECT COUNT(DEPTNO) FROM EMP
WHERE DEPTNO = 30 AND COMM IS NOT NULL
SELECT COUNT(COMM) FROM EMP WHERE DEPTNO = 30
* Ejercicio
1. Consultar a los empleados del departamento 20, la suma y salario medio de cada mes *
SELECT SUM(SAL),AVG(SAL) FROM EMP WHERE DEPTNO = 20
2. Consultar el número de empleados que trabajan en CHICAGO, el salario máximo y el salario mínimo.
SELECT COUNT(EMPNO),MAX(SAL),MIN(SAL) FROM EMP,DEPT
WHERE LOC = 'CHICAGO' AND EMP.DEPTNO = DEPT.DEPTNO
3. Hay varios tipos de puestos en la tabla de empleados de la consulta
SELECT COUNT(DISTINCT JOB) FROM EMP
4. ¿Consulta el salario medio de cada departamento?
SELECT DEPTNO,AVG(SAL) FROM EMP
GROUP BY DEPTNO
5. Consultar el número, el salario medio y el nombre del empleado de cada departamento.
SELECT AVG(SAL),DEPTNO,ENAME FROM EMP
GROUP BY DEPTNO,ENAME
2. AGRUPAR POR grupos según condiciones especificadas
(Los elementos después de la instrucción SELECT, excepto la función de agrupación, deben incluirse en la cláusula GROUP BY)
3. Agrupar por varias columnas
Consultar el salario total de cada puesto en cada departamento
SELECT SUM(SAL) FROM EMP
GROUP BY DEPTNO,JOB
* Ejercicio
1. Consultar el número de departamento, nombre del departamento, número de departamentos, salario máximo, salario mínimo, suma de salarios, salario promedio de cada departamento *
SELECT DEPTNO,DNAME,COUNT(EMPNO),MAX(SAL),MIN(SAL),SUM(SAL),AVG(SAL) FROM EMP E,DEPT D
WHERE E.DEPTNO = D.DEPTNO
GROUP BY E.DEPTNO,DNAME
2. Consultar cada departamento, número de departamento, nombre del departamento, nombre del trabajo, número de departamentos, salario máximo, salario mínimo, suma de salarios, salario promedio de cada puesto
SELECT DEPTNO,DNAME,JOB,COUNT(EMPNO),MAX(SAL),MIN(SAL),SUM(SAL),AVG(SAL) FROM EMP E ,DEPT D
WHERE E.DEPTNO = D.DEPTNO
GROUP BY E.DEPTNO,DNAME,JOB
3. Consultar la cantidad de personas administradas por cada gerente, el número de gerente, el nombre del gerente y solicitar información sobre el personal sin gerente
SELECT COUNT(E.EMPNO),E.MGR 经理编号,M.ENAME 经理姓名 FROM EMP E,EMP M
WHERE E.MGR = M.EMPNO(+)
GROUP BY E.MGR,M.ENAME
4. Cláusula HAVING
1. Consultar el número de departamento con el salario más alto de cada departamento superior a 2900, el salario más alto
SELECT DEPTNO,MAX(SAL) FROM EMP HAVING MAX(SAL)>2900 GROUP BY DEPTNO
2. Consultar el número de departamento, el nombre del departamento y la cantidad de personas en cada departamento.
SELECT DEPTNO,DNAME,COUNT(EMPNO) FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
GROUP BU DEPT.DEPTNO,DNAME
3. Consultar el salario total y el puesto de cada puesto que no comienza con VENTA. El salario total es mayor a 5000 y ordenado en orden descendente por el salario total
SELECT SUM(SAL),JOB FROM EMP
WHERE JOB NOT LIKE 'SALE%'
HAVING SUM(SAL)>5000
GROUP BY JOB
ORDER BY SUM(SAL) DESC
4. Muestra el salario medio máximo (función de anidamiento)
SELECT MAX(AVG(SAL)) FROM EMP
GROUP BY DEPTNO
* Ejercicio
1. Consulte el número de departamento, el nombre del departamento y el número de departamento cuyo número de personas sea mayor que 2 *
SELECT EMP.DEPTNO,DNAME,COUNT(EMPNO) FROM EMP,DEPT
WHERE EMP.DEPTNO= DEPT.DEPTNO
HAVING COUNT(EMPNO)>2
GROUP BY EMP.DEPTNO,DNAME
2. Consultar el número de departamento, el nombre del departamento, la cantidad de personas, el salario promedio del departamento donde el salario promedio del departamento es mayor que 2000 y el número de personas es mayor que 2, y ordenarlos en orden ascendente por el número de departamentos
SELECT EMP.DEPTNO,DNAME,COUNT(EMPNO),AVG(SAL) FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
HAVING AVG(SAL)>2000 AND COUNT(EMPNO)>2
GROUP BY EMP.DEPTNO,DNAME
ORDER BY COUNT(EMPNO)
5. Subconsulta
1. Consultar información sobre empleados cuyo salario sea superior al de JONES
SELECT ENAME,EMPNO,SAL,JOB FROM EMP
WHERE SAL > (SELECT SAL FROM EMP WHERE ENAME= 'JONES')
2. Consultar el nombre del empleado con el salario más bajo
SELECCIONAR EL NOMBRE DE EMP DONDE SAL =
(SELECCIONAR MIN (SAL) DE EMP)
3. Muestre el nombre y el trabajo del empleado que realiza el mismo trabajo que el empleado 7369 y cuyo salario es mayor que el del empleado 7876
SELECT JOB,SAL,ENAME FROM EMP
WHERE JOB = (SELECT JOB FROM EMP WHERE EMPNO = 7369)
AND SAL>(SELECT SAL FROM EMP WHERE EMPNO = 7876)
4. Consultar el nombre, puesto y salario del empleado con el salario más bajo (la función de grupo se usa en la subconsulta)
SELECT ENAME,JOB,SAL FROM EMP
WHERE SAL =(SELECT MIN(SAL) FROM EMP)
5. Consultar el número de departamento y el salario mínimo cuyo salario mínimo es mayor que el salario mínimo del departamento No. 20 (las subconsultas se utilizan en la cláusula HAVING)
SELECT DEPTNO,MIN(SAL) FROM EMP
HAVING MIN(SAL)>(SELECT MIN(SAL) FROM EMP WHERE DEPTNO = 20)
GROUP BY DEPTNO
6. Consultar qué departamento tiene el número de empleados más alto que el número medio de departamentos.
SELECT COUNT(EMPNO),DEPTNO FROM EMP
GROUP BU DEPTNO
HAVING COUNT(EMPNO)>
(SELECT AVG(COUNT(EMPNO)) FROM EMP) GROUP BY DEPTNO)
* –Ejercicio
1. Consultar el nombre, salario, nombre del departamento de los empleados cuyo salario es superior al de SMITH y cuyo lugar de trabajo se encuentra en CHICAGO *
SELECT ENAME,SAL,DNAME FROM EMP
JOIN DEPT USING
2. Consultar el nombre y salario de los empleados cuyo salario sea superior al salario mínimo de 20 departamentos
SELECCT ENAME,SAL FROM EMP
WHERE SAL>(SELECT MIN(SAL) FROM EMP WHERE DEPTNO = 20)
3. Consultar el número de departamento, el nombre del departamento y el número de departamento cuyo número de personas sea mayor que el número promedio de todos los departamentos.
SELECT DEPT.DEPTNO,DNAME,COUNT(DEPT.EMPNO) FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
HAVING COUNT(DEPT.EMPNO)>(SELECT AVG(COUNT(EMPNO)) FROM EMP GROUP BY EMP.DEPTNO)
GROUP BY EMP.DEPTNO,DNAME
6. Subconsulta de varias líneas
EN CUALQUIER TODO
1. La consulta es el nombre y el salario del empleado del gerente
SELECT ENAME,SAL FROM EMP
WHERE EMPNO IN(SELECT DISTINCT MGR FROM EMP)
SELECT ENAME,SAL FROM EMP
WHERE EMPON = ANY(SELECT DISTINCT MGR FROM EMP)
<ANY和结果集中任意一个结果比较,小于最大值即可
>ANY和结果集中任意一个结果比较,大于最小值即可
=ANY和IN的作用一样
2. Consultar el número, nombre, cargo y salario del empleado cuyo número de departamento no sea 10 y cuyo salario sea superior al de cualquier empleado del departamento 10.
SELECT EMPNO,ENAME,JOB,SAL FROM EMP
WHERE SAL > ANY(SELECT SLA FROM EMP WHERE DEPTNO = 10)
AND DEPTNO <> 10
3. Consultar el número, nombre, puesto y salario de los empleados cuyo número de departamento no sea 10 y cuyo salario sea mayor que el de todos los empleados del departamento 10.
SELECT EMPNO,ENAME,JOB,SAL FROM EMP
WHERE SAL > ALL(SELECT SLA FROM EMP WHERE DEPTNO = 10)
AND DEPTNO <> 10
* Ejercicio 4
Consultar el nombre y puesto del empleado cuyo puesto es el mismo que el de cualquier empleado del departamento 10, excluidos los empleados del departamento 10 *
SELECT ENAME,JOB FROM EMP
WHERE JOB IN(SELECT JOB FROM EMP WHERE DEPTNO = 10)
AND DEPTNO <>10
7. Subconsulta de varias columnas
* Consulte el departamento y el puesto de cualquier empleado que se incorporó en 1981. El nombre, el departamento y el puesto del empleado son exactamente los mismos que los del empleado que se
incorporó en 1981 , excluidos los empleados que se incorporaron en 1981. *
SELECT ENAME,DEPTNO,JOB,HIREDATE FROM EMP
WHERE (DEPTNO,JOB) IN(SELECT DEPTNO,JOB FROM EMP
WHERE HIREDATE(1981))
8. Problema de valor nulo en la subconsulta
1. Consultar el nombre y la cantidad de empleados que no son gerentes
SELECT ENAME,EMPNO FROM EMP
WHERE EMPNI NOT IN(SELECT MGR FROM EMP)
WHERE MGR IS NULL
9. Utilice subconsultas en FROM
Consultar el nombre, salario, número de departamento y salario medio de los empleados cuyo salario medio es superior al de su propio departamento
// SELECT AVGSAL, DEPTNO FROM T_AVGSAL
SELECT A.ENAME,A.SAL,A.DEPTNO, B.AVGSAL FROM EMP A,
(SELECT AVG(SAL) AVGSAL FROM EMP
GROUP BY DEPTNO ) B
WHERE A.DEPTNO=B.DEPTNO AND A.SAL>B.AVGSAL
Consultar el nombre, el puesto, el nombre del departamento y el salario medio de los empleados cuyo salario medio es superior al de su propio puesto
SELECT ENAME,E.JOB,D.DNAME A.AVGSLA FROM EMP E,DEPT D ,
(SELECT JOB,AVG(SAL) AVGSAL FROM EMP GROUP BY JOB) A
WHERE E.DEPTNO= D.DEPTNO AND
E.JOB = A.JOB AND
E.SAL > A.AVGSAL
10. Tarea
1. Consultar el nombre y el salario medio del departamento cuyo salario medio supere los 2500 yuanes.
SELECT D.DNAME,AVG(SAL) FROM EMP E,DEPT D
WHERE E.DEPTNO = D.DEPTNO
GROUP BY D.DNAME
HAVING AVG(SAL)>2500
2. Consultar los puestos y salarios medios de los empleados que no empiecen con "SA" y cuyo salario medio sea superior a 2500 yuanes, y clasificarlos en orden descendente de salario medio.
SELECT JOB,AVG(SAL)
FROM EMP
WHERE JOB NOT LIKE 'SA%'
GROUP BY JOB
HAVING AVG(SAL)>2500
ORDER BY AVG(SAL) DESC
3. Consultar el nombre del departamento, el salario mínimo y el salario máximo del departamento con más de 2 personas y redondear los salarios al número entero más cercano.
SELECT DNAME,ROUND(MIN(SAL),0),ROUND(MAX(SAL),0)
FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
GROUP BY DNAME
HAVING COUNT(EMPNO)>2
4. El puesto de consulta no es VENDEDOR, la suma del salario es mayor o igual a 2500 y la suma del salario de cada puesto.
SELECT JOB,SUM(SAL)
FROM EMP
WHERE JOB<>'SALESMAN'
GROUP BY JOB
HAVING SUM(SAL)>=2500
5. Muestre el número de gerente y el nombre del gerente, el salario mínimo de los empleados administrados por este gerente, KING sin gerente también debe mostrarse, excluyendo el salario mínimo menor a 3000, ordenados por salario mínimo de mayor a menor.
SELECT M.EMPNO,MIN(E.SAL)
FROM EMP E
LEFT JOIN EMP M
ON E.MGR = M.EMPNO
GROUP BY M.EMPNO
HAVING MIN(E.SAL)>=3000
ORDER BY MIN(E.SAL) DESC
6. Escribe una consulta que muestre la diferencia entre el salario máximo y el salario mínimo en cada departamento.
SELECT MAX(SAL)-MIN(SAL)
FROM EMP
GROUP BY DEPTNO
7. Consultar puesto y director y cualquier puesto de empleado de 10 departamentos y el mismo nombre de empleado y puesto de director, excluidos los 10 empleados del departamento
SELECT MGR,JOB FROM EMP
WHERE (MGR,JOB) =ANY (
SELECT MGR,JOB FROM EMP WHERE DEPTNO=10)
AND DEPTNO<>10
8. Consultar el cargo y el nombre y cargo del gerente y cualquier empleado en los 10 departamentos o el mismo cargo del empleado, excluidos los empleados en los 10 departamentos.
SELECT JOB,MGR FROM EMP
WHERE (JOB IN(
SELECT JOB FROM EMP WHERE DEPTNO=10)
OR MGR IN(
SELECT MGR FROM EMP WHERE DEPTNO=10))
AND DEPTNO<>10
9. Consulta sobre el nombre y cargo del empleado cuyo cargo y gerente son exactamente los mismos que los de SCOTT o BLAKE, excluyendo a SCOOT y BLAKE.
SELECT E.ENAME,E.JOB FROM EMP E,
(SELECT JOB,MGR FROM EMP WHERE ENAME IN('SCOTT','BLAKE') ) B
WHERE E.JOB =B.JOB
AND E.MGR =B.MGR
AND E.ENAME NOT IN('SCOTT','BLAKE')
10. Consultar el nombre y salario del empleado con mayor salario.
SELECT ENAME,SAL FROM EMP WHERE SAL=
(SELECT MAX(SAL) FROM EMP)
2017.9.7