Consultas SQL fundamentales: SELECT, JOIN, agregaciones, subconsultas y DML/DDL
Resumen
Colección de consultas SQL que ilustran la recuperación de datos con SELECT, filtros, uniones (JOIN), agregaciones y subconsultas, así como operaciones de manipulación y definición como SELECT INTO, INSERT, DELETE, UPDATE, vistas y procedimientos almacenados. Cada ejemplo va acompañado de una descripción de lo que obtiene. Es útil para repasar la sintaxis SQL aplicada a casos prácticos sobre tablas de pedidos, productos, oficinas y representantes de ventas.
Puntos clave
- SELECT con WHERE permite filtrar filas; NOT BETWEEN excluye un intervalo de fechas y LIKE 'I%' filtra cadenas que empiezan por 'I'.
- INNER JOIN es la forma explícita y moderna de unir tablas; el producto cartesiano con condiciones en WHERE es la unión implícita.
- GROUP BY agrupa filas para aplicar funciones agregadas como SUM o AVG, y HAVING filtra los grupos resultantes, no las filas.
- Una subconsulta escalar puede compararse con un valor de otra tabla, como cuando se compara un objetivo con la suma de cuotas.
- SELECT INTO crea una tabla nueva a partir del resultado de una consulta, e INSERT INTO SELECT inserta filas en una tabla existente.
- Una vista (CREATE VIEW) guarda una consulta reutilizable, y un procedimiento almacenado (CREATE PROCEDURE) acepta parámetros y se ejecuta con EXECUTE.
Colección de Sentencias SQL Fundamentales para la Gestión de Datos
A continuación, se presenta una serie de consultas SQL corregidas y formateadas para ilustrar diversas operaciones de manipulación y definición de datos en un entorno de base de datos relacional.
Consultas de Recuperación de Datos (SELECT)
1. Selección de Pedidos con Filtros de Fecha y Fabricante
Recupera el número, fecha, fabricante, producto e importe de pedidos, excluyendo el último trimestre de 1989 y filtrando por fabricantes que inician con 'I'.
SELECT Num_Pedido, Fecha_Pedido, Fab, Producto, Importe
FROM Pedidos
WHERE Fecha_Pedido NOT BETWEEN '01/10/1989' AND '31/12/1989'
AND Fab LIKE 'I%'
ORDER BY Fecha_Pedido;2. Selección de Representantes de Ventas por Oficina o Condición de Contrato
Obtiene el nombre de los representantes cuyas oficinas pertenecen a los códigos (22, 11, 12) o aquellos cuyo director es nulo y su contrato es posterior al 01/06/1988.
SELECT Nombre
FROM Repventas
WHERE (Oficina_rep IN (22, 11, 12))
OR (Director IS NULL AND Contrato >= '01/06/1988');3. Unión Implícita (JOIN) y Filtrado por Importe
Muestra el número de pedido, importe y descripción del producto, uniendo las tablas Pedidos y Productos donde el importe es superior a 5000.
SELECT P.Num_Pedido, P.Importe, PR.Descripcion
FROM Pedidos P, Productos PR
WHERE P.Fab = PR.ID_Fab
AND P.Producto = PR.ID_Producto
AND P.Importe > 5000;4. Unión Explícita (INNER JOIN) y Filtrado
Versión moderna de la consulta anterior utilizando INNER JOIN para obtener la misma información.
SELECT P.Num_Pedido, P.Importe, PR.Descripcion
FROM Productos PR
INNER JOIN Pedidos P ON (PR.ID_Producto = P.Producto) AND (PR.ID_FAB = P.FAB)
WHERE P.Importe > 5000;5. Agregación de Importes por Representante
Calcula el importe total agrupado por el nombre del representante de ventas.
SELECT R.Nombre, SUM(P.Importe) AS "Total Importe"
FROM Pedidos P, RepVentas R
WHERE R.Num_Empl = P.Rep
GROUP BY R.Nombre;6. Agregación con Condición HAVING
Calcula el importe promedio por representante, pero solo incluye aquellos cuya suma total de importes supera 23000.
SELECT Rep, AVG(Importe) AS "Importe medio"
FROM Pedidos
GROUP BY Rep
HAVING SUM(Importe) > 23000;7. Cálculos Agregados por Producto (Estadísticas de Precio)
Obtiene el precio medio, máximo y mínimo para los productos del fabricante con ID 'ACI'.
SELECT AVG(Precio) AS "Precio Medio", MAX(Precio) AS "Precio Máximo",
MIN(Precio) AS "Precio Mínimo"
FROM Productos
WHERE Id_Fab = 'ACI';8. Consulta con Subconsulta Escalar (Comparación de Sumas)
Lista las ciudades de las oficinas cuyo objetivo es mayor que la suma de las cuotas de los representantes asignados a esa oficina.
SELECT Ciudad
FROM Oficinas O
WHERE O.Objetivo > (SELECT SUM(Cuota)
FROM RepVentas RV
WHERE RV.Oficina_Rep = O.Oficina);9. Consulta con Subconsulta NOT IN
Selecciona los nombres de los representantes que trabajan en oficinas donde las ventas no superan el objetivo.
SELECT Nombre
FROM RepVentas
WHERE Oficina_Rep NOT IN (SELECT Oficina
FROM Oficinas
WHERE Ventas > Objetivo);Consultas de Manipulación de Datos (DML) y Definición (DDL)
10. Creación de Tabla Temporal (SELECT INTO)
Crea una nueva tabla llamada AntPedidos con los pedidos realizados durante el año 1989.
SELECT Num_Pedido, Fecha_Pedido, Importe
INTO AntPedidos
FROM Pedidos
WHERE YEAR(Fecha_Pedido) = 1989;11. Inserción de Datos (INSERT INTO SELECT)
Inserta registros de la tabla Pedidos (fechas posteriores al 01/01/90) en la tabla AntPedidos (asumiendo que esta ya existe).
INSERT INTO AntPedidos (Num_Pedido, Fecha_Pedido, Importe)
SELECT Num_Pedido, Fecha_Pedido, Importe
FROM Pedidos
WHERE Fecha_Pedido > '01/01/90';12. Eliminación de Registros (DELETE)
Borra todos los pedidos cuya fecha es anterior al 15 de noviembre de 1989.
DELETE FROM Pedidos
WHERE Fecha_Pedido < '15/11/89';13. Actualización de Registros (UPDATE)
Actualiza la cuota a 100000 y reduce las ventas en un 15% (multiplicando por 0.85) para todos los representantes cuya cuota es nula.
UPDATE Repventas
SET Cuota = 100000, Ventas = Ventas * 0.85
WHERE CUOTA IS NULL;17. Creación de Vista y Consulta sobre ella
Define una vista para el inventario que calcula el valor total de cada producto (Precio * Existencias) y luego suma este valor total.
CREATE VIEW Inventario AS
SELECT ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS,
PRECIO * EXISTENCIAS AS Total_Producto
FROM Productos;
SELECT SUM(Total_Producto)
FROM Inventario;18. Creación y Ejecución de Procedimiento Almacenado
Define un procedimiento que selecciona detalles de oficinas en la región especificada, filtrando por ciudades que inician con 'N' y ventas superiores a 200000. Luego se ejecuta para la región 'Este'.
Nota: Se corrige la sintaxis del procedimiento para SQL Server/T-SQL, asumiendo el uso de parámetros.
CREATE PROCEDURE Elige_Region (@Elig_Reg CHAR(10))
AS
BEGIN
SELECT Oficina, Ciudad, Region, Ventas
FROM Oficinas
WHERE Ciudad LIKE 'N%'
AND Ventas > 200000
AND Region = @Elig_Reg;
END;
EXECUTE Elige_Region 'Este';Descargar
PDF Word HTMLPreguntas frecuentes
¿Cuál es la diferencia entre WHERE y HAVING en SQL?
WHERE filtra filas antes de la agrupación, mientras que HAVING filtra grupos después de aplicar GROUP BY. En el ejemplo, HAVING SUM(Importe) > 23000 selecciona solo los representantes cuyo total supera ese valor.
¿Qué hace SELECT INTO?
Crea una nueva tabla con el resultado de una consulta SELECT. En el ejemplo, genera la tabla AntPedidos con los pedidos de 1989.
¿Cómo se ejecuta un procedimiento almacenado con parámetros?
Se define con CREATE PROCEDURE indicando sus parámetros y se invoca con EXECUTE seguido del valor del parámetro, como EXECUTE Elige_Region 'Este'.
Ponte a prueba
Tarjetas de repaso
Pulsa una tarjeta para ver la respuesta.
Test
Preguntas generadas con IA a partir del documento: comprueba las respuestas con el texto.