Consultas con la cláusula WHERE

1. Muestra los datos (apellido y oficio) de aquellos empleados que desempeñen el mismo oficio que Jiménez.

SELECT APELLIDO, OFICIO FROM EMPLE WHERE OFICIO = (SELECT OFICIO FROM EMPLE WHERE APELLIDO = 'JIMENEZ');

Consultas con JOIN y UNION

2. Selecciona el apellido, el oficio y la localidad de los departamentos de aquellos empleados cuyo oficio sea “ANALISTA”.

SELECT APELLIDO, OFICIO, LOC FROM EMPLE JOIN DEPART ON DEPART.DEPT_NO = EMPLE.DEPT_NO WHERE OFICIO = 'ANALISTA';

3. Obtén los datos de los empleados cuyo director (columna DIR de la tabla EMPLE) sea “CEREZO”.

SELECT * FROM EMPLE WHERE DEPT_NO = (SELECT DEPT_NO FROM EMPLE WHERE APELLIDO = 'CEREZO');

4. Obtén los datos de los empleados del departamento de “VENTAS”.

SELECT * FROM EMPLE JOIN DEPART ON DEPART.DEPT_NO = EMPLE.DEPT_NO WHERE DNOMBRE = 'VENTAS';

Consultas con IN, NOT IN y DISTINCT

5. Obtén los datos de los departamentos que NO tengan empleados.

SELECT * FROM DEPART WHERE DEPT_NO NOT IN (SELECT DISTINCT DEPT_NO FROM EMPLE WHERE DEPT_NO IS NOT NULL);

6. Obtén los datos de los departamentos que tengan empleados.

SELECT * FROM DEPART WHERE DEPT_NO IN (SELECT DISTINCT DEPT_NO FROM EMPLE WHERE DEPT_NO IS NOT NULL);

Consultas con funciones de agregación (MAX)

7. Obtén el apellido y el salario de los empleados que superen todos los salarios de los empleados del departamento 20.

SELECT APELLIDO, SALARIO FROM EMPLE WHERE SALARIO > (SELECT MAX(SALARIO) FROM EMPLE WHERE DEPT_NO = 20);

Consultas con BETWEEN

8. Visualiza el tema, estante y ejemplares de las filas de LIBRERIA con ejemplares comprendidos entre 8 y 15.

SELECT TEMA, ESTANTE, EJEMPLARES FROM LIBRERIA WHERE EJEMPLARES BETWEEN 8 AND 15;

9. Visualiza los ejemplares de la tabla LIBRERIA donde el tema sea Biología o Deportes.

SELECT EJEMPLARES FROM LIBRERIA WHERE TEMA IN ('Biología', 'Deportes');

10. Visualiza los ejemplares de la tabla LIBRERÍA donde el tema no sea ni Biología ni Deportes.

SELECT EJEMPLARES FROM LIBRERIA WHERE TEMA NOT IN ('Biología', 'Deportes');

11. Visualiza las columnas TEMA, ESTANTE y EJEMPLARES de las filas cuyo ESTANTE no esté comprendido entre la “B” y la “D”.

SELECT TEMA, ESTANTE, EJEMPLARES FROM LIBRERIA WHERE ESTANTE NOT BETWEEN 'B' AND 'D';

12. Visualiza con una sola orden SELECT todos los temas de LIBRERIA cuyo número de ejemplares sea inferior a los que hay en “MEDICINA”.

SELECT TEMA FROM LIBRERIA WHERE EJEMPLARES < (SELECT EJEMPLARES FROM LIBRERIA WHERE TEMA = 'Medicina');

13. Visualiza los temas de LIBRERÍA cuyo número de ejemplares no esté entre 15 y 20, ambos incluidos.

SELECT TEMA FROM LIBRERIA WHERE EJEMPLARES NOT BETWEEN 15 AND 20;

Consultas con LIKE

14. Visualiza todas las asignaturas que contengan tres letras “o” en su interior y tengan alumnos matriculados de “Madrid”.

SELECT NOMBRE FROM ASIGNATURAS JOIN NOTAS ON ASIGNATURAS.COD = NOTAS.COD JOIN ALUMNOS ON ALUMNOS.DNI = NOTAS.DNI WHERE NOMBRE LIKE '%o%o%o%' AND POBLA = 'Madrid';

15. Visualiza los nombres de alumnos de “Madrid” que tengan alguna asignatura suspendida.

SELECT APENOM FROM ALUMNOS JOIN NOTAS ON ALUMNOS.DNI = NOTAS.DNI JOIN ASIGNATURAS ON ASIGNATURAS.COD = NOTAS.COD WHERE POBLA = 'Madrid' AND NOTA < 5;

16. Muestra los nombres de alumnos que tengan la misma nota que tiene “Díaz Fernández, María” en “FOL” en alguna asignatura.

SELECT DISTINCT APENOM FROM ALUMNOS JOIN NOTAS ON ALUMNOS.DNI = NOTAS.DNI WHERE NOTA = (SELECT NOTA FROM ASIGNATURAS JOIN NOTAS ON ASIGNATURAS.COD = NOTAS.COD JOIN ALUMNOS ON NOTAS.DNI = ALUMNOS.DNI WHERE APENOM = 'Díaz Fernández, María' AND NOMBRE = 'FOL');

