Cómo se corrige
Tu consulta se ejecuta sobre una copia limpia de la base y su resultado se compara con el de la solución. No importa cómo la escribiste: si llega a las mismas filas, está bien. El orden solo se revisa cuando el ejercicio lo pide.
Tu avance queda guardado en este navegador. No hay cuenta ni ranking.
La base
| Tabla | Qué guarda |
|---|---|
productos | id, codigo, nombre, categoria_id, proveedor_id, precio, stock |
categorias | id, nombre |
proveedores | id, nombre, comuna |
sucursales | id, nombre, comuna, region |
pedidos | id, fecha, sucursal_id, estado |
detalle_pedidos | pedido_id, producto_id, cantidad, precio_unitario |
Los datos son inventados. Las empresas y sucursales no existen.
Todos los ejercicios
Consultas simples
- 1Todos los productos. Muestra todas las columnas de la tabla productos.Hecho
Ver una solución
SELECT * FROM productos;
- 2Solo dos columnas. Muestra el nombre y el precio de cada producto.Hecho
Ver una solución
SELECT nombre, precio FROM productos;
- 3Más caros que 20.000. Muestra nombre y precio de los productos que cuestan más de 20000.Hecho
Ver una solución
SELECT nombre, precio FROM productos WHERE precio > 20000;
- 4Sin stock. Muestra el código y el nombre de los productos con stock cero.Hecho
Ver una solución
SELECT codigo, nombre FROM productos WHERE stock = 0;
- 5Del más caro al más barato. Muestra nombre y precio de todos los productos, partiendo por el más caro.Hecho
Ver una solución
SELECT nombre, precio FROM productos ORDER BY precio DESC, nombre;
- 6Los cinco más baratos. Muestra nombre y precio de los cinco productos más baratos.Hecho
Ver una solución
SELECT nombre, precio FROM productos ORDER BY precio LIMIT 5;
- 7Buscar por palabra. Muestra el nombre de los productos que contienen la palabra «llave».Hecho
Ver una solución
SELECT nombre FROM productos WHERE nombre LIKE '%llave%';
- 8Sucursales de una región. Muestra nombre y comuna de las sucursales de la región Metropolitana.Hecho
Ver una solución
SELECT nombre, comuna FROM sucursales WHERE region = 'Metropolitana';
Contar y agrupar
- 9Contar productos. ¿Cuántos productos hay en total?Hecho
Ver una solución
SELECT COUNT(*) FROM productos;
- 10Precio promedio. Calcula el precio promedio de los productos, redondeado a entero.Hecho
Ver una solución
SELECT ROUND(AVG(precio)) FROM productos;
- 11Productos por categoría. Muestra cada categoria_id y cuántos productos tiene.Hecho
Ver una solución
SELECT categoria_id, COUNT(*) FROM productos GROUP BY categoria_id;
- 12Valor del inventario. Calcula cuánto vale todo el inventario: precio por stock, sumado.Hecho
Ver una solución
SELECT SUM(precio * stock) FROM productos;
- 13Categorías grandes. Muestra los categoria_id que tienen más de 4 productos, junto a su cantidad.Hecho
Ver una solución
SELECT categoria_id, COUNT(*) FROM productos GROUP BY categoria_id HAVING COUNT(*) > 4;
- 14Pedidos por estado. Cuenta cuántos pedidos hay en cada estado.Hecho
Ver una solución
SELECT estado, COUNT(*) FROM pedidos GROUP BY estado;
Unir tablas
- 15Producto y categoría. Muestra el nombre de cada producto junto al nombre de su categoría.Hecho
Ver una solución
SELECT p.nombre, c.nombre FROM productos p JOIN categorias c ON c.id = p.categoria_id;
- 16Una categoría por nombre. Muestra el nombre de los productos de la categoría «Gasfitería».Hecho
Ver una solución
SELECT p.nombre FROM productos p JOIN categorias c ON c.id = p.categoria_id WHERE c.nombre = 'Gasfitería';
- 17Contar con nombres. Muestra el nombre de cada categoría y cuántos productos tiene.Hecho
Ver una solución
SELECT c.nombre, COUNT(*) FROM productos p JOIN categorias c ON c.id = p.categoria_id GROUP BY c.nombre;
- 18Pedidos con sucursal. Muestra el id de cada pedido, su fecha y el nombre de su sucursal.Hecho
Ver una solución
SELECT pe.id, pe.fecha, s.nombre FROM pedidos pe JOIN sucursales s ON s.id = pe.sucursal_id;
- 19Unidades vendidas. Muestra el nombre de cada producto vendido y sus unidades totales, de mayor a menor.Hecho
Ver una solución
SELECT p.nombre, SUM(d.cantidad) AS unidades FROM detalle_pedidos d JOIN productos p ON p.id = d.producto_id GROUP BY p.nombre ORDER BY unidades DESC, p.nombre;
- 20Total de cada pedido. Muestra el pedido_id y el total en pesos de cada pedido.Hecho
Ver una solución
SELECT pedido_id, SUM(cantidad * precio_unitario) FROM detalle_pedidos GROUP BY pedido_id;
- 21Nunca pedidos. Muestra el nombre de los productos que no aparecen en ningún pedido.Hecho
Ver una solución
SELECT p.nombre FROM productos p LEFT JOIN detalle_pedidos d ON d.producto_id = p.id WHERE d.producto_id IS NULL;
- 22La sucursal con más pedidos. Muestra el nombre de la sucursal con más pedidos y cuántos tiene.Hecho
Ver una solución
SELECT s.nombre, COUNT(*) AS pedidos FROM pedidos pe JOIN sucursales s ON s.id = pe.sucursal_id GROUP BY s.nombre ORDER BY pedidos DESC LIMIT 1;
Subconsultas
- 23Sobre el promedio. Muestra nombre y precio de los productos más caros que el precio promedio.Hecho
Ver una solución
SELECT nombre, precio FROM productos WHERE precio > (SELECT AVG(precio) FROM productos);
- 24El más caro de cada categoría. Muestra categoria_id, nombre y precio del producto más caro de cada categoría.Hecho
Ver una solución
SELECT categoria_id, nombre, precio FROM productos p WHERE precio = (SELECT MAX(precio) FROM productos x WHERE x.categoria_id = p.categoria_id);
- 25Proveedores sin faltantes. Muestra el nombre de los proveedores que no tienen ningún producto con stock cero.Hecho
Ver una solución
SELECT nombre FROM proveedores v WHERE NOT EXISTS (SELECT 1 FROM productos p WHERE p.proveedor_id = v.id AND p.stock = 0);
- 26Pedidos grandes. Muestra el id de los pedidos cuyo total supera los 100000 pesos.Hecho
Ver una solución
SELECT pedido_id FROM detalle_pedidos GROUP BY pedido_id HAVING SUM(cantidad * precio_unitario) > 100000;
- 27Pedidos por mes. Muestra cada mes de 2026 en formato AAAA-MM y cuántos pedidos tuvo, en orden.Hecho
Ver una solución
SELECT strftime('%Y-%m', fecha) AS mes, COUNT(*) FROM pedidos GROUP BY mes ORDER BY mes; - 28Clasificar por precio. Muestra cada nombre de producto y una columna con «barato» si cuesta menos de 5000, «medio» si cuesta menos de 20000 y «caro» en otro caso.Hecho
Ver una solución
SELECT nombre, CASE WHEN precio < 5000 THEN 'barato' WHEN precio < 20000 THEN 'medio' ELSE 'caro' END FROM productos;
Cambiar datos
- 29Agregar una categoría. Agrega la categoría «Ferretería general» con el id 9.Hecho
Ver una solución
INSERT INTO categorias VALUES (9, 'Ferretería general');
- 30Subir precios. Sube en 10 % el precio de los productos de la categoría 1.Hecho
Ver una solución
UPDATE productos SET precio = precio * 1.1 WHERE categoria_id = 1;
- 31Borrar lo cancelado. Borra de detalle_pedidos las filas de los pedidos con estado «cancelado».Hecho
Ver una solución
DELETE FROM detalle_pedidos WHERE pedido_id IN (SELECT id FROM pedidos WHERE estado = 'cancelado');
- 32Crear una tabla. Crea una tabla llamada marcas con las columnas id (entero, clave primaria) y nombre (texto).Hecho
Ver una solución
CREATE TABLE marcas (id INTEGER PRIMARY KEY, nombre TEXT);
Preguntas frecuentes
¿Sirven para preparar una prueba o entrevista?
Cubren lo que suele pedirse: filtros, agrupación, JOIN, subconsultas y cambios de datos.
¿Puedo escribirlo distinto a la solución?
Sí. Se compara el resultado, no el texto de la consulta.