03 - SQL: DML y consultas
El DML (*Data Manipulation Language*) opera sobre los datos: insertar, consultar, modificar y eliminar filas.
1. INSERT
INSERT INTO publisher (name) VALUES ('Anaya');
INSERT INTO book (title, price, publisher_id)
VALUES ('Código limpio', 29.95, 1);
-- varias filas de una vez
INSERT INTO book (title, price, publisher_id)
VALUES ('Clean Code', 34.50, 1), ('Refactoring', 31.00, 1);
Las columnas autogeneradas (id) y las que tienen DEFAULT pueden omitirse.
2. SELECT
SELECT id, title, price FROM book; SELECT * FROM book WHERE price > 30; SELECT title, price FROM book WHERE publisher_id = 1 AND price <= 35 ORDER BY price DESC LIMIT 10;
| Cláusula | Función |
|---|---|
WHERE | Filtra filas |
ORDER BY | Ordena el resultado (ASC/DESC) |
LIMIT | Limita el número de filas |
DISTINCT | Elimina duplicados |
Operadores de comparación: =, <>, <, >=, BETWEEN, IN, LIKE (con % como comodín), IS NULL para comparar con NULL.
3. Agregación
SELECT COUNT(*) FROM book WHERE publisher_id = 1; SELECT publisher_id, COUNT(*) AS total, AVG(price) AS average_price FROM book GROUP BY publisher_id HAVING COUNT(*) > 5;
| Función | Devuelve |
|---|---|
COUNT | Número de filas |
SUM / AVG | Suma y media |
MIN / MAX | Mínimo y máximo |
WHERE filtra filas antes de agrupar; HAVING filtra los grupos ya agregados.
4. JOIN
Un JOIN combina filas de dos tablas por sus claves:
SELECT book.title, publisher.name AS publisher FROM book INNER JOIN publisher ON book.publisher_id = publisher.id; -- libros y su autor, atravesando la tabla de unión SELECT book.title, author.name AS author FROM book INNER JOIN book_author ON book_author.book_id = book.id INNER JOIN author ON author.id = book_author.author_id;
| Join | Devuelve |
|---|---|
INNER JOIN | Solo las filas con correspondencia en ambas tablas |
LEFT JOIN | Todas las de la izquierda; NULL si no hay correspondencia |
-- editoriales sin libros (LEFT JOIN + IS NULL) SELECT publisher.name FROM publisher LEFT JOIN book ON book.publisher_id = publisher.id WHERE book.id IS NULL;
5. UPDATE y DELETE
UPDATE book SET price = 24.95 WHERE id = 42; DELETE FROM book WHERE id = 42;
UPDATE y DELETE sin WHERE afectan a todas las filas. Ejecuta primero el SELECT con el mismo WHERE para comprobar qué filas van a cambiar.