Optimización de Consultas SQL: 10 Ejercicios Prácticos de Filtrado y Manipulación de Datos


Ejercicios Resueltos de Consultas SQL Avanzadas

A continuación, se presenta la corrección y optimización de diez ejercicios prácticos de consultas SQL, enfocados en el manejo de filtros complejos, ordenamiento, cálculos y sintaxis específica de bases de datos (como Access/Jet SQL).

1. Filtrado Combinado por Patrón y Conjunto de Estados

Requerimiento: Recuperar todos los campos de la tabla Clientes cuya compañía termine en una letra entre ‘b’ y ‘t’, y cuyo estado o provincia sea ‘NY’, ‘FL’, ‘TN’, ‘UT’ o ‘MA’. El resultado debe estar ordenado de Z a A por Cargo, y luego por Compañía de A a Z. Se prohíbe el uso del operador OR.

Consulta SQL Corregida:

SELECT *
FROM Clientes
WHERE Compañía LIKE '*[b-t]' 
AND [Estado o Provincia] IN ('MA', 'NY', 'UT', 'TN', 'FL')
ORDER BY Cargo DESC, Compañía ASC;

2. Obtención de Registros Superiores con Filtro Temporal

Requerimiento: Obtener los 7 registros con los mayores valores de Cantidad de la tabla Transacciones de Inventario. Solo interesan aquellos realizados el día 24 de cualquier mes (según la Fecha de Creación) y cuyo Tipo de Transacción sea ‘comprado’ (asumiendo que ‘comprado’ corresponde al valor 1).

Consulta SQL Corregida:

SELECT TOP 7 *
FROM [Transacciones de Inventario]
WHERE Day([Fecha de Creación de la Transacción]) = 24
AND [Tipo de Transacción] = 1
ORDER BY Cantidad DESC;

3. Formato de Fecha Personalizado y Exclusión por Mes

Requerimiento: Obtener en una sola columna (con encabezado) el día, mes y año de cada registro de Pedidos de Compra, siempre que el mes de la Fecha de Creación no coincida con el mes actual de ejecución de la consulta. El formato de recuperación debe ser DD.MM.AAAA.

Consulta SQL Corregida:

SELECT Day([Fecha de Creación]) & '.' & Month([Fecha de Creación]) & '.' & Year([Fecha de Creación]) AS NuevoFormatoFecha
FROM [Pedidos de Compra]
WHERE Month([Fecha de Creación]) <> Month(Date());

4. Cálculo de Costo Estándar con Conversión de Moneda

Requerimiento: Aumentar un 12% el Costo Estándar de cada Producto cuya Cantidad por Unidad no contenga las siglas ‘paq.’. El valor resultante (almacenado en euros) debe convertirse a libras (1€ = 0.880557 libras) y redondearse a 4 cifras decimales. Se debe recuperar una única columna con el valor en libras y su símbolo, ordenada de mayor a menor.

Consulta SQL Corregida:

SELECT Round([Costo Estándar] * 1.12 * 0.880557, 4) & ' £' AS CostoEnLibras
FROM Productos
WHERE [Cantidad por Unidad] NOT LIKE '*paq.*'
ORDER BY 1 DESC;

5. Consulta a una Base de Datos Externa

Requerimiento: Realizar una consulta desde la base de datos actual hacia una base de datos externa (BDCOPIATUNOMBRE) para obtener, sin repeticiones, los distintos tipos de Cargos de la tabla TUNOMBRE (que es la copia renombrada de Proveedores).

Consulta SQL Corregida:

SELECT DISTINCT Cargo
FROM [TuNombre] IN 'RUTADELAOTRABASEDEDATOS';

6. Filtrado Complejo con Operador Lógico Exclusivo (XOR)

Requerimiento: Listar todos los campos de la tabla Detalles de Pedidos de Compra que cumplan alguna de las siguientes condiciones:

  • El campo Publicado en el Inventario no esté chequeado (False).
  • De forma exclusiva (XOR), la Fecha de Recepción esté entre el 05/04/2006 y el 10/04/2006.

Además, se deben incluir aquellos registros cuyo ID de Inventario esté vacío (NULL). El resultado debe ordenarse por el tercer campo recuperado.

Consulta SQL Corregida:

SELECT *
FROM [Detalles de Pedidos de Compra]
WHERE ([Publicado en el Inventario] = False XOR [Fecha de Recepción] BETWEEN #05/04/2006# AND #10/04/2006#)
OR [ID de Inventario] IS NULL
ORDER BY 3;

7. Uso de Nombres de Campo Cualificados y Condiciones Múltiples

Requerimiento: Obtener Apellidos, Nombre, Ciudad y Notas de los Empleados que cumplan: (tengan notas con contenido en Redmond) O (tengan notas sin contenido en Seattle). Es obligatorio usar nombres de campo cualificados.

Consulta SQL Corregida:

SELECT Empleados.Apellidos, Empleados.Nombre, Empleados.Ciudad, Empleados.Notas
FROM Empleados
WHERE (Empleados.Notas IS NOT NULL AND Empleados.Ciudad = 'Redmond')
OR (Empleados.Ciudad = 'Seattle' AND Empleados.Notas IS NULL);

8. Filtrado por Patrón Específico y Exclusión de Sufijo

Requerimiento: Listar todos los campos de Productos cuyo Código de Producto contenga un ‘9’ inmediatamente después de un guion, y cuya Cantidad por Unidad no termine en ‘piezas’. Ordenar por el Nombre del Producto de Z a A.

Consulta SQL Corregida:

SELECT *
FROM Productos
WHERE [Código de Producto] LIKE '*-9*'
AND [Cantidad por Unidad] NOT LIKE '*piezas'
ORDER BY [Nombre del Producto] DESC;

9. Concatenación de Campos y Filtrado por Cargo

Requerimiento: Mostrar en una sola columna concatenada (con encabezado adecuado) los Apellidos, Nombre, el texto descriptivo y la clave primaria (ID) de todos los Proveedores que sean algún tipo de ‘Jefe’ o ‘Ayudante de Marketing’. Ordenar por Apellidos de Z a A.

Consulta SQL Corregida:

SELECT '"' & Apellidos & ', ' & Nombre & '" tiene por clave primaria en la base de datos el número: ' & ID AS InformeCompleto
FROM Proveedores
WHERE Cargo LIKE 'Jefe*' OR Cargo = 'Ayudante de Marketing'
ORDER BY Apellidos DESC;

10. Uso de Parámetros de Usuario y Operador BETWEEN

Requerimiento: Listar de la tabla Pedidos el ID de Pedido, la diferencia de días entre el pedido y el envío, y los Gastos de Envío. Se deben incluir solo aquellos pedidos con una diferencia de envío igual o inferior a 5 días, y cuyos gastos de envío estén comprendidos entre dos valores que elija el usuario mediante una ventana de parámetros. Es obligatorio usar el operador BETWEEN.

Consulta SQL Corregida:

SELECT [ID de Pedido], [Fecha de Envío] - [Fecha de Pedido] AS [Diferencia de Días], [Gastos de Envío]
FROM Pedidos
WHERE ([Fecha de Envío] - [Fecha de Pedido]) <= 5
AND [Gastos de Envío] BETWEEN [Introduzca Gasto Mínimo] AND [Introduzca Gasto Máximo];

Dejar un Comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *