Clase 12 · 35 minGratis
Reto final: casos de negocio
Clase 12 del curso gratis SQL desde Cero: cinco pedidos de negocio reales resueltos con SQL. Crear tablas con llaves foráneas, insertar ventas, aplicar un descuento con UPDATE y eliminar productos sin ventas con DELETE.
Toca cualquier marca ▸ 0:00 de los apuntes y el video salta a ese momento. Abrir en YouTube
El cierre del curso son pedidos de negocio: alguien del equipo necesita
algo, y tú lo traduces a SQL . Tocan CREATE, INSERT,
UPDATE y DELETE, los comandos que más cuidado exigen
.
La base tiene tres tablas : clientes (nombre, sexo,
edad…), productos (id, nombre, precio, categoría) y ventas (orden,
producto, cliente, cantidad, total pagado y fecha). Cada editor arranca con la
base original; los ejercicios no dependen unos de otros.
Ejercicio 1: una tabla de categorías
«Queremos una tabla que guarde las categorías con su descripción.» Créala
con id_categoria (llave primaria que se numere sola), nombre_categoria
(obligatorio) y descripcion.
Con AUTOINCREMENT, nadie tiene que inventar el id al insertar
. Y hoy el espacio sobra: un nombre largo y explícito
como nombre_categoria vale más que una abreviatura que nadie entiende
.
Ejercicio 2: registrar devoluciones
«Necesitamos llevar el control de las devoluciones: la venta original, el
producto, el cliente, la fecha y la razón.» La tabla devoluciones tiene que
declarar su llave primaria (id_devolucion) y sus tres llaves foráneas:
id_orden hacia ventas, id_producto hacia productos e id_cliente
hacia clientes. Completa también fecha y razon.
¿El cliente no se podría sacar de la venta? Sí; guardarlo otra vez es
redundante. En una base pequeña no importa; con millones de registros, sería
un criterio para no hacerlo . La sintaxis de la llave
foránea se lee casi como una frase: la llave foránea id_orden hace
referencia a ventas(id_orden) .
Ejercicio 3: insertar ventas recientes
«Registren estas tres ventas.»
- Orden 101: producto 3, cliente 1, cantidad 2, total 400, fecha 2024-10-05.
- Orden 102: producto 6, cliente 4, cantidad 1, total 120, fecha 2024-10-06.
- Orden 103: producto 9, cliente 2, cantidad 3, total 150, fecha 2024-10-07.
id_orden es autoincremental: si no lo escribes, la base pone el siguiente.
Aquí se escribe porque el pedido de negocio trae números concretos
. Y se valida con un SELECT … WHERE id_orden IN (…)
.
Ejercicio 4: 10 % de descuento a los tres más caros
«Promoción especial: los tres accesorios más caros bajan un 10 %.» Primero, encuéntralos :
Reloj de lujo (1.200), collar de esmeraldas (1.000) y collar de oro (900).
SQL Server usa TOP 3 en vez de LIMIT 3: misma idea, otro dialecto. Ahora
escribe el UPDATE usando esa consulta como subconsulta
:
La trampa : ejecútalo dos veces y verás que el
segundo descuento no cae sobre los mismos productos. El collar de oro quedó en
810 y el collar de perlas (850) pasó a ser el tercero más caro. Para que el
cambio sea repetible, filtra por los id_producto que viste en el SELECT.
Ejercicio 5: eliminar productos sin ventas
«Hay productos que nunca se vendieron; se descontinúan y tienen que
desaparecer de la tabla.» El camino del video: un LEFT JOIN entre
productos y las ventas, para ver qué no cruzó .
La trampa: en ventas un mismo producto aparece muchas veces. Por eso el join
se hace contra SELECT DISTINCT id_producto FROM ventas
:
Los productos 46, 47 y 48 . Ahora bórralos:
Un DELETE así de poderoso es la razón por la que, en muchas empresas, tu
perfil no tiene permiso de borrar . Con NOT IN también
se resuelve, y en una línea menos:
DELETE FROM productos WHERE id_producto NOT IN (SELECT id_producto FROM ventas);
Terminaste el curso
Ya sabes consultar, filtrar, resumir, cruzar tablas, anidar consultas, crear estructuras y modificar datos con cuidado. Lo que sigue es practicar con datos de verdad: descarga las bases de este curso, ábrelas en DB Browser for SQLite y hazte tus propias preguntas.
