En este artículo se presentan posibles preguntas de examen para practicar consultas en Oracle SQL, diseñadas sin el uso de la cláusula JOIN
. Cada pregunta incluye su solución detallada, abarcando subconsultas, funciones de agregado, manipulación de datos y más.
Sección 1: Consultas Básicas con Subconsultas
1. Calcular el sueldo medio, el número de comisiones no nulas, el sueldo máximo y mínimo 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 los apellidos de empleados con más de 15 años trabajando.
Consulta:
SELECT apellido
FROM emple
WHERE ADD_MONTHS(fecha_alt, 180) <= SYSDATE;
3. Seleccionar los apellidos de empleados que llevan 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. Mostrar el apellido, el salario y el número de departamento de empleados cuyo salario sea el más alto 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, salario y departamento de empleados cuyo salario sea superior 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. Mostrar los temas con mayor número de ejemplares que contengan al menos una ‘E’.
Consulta:
SELECT tema
FROM libreria
WHERE tema LIKE '
AND ejemplares = (SELECT MAX(ejemplares) FROM libreria);
7. Visualizar los temas cuyos ejemplares son exactamente 7 como «SEVEN»; el resto debe 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 del tema sin espacios a la derecha.
Consulta:
SELECT tema,
RTRIM(SUBSTR(tema, -1)) AS ultimo_caracter,
LENGTH(RTRIM(tema)) AS longitud
FROM libreria;
Sección 3: Consultas sobre la Tabla MISTEXTOS
9. Generar el siguiente formato para los títulos:
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 su nombre sin el apellido.
Consulta:
SELECT autor, SUBSTR(autor, 1, INSTR(autor, ',') - 1) AS nombre
FROM libros;
13. Combinar en una columna 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 por su 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, quitando espacios del nombre.
Consulta:
SELECT RTRIM(nombre) || ' - ' || TO_CHAR(fechanac, 'DD/MM/YYYY') AS nombre_fecha
FROM nacimientos;
17. Convertir la cadena ‘010712’ a una 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 amplia variedad de consultas útiles en Oracle SQL, desde funciones de agregación hasta manipulación de texto y fechas, utilizando exclusivamente subconsultas en lugar de JOIN
. Este enfoque te permitirá practicar y comprender las capacidades de Oracle SQL, fortaleciendo tu preparación para evaluaciones prácticas.