Está en la página 1de 17

Contenido

1.

CAPTULO 6. CLUSULAS AVANZADAS DE SELECCIN.......................................................... 2


1.1

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

1.2

EJEMPLOS SQL CAPTULO 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 (CAPTULO 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
1
Matilde Gmez Ojeda

1. CAPTULO 6. CLUSULAS AVANZADAS DE SELECCIN


1.1 TABLAS UTILZADAS EN LOS EJEMPLOS

2
Matilde Gmez Ojeda

3
Matilde Gmez Ojeda

4
Matilde Gmez Ojeda

1.2 EJEMPLOS SQL CAPTULO 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)
Obtn los nombres de departamentos que tengan ms 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 tambin el nmero 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);

5
Matilde Gmez Ojeda

A2)
Obtn los nombres de departamentos que tengan ms de 4 personas trabajando y nmero 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 nmero de departamento, el nombre de departamento y el nmero de empleados
del departamento con ms 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);

6
Matilde Gmez Ojeda

EJEMPLO 3
Sentencia Ejemplo de Combinacin 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 tambin 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 tambin 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;

7
Matilde Gmez Ojeda

EJEMPLO 4
Esta consulta tambin 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 interseccin (NUEVOS unin ANTIGUOS) o (ALUM
interseccin ANTIGUOS) unin (ALUM interseccin ANTIGUOS).
OR = unin = UNION AND=interseccin=INTERSEC=IN
B)
Escribir las distintas formas en que se puede poner la consulta anterior llegando al mismo
resultado.

1 FORMA DE HACERLO:
ALUM interseccin (NUEVOS unin ANTIGUOS)
SELECT NOMBRE
FROM ALUM
WHERE NOMBRE IN(SELECT NOMBRE FROM NUEVOS
UNION
SELECT NOMBRE FROM ANTIGUOS);

2 FORMA DE HACERLO:
(ALUM interseccin ANTIGUOS) unin (ALUM interseccin ANTIGUOS)
SELECT NOMBRE
FROM ALUM
WHERE NOMBRE
IN(SELECT NOMBRE FROM NUEVOS)
8
Matilde Gmez Ojeda

OR NOMBRE
IN (SELECT NOMBRE FROM ANTIGUOS);

3 FORMA DE HACERLO: (SIMILAR A LA PRIMERA)


ALUM interseccin (NUEVOS unin 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 interseccin(NUEVOS interseccin 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);

9
Matilde Gmez 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 unin 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);

10
Matilde Gmez Ojeda

EJEMPLO 6
A partir de la tabla EMPLE, visualizar el nmero 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 LIBRERA, 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 ms 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 funcin el nmero de trabajadores.
SELECT FUNCION,COUNT(*)"Numero Trabajadores"
FROM PERSONAL
GROUP BY FUNCION;

11
Matilde Gmez Ojeda

EJEMPLO 10
Visualizar los diferentes estantes de la tabla LIBRERA 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 cuntos temas tiene cada estante de la tabla LIBRERA.
SELECT ESTANTE,COUNT(*) "Numero temas"
FROM LIBRERIA
GROUP BY ESTANTE;

12
Matilde Gmez Ojeda

EJEMPLO 12
Visualizar los estantes que tengan tres temas en la tabla LIBRERA.
SELECT ESTANTE,COUNT(*) "Numero temas"
FROM LIBRERIA
GROUP BY ESTANTE
HAVING COUNT(*)=3;

1.3 ACTIVIDADES COMPLEMENTARIAS LIBRO (CAPTULO 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')
13
Matilde Gmez 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 nmero 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 ms empleados cuyo


oficio sea 'EMPLEADO'.
SELECT DEPT_NO "Departamento", COUNT (*) "Empleados con Oficio EMPLEADO"
FROM EMPLE
WHERE OFICIO='EMPLEADO'
14
Matilde Gmez 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 nmero de departamento


y el nombre de departamento que tenga ms empleados cuyo oficio sea
'EMPLEADO'.

ACTIVIDAD 6

6. Busca los departamentos que tienen ms de dos personas trabajando en la


misma profesin.
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 estn 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 nmero de profesores. Si el centro no tiene profesores, debe aparecer un 0 en la

15
Matilde Gmez Ojeda

columna de nmero de profesores. Las columnas a visualizar son: nombre de


centro, especialidad y nmero de profesores.

ACTIVIDAD 11

11. Obtn por cada centro el nmero de empleados. Si el centro carece de


empleados, ha de aparecer un 0 como nmero de empleados.

ACTIVIDAD 12

12. Obtn 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. Obtn el banco con ms 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 ms movimientos:

ACTIVIDAD 16

16. El nombre de la sucursal que haya tenido ms suma de reintegros:


16
Matilde Gmez Ojeda

17
Matilde Gmez Ojeda

También podría gustarte