17. Obtén los datos de las asignaturas que no tengan alumnos.

SELECT * FROM ASIGNATURAS WHERE COD NOT IN (SELECT DISTINCT COD FROM NOTAS);

18. Obtén el nombre y apellido de los alumnos que tengan nota en la asignatura con código 1.

SELECT APENOM FROM ALUMNOS JOIN NOTAS ON ALUMNOS.DNI = NOTAS.DNI WHERE COD = 1;

19. A partir de la tabla NOTAS_ALUMNOS, deseamos obtener aquellos nombres de alumnos que tengan un 7 en NOTA1 y cuya media sea mayor de 6.

SELECT NOMBRE_ALUMNO FROM NOTAS_ALUMNOS WHERE NOTA1 = 7 AND (NOTA1 + NOTA2 + NOTA3) / 3 > 6;

20. Con la tabla EMPLE, obtén el APELLIDO de los empleados con el mismo OFICIO que ‘GIL’.

SELECT APELLIDO FROM EMPLE WHERE OFICIO = (SELECT OFICIO FROM EMPLE WHERE APELLIDO = 'GIL');

21. Muestra en pantalla el APELLIDO, OFICIO y SALARIO de los empleados del departamento de “FERNANDEZ” que tengan su mismo salario.

SELECT APELLIDO, OFICIO, SALARIO FROM EMPLE WHERE SALARIO IN (SELECT SALARIO FROM EMPLE WHERE DEPT_NO = (SELECT DEPT_NO FROM EMPLE WHERE APELLIDO = 'FERNANDEZ')) AND DEPT_NO = (SELECT DEPT_NO FROM EMPLE WHERE APELLIDO = 'FERNANDEZ');

22. Queremos consultar los datos de los empleados que trabajan en “MADRID” O “BARCELONA”.

SELECT * FROM EMPLE WHERE DEPT_NO IN (SELECT DEPT_NO FROM DEPART WHERE LOC IN ('MADRID', 'BARCELONA'));

23. Obtener los siguientes datos de los empleados: APELLIDO, OFICIO, número de empleado (EMP_NO), nombre de departamento (DNOMBRE) y localidad (LOC).

SELECT APELLIDO, OFICIO, EMP_NO, DNOMBRE, LOC FROM EMPLE JOIN DEPART ON EMPLE.DEPT_NO = DEPART.DEPT_NO;

24. Visualiza los nombres de alumnos que tengan una nota entre 7 y 8 en la asignatura de “FOL”.

SELECT APENOM FROM ALUMNOS JOIN NOTAS ON ALUMNOS.DNI = NOTAS.DNI JOIN ASIGNATURAS ON NOTAS.COD = ASIGNATURAS.COD WHERE NOMBRE = 'FOL' AND NOTA BETWEEN 7 AND 8;

25. Visualiza las columnas TEMA, ESTANTE y EJEMPLARES de las filas cuyo ESTANTE no esté comprendido entre la “B” y la “D”.

SELECT TEMA, ESTANTE, EJEMPLARES FROM LIBRERIA WHERE ESTANTE NOT BETWEEN 'B' AND 'D';

26. Visualiza los temas de LIBRERÍA cuyo número de ejemplares no esté entre 15 y 20, ambos incluidos.

SELECT TEMA FROM LIBRERIA WHERE EJEMPLARES NOT BETWEEN 15 AND 20;

27. Obtén el nombre y apellido de los alumnos que tengan nota en la asignatura con código 1.

SELECT APENOM FROM ALUMNOS JOIN NOTAS ON ALUMNOS.DNI = NOTAS.DNI WHERE COD = 1;

Funciones de agregación: AVG, COUNT

28. Cálculo del salario medio de los empleados del departamento 10 de la tabla EMPLE.

SELECT AVG(SALARIO) AS "SALARIO MEDIO" FROM EMPLE WHERE DEPT_NO = 10;

29. A partir de la tabla EMPLE, visualiza cuántos apellidos empiezan por la letra ‘A’.

SELECT COUNT(APELLIDO) FROM EMPLE WHERE APELLIDO LIKE 'A%';

Funciones de cadena: SUBSTR, LAST_DAY, DECODE, UPPER

30. Partiendo de la cadena ‘ABCDEF’, obtenemos una columna con dos caracteres a partir de la tercera posición, en otra columna otros dos caracteres a partir de la tercera posición empezando por el final de la cadena y en una última columna la cadena a partir de su cuarta posición.

SELECT SUBSTR('ABCDEF', 3, 2) AS "S1", SUBSTR('ABCDEF', -3, 2) AS "S2", SUBSTR('ABCDEF', 4) AS "S3" FROM DUAL;

31. Obtén de la tabla EMPLE el último día del mes para cada una de las fechas de alta de los empleados del departamento 10.

SELECT FECHA_ALT, LAST_DAY(FECHA_ALT) FROM EMPLE WHERE DEPT_NO = 10;

32. Sea la tabla EMPLE. Seleccionar todas las filas y codificar el OFICIO. Si el oficio es PRESIDENTE, codificar con un 1; si es EMPLEADO, con un 2; en cualquier otro caso, codificar con un 5.

SELECT APELLIDO, DECODE(UPPER(OFICIO), 'PRESIDENTE', 1, 'EMPLEADO', 2, 5) AS OFICIO FROM EMPLE;