Ejercicios Prácticos de SQL: Consultas Avanzadas con Funciones de Cadena y Fecha
Enviado por Programa Chuletas y clasificado en Francés
Escrito el en
español con un tamaño de 56,23 KB
Corrección y Optimización de Ejercicios Prácticos de SQL
A continuación, se presenta la corrección detallada de los ejercicios propuestos, aplicando las mejores prácticas de formato y claridad en las sentencias SQL.
1. Consultas sobre la Tabla EMPLE (Estadísticas por Departamento)
Cálculos estadísticos para el departamento 30
Objetivo: Obtener el sueldo medio, el número de comisiones no nulas, el sueldo máximo y el sueldo mínimo de los empleados del departamento 30, aplicando formato adecuado a las cantidades numéricas.
SELECT
TO_CHAR(AVG(salario), '09G999D99') AS "MEDIA_DE_SUELDO",
COUNT(comision) AS "COMISIONES_NO_NULAS",
MAX(salario) AS "SALARIO_MAXIMO",
MIN(salario) AS "SALARIO_MINIMO"
FROM
emple
WHERE
DEPT_NO = 30;
2. Consultas sobre la Tabla LIBRERIA (Búsqueda por Contenido y Frecuencia)
Visualización de temas con más ejemplares que contienen la letra 'E'
Objetivo: Visualizar los temas con el mayor número de ejemplares, siempre que el nombre del tema contenga al menos una 'E'.
SELECT
tema AS "TEMAS_CON_MAS_EJEMPLARES"
FROM
libreria
WHERE
libreria.tema LIKE '%E%'
AND ejemplares = (
SELECT MAX(ejemplares)
FROM libreria
WHERE libreria.tema LIKE '%E%'
);
3. Consultas sobre la Tabla MISTEXTOS (Manipulación de Cadenas)
Limpieza y normalización de títulos
Objetivo: Visualizar los títulos de la tabla MISTEXTOS en minúscula, eliminando puntos y comillas dobles.
SELECT
LOWER(REPLACE(REPLACE(titulo, '.', ''), '"', '')) AS titulo_limpio
FROM
mistextos;
4. Consultas sobre la Tabla LIBROS (Extracción y Formato de Nombres)
Extracción de Apellido y Autor
Objetivo: Visualizar el autor completo y una columna separada solo con el apellido (asumiendo el formato 'APELLIDO, Nombre').
SELECT
autor,
RTRIM(SUBSTR(autor, 1, INSTR(autor, ',') - 1), ',') AS APELLIDO
FROM
libros;
Extracción del Nombre del Autor (sin Apellido)
Objetivo: Visualizar el autor completo y una columna con solo el nombre (lo que sigue a la coma y el espacio).
SELECT
autor,
SUBSTR(autor, INSTR(autor, ',') + 2) AS NOMBRE
FROM
libros;
Concatenación de Nombre y Apellido
Objetivo: Visualizar en una sola columna el nombre y luego el apellido (se corrige la función de concatenación, asumiendo `CONCAT` o `||` según el dialecto, aquí se usa `CONCAT` o se asume la sintaxis estándar si el original usaba `CONCA`).
SELECT
CONCAT(RTRIM(SUBSTR(autor, 1, INSTR(autor, ',') - 1), ','), ', ' || RTRIM(SUBSTR(autor, INSTR(autor, ',')))) AS NOMBRE_Y_APELLIDO
FROM
libros;
Ordenación por Longitud del Título
Objetivo: Ordenar los títulos por su número de caracteres.
SELECT
titulo
FROM
libros
ORDER BY
LENGTH(titulo);
5. Consultas Avanzadas sobre LIBRERIA
Análisis de la longitud y el último carácter del tema
Objetivo: Visualizar el tema, el último carácter no blanco del tema y la longitud del tema sin espacios finales, ordenado por tema.
SELECT
tema,
SUBSTR(RTRIM(tema, ' '), LENGTH(RTRIM(tema, ' '))) AS ULTIMO_CARACTER_NO_BLANCO,
LENGTH(RTRIM(tema, ' ')) AS LONGITUD_SIN_ESPACIOS
FROM
libreria
ORDER BY
tema;
6. Conversión de Fechas y Formato
Conversión de cadena a fecha y visualización del mes
Objetivo: Convertir la cadena '010712' (DDMMYY) a fecha y mostrar el nombre del mes en mayúsculas.
SELECT
TO_CHAR(TO_DATE('010712', 'DDMMYY'), 'MONTH') AS NOMBRE_MES
FROM
dual;
Uso de la función DECODE
Objetivo: Reemplazar el valor de ejemplares por 'SEVEN' si es 7, manteniendo el valor original en caso contrario.
SELECT
tema,
DECODE(ejemplares, 7, 'SEVEN', TO_CHAR(ejemplares)) AS ejemplares_modificados
FROM
libreria;
7. Consultas de Antigüedad en EMPLE
Antigüedad superior a 15 años
Objetivo: Obtener el apellido de los empleados con más de 15 años de servicio.
SELECT
APELLIDO
FROM
emple
WHERE
MONTHS_BETWEEN(SYSDATE, fecha_alt) > (15 * 12);
Antigüedad superior a 16 años en el departamento 'VENTAS'
Objetivo: Seleccionar el apellido de empleados con más de 16 años en el departamento 'VENTAS'.
SELECT
e.APELLIDO
FROM
emple e
JOIN
depart d ON e.DEPT_NO = d.DEPT_NO
WHERE
(TO_CHAR(CURRENT_DATE, 'YYYY') - TO_CHAR(e.fecha_alt, 'YYYY')) > 16
AND d.DNOMBRE = 'VENTAS';
8. Consultas de Máximo Salario por Departamento
Empleados con el salario máximo de su departamento
Objetivo: Visualizar apellido, salario y número de departamento para aquellos empleados cuyo salario es el mayor dentro de su propio departamento.
SELECT
apellido,
salario,
dept_no AS numero_departamento
FROM
emple e
WHERE
salario = (
SELECT MAX(salario)
FROM emple
WHERE emple.dept_no = e.dept_no
)
ORDER BY
dept_no;
Empleados con salario superior a la media de su departamento
Objetivo: Visualizar apellido, salario y número de departamento para aquellos empleados cuyo salario supera la media salarial de su departamento.
SELECT
apellido,
salario,
dept_no AS numero_departamento
FROM
emple e
WHERE
salario > (
SELECT AVG(salario)
FROM emple
WHERE emple.dept_no = e.dept_no
)
ORDER BY
dept_no;