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;

Captura

Entradas relacionadas: