Consultas SQL: Ejercicios prácticos con ejemplos
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;