Consultas SQL fundamentales: SELECT, JOIN, agregaciones, subconsultas y DML/DDL

InformáticaActualizado el 5,83 KB

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.

Ponte a prueba

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 HTML

Preguntas 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

1. ¿Qué operador se usa para excluir un intervalo de fechas en la consulta de pedidos?
2. ¿Qué cláusula filtra los grupos tras aplicar GROUP BY?
3. ¿Qué patrón selecciona cadenas que empiezan por 'I'?
4. ¿Qué sentencia crea una tabla nueva a partir del resultado de una consulta?
5. En la consulta que actualiza representantes, ¿qué operación se aplica a las ventas?
6. ¿Qué devuelve la consulta sobre la vista Inventario?

Preguntas generadas con IA a partir del documento: comprueba las respuestas con el texto.