Examen de práctica · 12 preguntas · sin instalar nada
Doce preguntas típicas de examen, con consola en la página. Se corrige ejecutando tu consulta de verdad, y cada respuesta explica la trampa.
Dos tablas: clientes y pedidos. Hay correos que faltan y un pedido sin cliente: las preguntas de examen viven de esos casos. Intenta cada una sin pista: «Ver solución» está para comprobar, no para empezar.
Si te atoras en un tema, las lecciones de SQL desde cero lo explican desde el principio, y la chuleta lo resume en una página.
clientes
| id | nombre | ciudad | |
|---|---|---|---|
| 1 | Ana Mora | Bahía Lumen | ana@correo.test |
| 2 | Mario Vidal | Puerto Sal | NULL |
| 3 | Marta Ríos | Bahía Lumen | marta@correo.test |
| 4 | Luis Peña | San Ciro | NULL |
| 5 | Sofía Cano | Puerto Sal | sofia@correo.test |
| 6 | Miguel Soto | San Ciro | miguel@correo.test |
| 7 | Carla Díaz | Bahía Lumen | NULL |
pedidos
| id | cliente_id | fecha | total | estado |
|---|---|---|---|---|
| 1 | 1 | 2024-02-28 10:00 | 120 | pagado |
| 2 | 1 | 2024-03-01 09:30 | 80 | pagado |
| 3 | 2 | 2024-03-15 18:20 | 250 | pagado |
| 4 | 3 | 2024-03-31 21:45 | 60 | cancelado |
| 5 | 3 | 2024-04-02 11:00 | 300 | pagado |
| 6 | 5 | 2024-03-10 12:10 | 40 | pagado |
| 7 | 5 | 2024-05-06 16:00 | 500 | pagado |
| 8 | 2 | 2024-01-20 08:15 | 90 | cancelado |
| 9 | NULL | 2024-03-20 13:00 | 75 | pagado |
| 10 | 3 | 2024-05-11 19:30 | 110 | pagado |
Puedes escribir aquí mismo: cada ejercicio se ejecuta con DuckDB en tu navegador, sin instalar nada. Con el teclado: Ctrl + Enter.
¿Cuántos clientes tienen correo? Devuelve un solo número.
COUNT(*) cuenta filas; COUNT(columna) ignora los NULL.
El nombre de los clientes sin correo.
Nada es igual a NULL, ni siquiera NULL: se pregunta con IS NULL.
¿En cuántas ciudades distintas hay clientes? Un solo número.
COUNT(DISTINCT columna) cuenta valores diferentes.
El nombre de los clientes cuyo nombre empieza por M.
LIKE con % : el % significa «cualquier cosa después».
El id y la fecha de los pedidos de marzo de 2024. La consulta escrita se deja uno: encuéntralo.
'2024-03-31' significa las 00:00 de ese día. Usa >= el primer día y < el primer día del mes siguiente.
El cliente_id y la suma de sus pedidos, sin el pedido que no tiene cliente.
Quita el pedido sin cliente antes de agrupar: WHERE cliente_id IS NOT NULL
El cliente_id y la suma de sus pedidos, sólo si suma 400 o más. La consulta escrita da error.
Una suma no se puede filtrar en WHERE: va en HAVING, después del GROUP BY.
El id y el total de los tres pedidos más altos, del mayor al menor.
ORDER BY total DESC y LIMIT 3, en ese orden.
El nombre del cliente y el total de los pedidos con estado pagado.
JOIN clientes c ON c.id = p.cliente_id, y después WHERE p.estado = 'pagado'
El nombre de los clientes que nunca han pedido, usando LEFT JOIN.
Las filas sin pareja tienen NULL en las columnas de pedidos: WHERE p.id IS NULL
Lo mismo que antes, ahora con NOT IN. La consulta escrita devuelve cero filas: arréglala sin cambiar a JOIN.
La subconsulta trae un NULL, y con un NULL dentro NOT IN nunca es verdadero. Quítalo con WHERE cliente_id IS NOT NULL.
El id y el total de los pedidos por encima de la media.
AVG no se puede usar en WHERE. Calcúlala aparte en una subconsulta: (SELECT AVG(total) FROM pedidos)
Examen terminado. Si llegaste hasta aquí, un caso del juego te va a parecer más divertido que difícil.
Ahora, con un misterio: «El expediente que nadie pidió» →