Este artículo presenta un conjunto de preguntas que podrían aparecer en un examen de Oracle SQL, junto con sus soluciones detalladas. Todas las consultas están diseñadas sin utilizar JOIN
, empleando subconsultas y funciones avanzadas.
Sección 1: Consultas sobre la Tabla EMPLE
1. Calcular el sueldo medio, el número de comisiones no nulas, el máximo sueldo y el mínimo sueldo de los empleados del departamento 30.
Consulta:
SELECT
TO_CHAR(AVG(salario), '999G999D99') AS sueldo_medio,
COUNT(comision) AS comisiones_no_nulas,
TO_CHAR(MAX(salario), '999G999D99') AS sueldo_maximo,
TO_CHAR(MIN(salario), '999G999D99') AS sueldo_minimo
FROM emple
WHERE dept_no = 30;
2. Obtener el apellido de los empleados que lleven más de 15 años trabajando.
Consulta:
SELECT apellido
FROM emple
WHERE ADD_MONTHS(fecha_alt, 180) <= SYSDATE;
3. Seleccionar el apellido de los empleados que lleven más de 16 años trabajando en el departamento «VENTAS».
Consulta:
SELECT apellido
FROM emple
WHERE dept_no = (SELECT dept_no
FROM depart
WHERE dnombre = 'VENTAS')
AND ADD_MONTHS(fecha_alt, 192) <= SYSDATE;
4. Visualizar el apellido, el salario y el número de departamento de aquellos empleados cuyo salario sea el mayor de su departamento.
Consulta:
SELECT apellido, salario, dept_no
FROM emple
WHERE salario = (SELECT MAX(salario)
FROM emple e
WHERE e.dept_no = emple.dept_no);
5. Visualizar el apellido, el salario y el número de departamento de los empleados cuyo salario supere al promedio de su departamento.
Consulta:
SELECT apellido, salario, dept_no
FROM emple
WHERE salario > (SELECT AVG(salario)
FROM emple e
WHERE e.dept_no = emple.dept_no);
Sección 2: Consultas sobre la Tabla LIBRERIA
6. Visualizar los temas con mayor número de ejemplares y que contengan al menos una ‘E’.
Consulta:
SELECT tema
FROM libreria
WHERE tema LIKE '
AND ejemplares = (SELECT MAX(ejemplares) FROM libreria);
7. Mostrar aquellos temas cuyos ejemplares sean exactamente 7 con el nombre de tema «SEVEN»; el resto deben mostrarse sin cambios.
Consulta:
SELECT CASE
WHEN ejemplares = 7 THEN 'SEVEN'
ELSE tema
END AS tema_final
FROM libreria;
8. Visualizar el tema, el último carácter no blanco y el número de caracteres de cada tema (sin blancos a la derecha), ordenados por tema.
Consulta:
SELECT tema,
RTRIM(SUBSTR(tema, -1)) AS ultimo_caracter,
LENGTH(RTRIM(tema)) AS longitud
FROM libreria
ORDER BY tema;
Sección 3: Consultas sobre la Tabla MISTEXTOS
9. Generar el siguiente formato en los títulos de MISTEXTOS:
Resultado esperado:
METODOLOGÍA DE LA PROGRAMACIÓN-^-^-^-^-
INFORMÁTICA BÁSICA-^-^-^-^-^-^-^-^-^-
SISTEMAS OPERATIVOS-^-^-^-^-^-^-^-^-^-
SISTEMAS DIGITALES-^-^-^-^-^-^-^-^-^-
MANUAL DE C-^-^-^-^-^-^-^-^-^-^-^-^-^-
Consulta:
SELECT REPLACE(REPLACE(UPPER(titulo), '.', ''), '"', '') || '-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-' AS formato_titulo
FROM mistextos;
10. Visualizar los títulos sin puntos ni comillas y en minúscula, utilizando dos métodos.
Primera forma:
SELECT LOWER(REPLACE(REPLACE(titulo, '.', ''), '"', '')) AS titulo_formateado
FROM mistextos;
Segunda forma:
SELECT LOWER(REGEXP_REPLACE(titulo, '[.""]', '')) AS titulo_formateado
FROM mistextos;
Sección 4: Consultas sobre la Tabla LIBROS
11. Mostrar el autor y el apellido del autor.
Consulta:
SELECT autor, SUBSTR(autor, INSTR(autor, ',') + 2) AS apellido
FROM libros;
12. Visualizar el autor y el nombre del autor sin el apellido.
Consulta:
SELECT autor, SUBSTR(autor, 1, INSTR(autor, ',') - 1) AS nombre
FROM libros;
13. Mostrar una columna combinando el nombre y el apellido del autor.
Consulta:
SELECT autor,
SUBSTR(autor, INSTR(autor, ',') + 2) || ' ' || SUBSTR(autor, 1, INSTR(autor, ',') - 1) AS nombre_completo
FROM libros;
14. Ordenar los títulos de los libros por el número de caracteres.
Consulta:
SELECT titulo
FROM libros
ORDER BY LENGTH(titulo);
Sección 5: Consultas sobre la Tabla NACIMIENTOS
15. Mostrar el nombre, la fecha de nacimiento y la fecha formateada como «Nació el DD de Mes de YYYY».
Consulta:
SELECT nombre, fechanac,
TO_CHAR(fechanac, '"Nació el "DD" de "MONTH" de "YYYY') AS fecha_formateada
FROM nacimientos;
16. Mostrar el nombre seguido de su fecha de nacimiento formateada, eliminando espacios del nombre.
Consulta:
SELECT RTRIM(nombre) || ' - ' || TO_CHAR(fechanac, 'DD/MM/YYYY') AS nombre_fecha
FROM nacimientos;
17. Convertir la cadena ‘010712’ a fecha y mostrar el nombre del mes en mayúsculas.
Consulta:
SELECT UPPER(TO_CHAR(TO_DATE('010712', 'DDMMYY'), 'MONTH')) AS mes
FROM dual;
Conclusión
Este examen cubre una variedad de temas importantes en Oracle SQL, desde el uso de funciones agregadas y subconsultas hasta la manipulación de datos textuales y fechas. Todas las soluciones se presentan sin utilizar JOIN
, lo que demuestra el uso eficiente de subconsultas para resolver problemas complejos. Practicar estos ejercicios te ayudará a estar bien preparado para cualquier evaluación en SQL.