Capitulo 5 SQL Versión 1

17
1 Matilde Gómez Ojeda Contenido 1. CAPÍTULO 6. CLÁUSULAS AVANZADAS DE SELECCIÓN.......................................................... 2 1.1 TABLAS UTILZADAS EN LOS EJEMPLOS.......................................................................... 2 1.2 EJEMPLOS SQL CAPÍTULO 4 ........................................................................................... 5 EJEMPLO 1 ............................................................................................................................. 5 EJEMPLO 2 ............................................................................................................................. 5 EJEMPLO 3 ............................................................................................................................. 7 EJEMPLO 4 ............................................................................................................................. 8 EJEMPLO 5 ............................................................................................................................. 8 EJEMPLO 6 ........................................................................................................................... 11 EJEMPLO 7 ........................................................................................................................... 11 EJEMPLO 8 ........................................................................................................................... 11 EJEMPLO 9 ........................................................................................................................... 11 EJEMPLO 10 ......................................................................................................................... 12 EJEMPLO 11 ......................................................................................................................... 12 EJEMPLO 12 ......................................................................................................................... 13 1.3 ACTIVIDADES COMPLEMENTARIAS LIBRO (CAPÍTULO 4 PAG. 155) ............................ 13 ACTIVIDAD 1 ........................................................................................................................ 13 ACTIVIDAD 2 ........................................................................................................................ 14 ACTIVIDAD 3 ........................................................................................................................ 14 ACTIVIDAD 4 ........................................................................................................................ 14 ACTIVIDAD 5 ........................................................................................................................ 15 ACTIVIDAD 6 ........................................................................................................................ 15 ACTIVIDAD 7 ........................................................................................................................ 15 ACTIVIDAD 8 ........................................................................................................................ 15 ACTIVIDAD 9 ........................................................................................................................ 15 ACTIVIDAD 10 ...................................................................................................................... 15 ACTIVIDAD 11 ...................................................................................................................... 16 ACTIVIDAD 12 ...................................................................................................................... 16 ACTIVIDAD 13 ...................................................................................................................... 16 ACTIVIDAD 14 ...................................................................................................................... 16 ACTIVIDAD 15 ...................................................................................................................... 16 ACTIVIDAD 16 ...................................................................................................................... 16

description

sql

Transcript of Capitulo 5 SQL Versión 1

Page 1: Capitulo 5 SQL Versión 1

1 Matilde Gómez Ojeda

Contenido 1. CAPÍTULO 6. CLÁUSULAS AVANZADAS DE SELECCIÓN .......................................................... 2

1.1 TABLAS UTILZADAS EN LOS EJEMPLOS.......................................................................... 2

1.2 EJEMPLOS SQL CAPÍTULO 4 ........................................................................................... 5

EJEMPLO 1 ............................................................................................................................. 5

EJEMPLO 2 ............................................................................................................................. 5

EJEMPLO 3 ............................................................................................................................. 7

EJEMPLO 4 ............................................................................................................................. 8

EJEMPLO 5 ............................................................................................................................. 8

EJEMPLO 6 ........................................................................................................................... 11

EJEMPLO 7 ........................................................................................................................... 11

EJEMPLO 8 ........................................................................................................................... 11

EJEMPLO 9 ........................................................................................................................... 11

EJEMPLO 10 ......................................................................................................................... 12

EJEMPLO 11 ......................................................................................................................... 12

EJEMPLO 12 ......................................................................................................................... 13

1.3 ACTIVIDADES COMPLEMENTARIAS LIBRO (CAPÍTULO 4 PAG. 155) ............................ 13

ACTIVIDAD 1 ........................................................................................................................ 13

ACTIVIDAD 2 ........................................................................................................................ 14

ACTIVIDAD 3 ........................................................................................................................ 14

ACTIVIDAD 4 ........................................................................................................................ 14

ACTIVIDAD 5 ........................................................................................................................ 15

ACTIVIDAD 6 ........................................................................................................................ 15

ACTIVIDAD 7 ........................................................................................................................ 15

ACTIVIDAD 8 ........................................................................................................................ 15

ACTIVIDAD 9 ........................................................................................................................ 15

ACTIVIDAD 10 ...................................................................................................................... 15

ACTIVIDAD 11 ...................................................................................................................... 16

ACTIVIDAD 12 ...................................................................................................................... 16

ACTIVIDAD 13 ...................................................................................................................... 16

ACTIVIDAD 14 ...................................................................................................................... 16

ACTIVIDAD 15 ...................................................................................................................... 16

ACTIVIDAD 16 ...................................................................................................................... 16

Page 2: Capitulo 5 SQL Versión 1

2 Matilde Gómez Ojeda

1. CAPÍTULO 6. CLÁUSULAS AVANZADAS DE SELECCIÓN

1.1 TABLAS UTILZADAS EN LOS EJEMPLOS

Page 3: Capitulo 5 SQL Versión 1

3 Matilde Gómez Ojeda

Page 4: Capitulo 5 SQL Versión 1

4 Matilde Gómez Ojeda

Page 5: Capitulo 5 SQL Versión 1

5 Matilde Gómez Ojeda

1.2 EJEMPLOS SQL CAPÍTULO 4

EJEMPLO 1

Visualizar los departamentos en los que el salario medio es mayor o igual que la media de

todos los salarios.

SELECT DEPT_NO, AVG(SALARIO)

FROM EMPLE

GROUP BY DEPT_NO

HAVING AVG(SALARIO)>=(SELECT AVG(SALARIO) FROM EMPLE);

EJEMPLO 2

A1)

Obtén los nombres de departamentos que tengan más de 4 personas trabajando.

SELECT DNOMBRE "Nombre departamentos"

FROM DEPART

WHERE DEPT_NO IN(

SELECT DEPT_NO

FROM EMPLE

GROUP BY DEPT_NO

HAVING COUNT(*)>4);

(Poniendo también el número de departamento)

SELECT DEPT_NO "Numero de departamento" ,DNOMBRE "Nombre departamentos"

FROM DEPART

WHERE DEPT_NO IN(

SELECT DEPT_NO

FROM EMPLE

GROUP BY DEPT_NO

HAVING COUNT(*)>4);

Page 6: Capitulo 5 SQL Versión 1

6 Matilde Gómez Ojeda

A2)

Obtén los nombres de departamentos que tengan más de 4 personas trabajando y número de

empleados.

FORMA 1:

SELECT EMPLE.DEPT_NO,DNOMBRE,COUNT(*)

FROM EMPLE,DEPART

WHERE EMPLE.DEPT_NO=DEPART.DEPT_NO

GROUP BY EMPLE.DEPT_NO,DNOMBRE

HAVING COUNT(*)>4;

FORMA 2:

SELECT E.DEPT_NO,DNOMBRE,COUNT(*)

FROM EMPLE E,DEPART D

WHERE E.DEPT_NO=D.DEPT_NO

GROUP BY E.DEPT_NO,DNOMBRE

HAVING COUNT(*)>4;

B)

Visualiza el número de departamento, el nombre de departamento y el número de empleados

del departamento con más empleados.

SELECT EMPLE.DEPT_NO,DNOMBRE,COUNT(*)

FROM EMPLE,DEPART

WHERE EMPLE.DEPT_NO=DEPART.DEPT_NO

GROUP BY EMPLE.DEPT_NO,DNOMBRE

HAVING COUNT(*)=(SELECT MAX(COUNT(*)) FROM EMPLE GROUP BY DEPT_NO);

Page 7: Capitulo 5 SQL Versión 1

7 Matilde Gómez Ojeda

EJEMPLO 3

Sentencia Ejemplo de Combinación externa (OUTER JOIN):

SELECT D.DEPT_NO,DNOMBRE,COUNT(E.EMP_NO)

FROM EMPLE E, DEPART D

WHERE E.DEPT_NO(+)=D.DEPT_NO

GROUP BY D.DEPT_NO, DNOMBRE;

A)

Analiza lo que ocurre si en lugar de COUNT(E.EMP_NO) ponemos COUNT(*) en la sentencia

SELECT anterior.

SELECT D.DEPT_NO,DNOMBRE,COUNT(*)

FROM EMPLE E, DEPART D

WHERE E.DEPT_NO(+)=D.DEPT_NO

GROUP BY D.DEPT_NO, DNOMBRE;

Da un 1 en la fila del Dept. 40 porque interpretamos que como aparece una vez la fila hay 1

empleado, esto es debido a usar COUNT(*).

B)

Analiza también lo que ocurre si a la derecha de SELECT podemos E.DEPT_NO en un lugar de

D.DEPT_NO.

SELECT E.DEPT_NO,DNOMBRE,COUNT(*)

FROM EMPLE E, DEPART D

WHERE E.DEPT_NO(+)=D.DEPT_NO

GROUP BY D.DEPT_NO, DNOMBRE;

Se corrige la parte del GROUP BY con E.DEPT_NO también y da:

SELECT E.DEPT_NO,DNOMBRE,COUNT(*)

FROM EMPLE E, DEPART D

WHERE E.DEPT_NO(+)=D.DEPT_NO

GROUP BY E.DEPT_NO, DNOMBRE;

Page 8: Capitulo 5 SQL Versión 1

8 Matilde Gómez Ojeda

EJEMPLO 4

Esta consulta también se puede hacer usando el operador IN. Escribe la consulta anterior

utilizando el operador IN.

EJEMPLO 5

A)

Visualizar los nombres de los alumnos de la tabla ALUM que aparezcan en alguna de estas

tablas: NUEVOS y ANTIGUOS o ALUM intersección (NUEVOS unión ANTIGUOS) o (ALUM

intersección ANTIGUOS) unión (ALUM intersección ANTIGUOS).

OR = unión = UNION AND=intersección=INTERSEC=IN

B)

Escribir las distintas formas en que se puede poner la consulta anterior llegando al mismo

resultado.

1ª FORMA DE HACERLO:

ALUM intersección (NUEVOS unión ANTIGUOS)

SELECT NOMBRE

FROM ALUM

WHERE NOMBRE IN(SELECT NOMBRE FROM NUEVOS

UNION

SELECT NOMBRE FROM ANTIGUOS);

2ª FORMA DE HACERLO:

(ALUM intersección ANTIGUOS) unión (ALUM intersección ANTIGUOS)

SELECT NOMBRE

FROM ALUM

WHERE NOMBRE

IN(SELECT NOMBRE FROM NUEVOS)

Page 9: Capitulo 5 SQL Versión 1

9 Matilde Gómez Ojeda

OR NOMBRE

IN (SELECT NOMBRE FROM ANTIGUOS);

3ª FORMA DE HACERLO: (SIMILAR A LA PRIMERA)

ALUM intersección (NUEVOS unión ANTIGUOS)

SELECT NOMBRE

FROM ALUM

INTERSECT(SELECT NOMBRE FROM NUEVOS

UNION

SELECT NOMBRE FROM ANTIGUOS);

C)

Visualizar los nombres de los alumnos de la tabla ALUM que aparezcan en las dos tablas:

NUEVOS y ANTIGUOS. O ALUM intersección(NUEVOS intersección ANTIGUOS)

1ª FORMA DE HACERLO:

SELECT NOMBRE

FROM ALUM

WHERE NOMBRE IN (SELECT NOMBRE FROM NUEVOS

INTERSECT

SELECT NOMBRE FROM ANTIGUOS);

2ª FORMA DE HACERLO:

SELECT NOMBRE

FROM ALUM

INTERSECT (SELECT NOMBRE FROM NUEVOS

INTERSECT

SELECT NOMBRE FROM ANTIGUOS);

Page 10: Capitulo 5 SQL Versión 1

10 Matilde Gómez Ojeda

3ª FORMA DE HACERLO:

SELECT NOMBRE

FROM ALUM

INTERSECT (SELECT NOMBRE FROM NUEVOS

WHERE NOMBRE IN (SELECT NOMBRE FROM ANTIGUOS));

D)

Visualizar los nombres de los alumnos de la tabla ALUM que no aparezcan en las tablas

NUEVOS y ANTIGUOS. O lo que es lo mismo ALUM – (NUEVOS unión ANTIGUOS).

-=NOT IN = MINUS

1ª FORMA DE HACERLO:

SELECT NOMBRE

FROM ALUM

WHERE NOMBRE NOT IN (SELECT NOMBRE FROM NUEVOS

UNION

SELECT NOMBRE FROM ANTIGUOS);

2ª FORMA DE HACERLO:

SELECT NOMBRE

FROM ALUM

MINUS (SELECT NOMBRE FROM NUEVOS

UNION

SELECT NOMBRE FROM ANTIGUOS);

Page 11: Capitulo 5 SQL Versión 1

11 Matilde Gómez Ojeda

EJEMPLO 6

A partir de la tabla EMPLE, visualizar el número de vendedores del departamento ‘VENTAS’.

SELECT DEPT_NO "Dpto. VENTAS",COUNT(*) "Empleados"

FROM EMPLE

WHERE DEPT_NO=(SELECT DEPT_NO FROM DEPART WHERE DNOMBRE='VENTAS')

GROUP BY DEPT_NO;

EJEMPLO 7

Dada tabla LIBRERÍA, visualizar por cada estante la suma de los ejemplares.

SELECT ESTANTE,SUM(EJEMPLARES) "Suma Ejemplares"

FROM LIBRERIA

GROUP BY ESTANTE;

EJEMPLO 8

Visualizar el estante con más ejemplares de la tabla LIBRERIA.

SELECT ESTANTE,SUM(EJEMPLARES) "Suma Ejemplares"

FROM LIBRERIA

GROUP BY ESTANTE

HAVING SUM (EJEMPLARES) = (SELECT MAX(SUM(EJEMPLARES))

FROM LIBRERIA

GROUP BY ESTANTE);

EJEMPLO 9

En la tabla PERSONAL, obtener por cada función el número de trabajadores.

SELECT FUNCION,COUNT(*)"Numero Trabajadores"

FROM PERSONAL

GROUP BY FUNCION;

Page 12: Capitulo 5 SQL Versión 1

12 Matilde Gómez Ojeda

EJEMPLO 10

Visualizar los diferentes estantes de la tabla LIBRERÍA ordenados descendentemente por

estante.

SELECT ESTANTE

FROM LIBRERIA

GROUP BY ESTANTE

ORDER BY ESTANTE DESC;

Otra forma de hacerlo que da el mismo resultado:

SELECT DISTINCT ESTANTE

FROM LIBRERIA

ORDER BY ESTANTE DESC;

EJEMPLO 11

Averiguar cuántos temas tiene cada estante de la tabla LIBRERÍA.

SELECT ESTANTE,COUNT(*) "Numero temas"

FROM LIBRERIA

GROUP BY ESTANTE;

Page 13: Capitulo 5 SQL Versión 1

13 Matilde Gómez Ojeda

EJEMPLO 12

Visualizar los estantes que tengan tres temas en la tabla LIBRERÍA.

SELECT ESTANTE,COUNT(*) "Numero temas"

FROM LIBRERIA

GROUP BY ESTANTE

HAVING COUNT(*)=3;

1.3 ACTIVIDADES COMPLEMENTARIAS LIBRO (CAPÍTULO 4 PAG. 155)

Tablas EMPLE Y DEPART

ACTIVIDAD 1

1. Partiendo de la tabla EMPLE, visualiza por cada oficio de los empleados del

departamento 'VENTAS' la suma de salarios.

Empleados del departamento de ventas:

SELECT *

FROM EMPLE

WHERE DEPT_NO = (SELECT DEPT_NO FROM DEPART WHERE DNOMBRE = 'VENTAS');

Todo:

SELECT DEPT_NO, OFICIO, SUM(SALARIO) "Suma salarios"

FROM EMPLE

WHERE DEPT_NO = (SELECT DEPT_NO FROM DEPART WHERE DNOMBRE = 'VENTAS')

Page 14: Capitulo 5 SQL Versión 1

14 Matilde Gómez Ojeda

GROUP BY DEPT_NO,OFICIO

ORDER BY SUM (SALARIO);

ACTIVIDAD 2

2. Selecciona aquellos apellidos de la tabla EMPLE cuyo salario sea igual a la media del

salario en su departamento.

SELECT *

FROM EMPLE E1

WHERE SALARIO = (SELECT AVG(SALARIO)

FROM EMPLE E2

WHERE E1.DEPT_NO = E2.DEPT_NO

GROUP BY DEPT_NO);

ACTIVIDAD 3

3. A partir de la tabla EMPLE, visualiza el número de empleados de cada departamento

cuyo oficio sea 'EMPLEADO'.

SELECT DEPT_NO "Departamento" ,COUNT(*) "Empleados con oficio EMPLEADO"

FROM EMPLE

WHERE OFICIO = 'EMPLEADO'

GROUP BY DEPT_NO;

ACTIVIDAD 4

4. Desde la tabla EMPLE, visualiza el departamento que tenga más empleados cuyo

oficio sea 'EMPLEADO'.

SELECT DEPT_NO "Departamento", COUNT (*) "Empleados con Oficio EMPLEADO"

FROM EMPLE

WHERE OFICIO='EMPLEADO'

Page 15: Capitulo 5 SQL Versión 1

15 Matilde Gómez Ojeda

GROUP BY DEPT_NO

HAVING COUNT (*)= (SELECT MAX (COUNT (*))

FROM EMPLE

WHERE OFICIO='EMPLEADO'

GROUP BY DEPT_NO)

ACTIVIDAD 5

5. A partir de las tablas EMPLE y DEPART, visualiza el número de departamento

y el nombre de departamento que tenga más empleados cuyo oficio sea

'EMPLEADO'.

ACTIVIDAD 6

6. Busca los departamentos que tienen más de dos personas trabajando en la

misma profesión.

Tablas ALUM, ANTIGUOS Y NUEVOS

ACTIVIDAD 7

7. Visualiza los nombres de los alumnos de la tabla ALUM que aparezcan en estas

dos tablas: ANTIGUOS y NUEVOS.

ACTIVIDAD 8

8. Escribe las distintas formas en que se puede poner la consulta anterior llegando

al mismo resultado.

ACTIVIDAD 9

9. Visualiza aquellos nombres de la tabla ALUM que no estén en la tabla

ANTIGUOS ni en la tabla NUEVOS.

Tablas PERSONAL, PROFESORES Y CENTROS (hacer DESC de las tablas)

ACTIVIDAD 10

10. Realiza una consulta en la que aparezca por cada centro y en cada especialidad

el número de profesores. Si el centro no tiene profesores, debe aparecer un 0 en la

Page 16: Capitulo 5 SQL Versión 1

16 Matilde Gómez Ojeda

columna de número de profesores. Las columnas a visualizar son: nombre de

centro, especialidad y número de profesores.

ACTIVIDAD 11

11. Obtén por cada centro el número de empleados. Si el centro carece de

empleados, ha de aparecer un 0 como número de empleados.

ACTIVIDAD 12

12. Obtén la especialidad con menos profesores.

Tablas BANCOS, SUCURSALES, CUENTAS y MOVIMIENTOS (hacer DESC de las

tablas)

TABLA BANCOS: Contiene los datos de los bancos, una fila por cada banco. Un banco se

identifica por el COD_BANCO.

TABLA SUCURSALES: Contiene los datos de las sucursales. Una fila por sucursal. Cada

sucursal se identifica por el COD_BANCO+COD_SUCUR.

TABLA CUENTAS: Contiene los datos de las cuentas abiertas en las sucursales de los bancos.

Una cuenta se identifica por las columnas COD_BANCO+COD_SUCUR+NUM_CTA. Contiene

los saldos de las cuentas. SALDO_DEBE contiene la suma de Reintegros y SALDO_HABER la

suma de Ingresos.

TABLA MOVIMIENTOS: Contiene los movimientos de las cuentas. Una fila representa un

movimiento de una cuenta. La columna TIPO_MOV puede ser I (ingreso) o R (reintegro).

ACTIVIDAD 13

13. Obtén el banco con más sucursales.

ACTIVIDAD 14

14. El saldo actual de los bancos de 'GUADALAJARA', 1 fila por cada banco:

ACTIVIDAD 15

15. Datos de la cuenta o cuentas con más movimientos:

ACTIVIDAD 16

16. El nombre de la sucursal que haya tenido más suma de reintegros:

Page 17: Capitulo 5 SQL Versión 1

17 Matilde Gómez Ojeda