Posible Examen de Oracle SQL: Consultas sin JOIN

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.


Tabla de contenidos

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.

close up photo of programming of codes
Photo by luis gomes on Pexels.com

Deja un comentario

Información básica sobre protección de datos Ver más

  • Responsable: Tomas Gonzalez.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

error: Content is protected !!

Descubre más desde Tomás González: Formador y Desarrollador Web

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo

Este sitio web utiliza cookies, si necesitas más información puedes visitar nuestra política de privacidad    Ver
Privacidad