A continuación, se presentan posibles preguntas que pueden caer en un examen de Oracle SQL, acompañadas de soluciones detalladas que no utilizan la cláusula JOIN. Estas preguntas están diseñadas para cubrir consultas básicas, subconsultas, valores nulos, funciones agregadas y manejo de datos.
1. Consultas Básicas
Pregunta 1: Mostrar el apellido y salario de los empleados que ganan más de 2000.
Solución:
SELECT apellido, salario
FROM emple
WHERE salario > 2000;
Pregunta 2: Recuperar los nombres y localidades de los departamentos que no están en «MADRID».
Solución:
SELECT dnombre, loc
FROM depart
WHERE loc <> 'MADRID';
2. Subconsultas Simples
Pregunta 3: Mostrar los empleados que trabajan en el departamento «VENTAS».
Solución:
SELECT *
FROM emple
WHERE dept_no = (SELECT dept_no
FROM depart
WHERE dnombre = 'VENTAS');
Pregunta 4: Obtener los temas de la tabla LIBRERIA con más ejemplares que el tema «BIOLOGIA».
Solución:
SELECT tema
FROM libreria
WHERE ejemplares > (SELECT ejemplares
FROM libreria
WHERE tema = 'BIOLOGIA');
3. Funciones Agregadas y Agrupamiento
Pregunta 5: Calcular el salario promedio de los empleados en el departamento 30.
Solución:
SELECT AVG(salario) AS salario_promedio
FROM emple
WHERE dept_no = 30;
Pregunta 6: Contar cuántos empleados hay en cada departamento.
Solución:
SELECT dept_no, COUNT(*) AS num_empleados
FROM emple
GROUP BY dept_no;
4. Subconsultas Correlacionadas
Pregunta 7: Seleccionar empleados cuyo salario sea superior al salario promedio de su departamento.
Solución:
SELECT apellido, salario
FROM emple e
WHERE salario > (SELECT AVG(salario)
FROM emple
WHERE dept_no = e.dept_no);
Pregunta 8: Mostrar los temas de LIBRERIA que tienen más ejemplares que cualquier tema en el estante «B».
Solución:
SELECT tema
FROM libreria
WHERE ejemplares > ALL (SELECT ejemplares
FROM libreria
WHERE estante = 'B');
5. Condicionales y Transformación de Datos
Pregunta 9: Mostrar los apellidos de empleados y una columna indicando «ALTO» si su salario es mayor a 2000, o «BAJO» si no lo es.
Solución:
SELECT apellido,
CASE
WHEN salario > 2000 THEN 'ALTO'
ELSE 'BAJO'
END AS nivel_salario
FROM emple;
Pregunta 10: Recuperar los temas de LIBRERIA y reemplazar «MEDICINA» por «SALUD» en los resultados.
Solución:
SELECT CASE
WHEN tema = 'MEDICINA' THEN 'SALUD'
ELSE tema
END AS tema_modificado
FROM libreria;
6. Manipulación de Fechas
Pregunta 11: Mostrar los apellidos de los empleados y los años que han pasado desde su contratación.
Solución:
SELECT apellido,
ROUND((SYSDATE - fecha_alt) / 365, 1) AS anios_trabajados
FROM emple;
Pregunta 12: Recuperar los nombres de los alumnos nacidos antes del 1 de enero de 1990.
Solución:
SELECT nombre
FROM alum0405
WHERE fecha_nac < TO_DATE('01/01/1990', 'DD/MM/YYYY');
7. Relaciones entre Tablas
Pregunta 13: Mostrar los nombres y apellidos de los alumnos que tienen una nota mayor a 7 en «FOL».
Solución:
SELECT apenom
FROM alumnos
WHERE dni IN (SELECT dni
FROM notas
WHERE cod = (SELECT cod
FROM asignaturas
WHERE nombre = 'FOL')
AND nota > 7);
Pregunta 14: Recuperar las asignaturas que no tienen alumnos matriculados.
Solución:
SELECT *
FROM asignaturas
WHERE cod NOT IN (SELECT cod
FROM notas);
8. Uso de Valores Nulos
Pregunta 15: Mostrar los empleados que no tienen comisiones asignadas.
Solución:
SELECT apellido, salario
FROM emple
WHERE comision IS NULL;
Pregunta 16: Recuperar los temas de LIBRERIA y reemplazar los valores nulos en «EJEMPLARES» con 0.
Solución:
SELECT tema, NVL(ejemplares, 0) AS ejemplares_modificados
FROM libreria;
9. Ordenación y Límite de Resultados
Pregunta 17: Mostrar los temas de LIBRERIA ordenados por número de ejemplares en orden descendente.
Solución:
SELECT tema, ejemplares
FROM libreria
ORDER BY ejemplares DESC;
Pregunta 18: Recuperar los 3 empleados con los salarios más altos.
Solución:
SELECT *
FROM (SELECT apellido, salario
FROM emple
ORDER BY salario DESC)
WHERE ROWNUM <= 3;
10. Escenarios Combinados
Pregunta 19: Mostrar los apellidos y salarios de los empleados cuyo salario supere al promedio de su departamento y tengan comisiones asignadas.
Solución:
SELECT apellido, salario
FROM emple
WHERE salario > (SELECT AVG(salario)
FROM emple
WHERE dept_no = emple.dept_no)
AND comision IS NOT NULL;
Pregunta 20: Contar cuántos alumnos de «Madrid» tienen asignaturas suspendidas y cuántos no.
Solución:
SELECT COUNT(*) AS alumnos_suspendidos
FROM alumnos
WHERE pobla = 'Madrid'
AND dni IN (SELECT dni
FROM notas
WHERE nota < 5);
SELECT COUNT(*) AS alumnos_no_suspendidos
FROM alumnos
WHERE pobla = 'Madrid'
AND dni NOT IN (SELECT dni
FROM notas
WHERE nota < 5);
Conclusión
Estas preguntas abarcan aspectos clave de Oracle SQL y se resuelven sin usar JOIN, empleando subconsultas y funciones avanzadas. Practicar estas preguntas te ayudará a consolidar tus conocimientos y estar preparado para cualquier examen de SQL.

