Conceptos básicos breves de la base de datos de entrenamiento (2)

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 > ANYSELECT SLA FROM EMP WHERE DEPTNO = 10AND 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 > ALLSELECT SLA FROM EMP WHERE DEPTNO = 10AND 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

Supongo que te gusta

Origin blog.csdn.net/geekerstar/article/details/77885790
Recomendado
Clasificación