lección 2
Tu primera consulta: SELECT, FROM y WHERE
La anatomía de una consulta SQL: seleccionar columnas, elegir tabla y filtrar filas. Los tres bloques fundamentales.
⏱ 55 min
Cada consulta SQL que escribas en tu vida — desde la más simple hasta la más compleja — está construida con los mismos bloques fundamentales. Hoy vas a aprender los tres primeros: SELECT (qué columnas quiero), FROM (de qué tabla) y WHERE (qué filas me interesan). Con solo estos tres ingredientes ya puedes responder preguntas reales de negocio.
Piénsalo como ir a una biblioteca: FROM es elegir la estantería (la tabla), SELECT es elegir qué información del libro te interesa (título, autor, año) y WHERE es el filtro ("solo libros publicados después de 2020"). Sencillo, ¿verdad? Vamos a verlo en acción.
### Anatomía de una consulta SQL
1SELECT columna1, columna2, columna32FROM nombre_de_tabla3WHERE condición;
La estructura básica: SELECT → FROM → WHERE
- SELECT — lista las columnas que quieres ver en el resultado. Puedes poner * para "todas".
- FROM — indica de qué tabla lees los datos. Solo una tabla por ahora (luego veremos JOINs).
- WHERE — filtra filas que cumplen una condición. Es opcional: sin WHERE, obtienes TODAS las filas.
- El punto y coma (;) al final indica que la consulta terminó.
### SELECT: elegir qué columnas ver
El SELECT más simple pide todas las columnas con un asterisco (*). Es útil para explorar, pero en producción NUNCA debes usarlo — lee más datos de los necesarios y si alguien añade columnas a la tabla, tu consulta devuelve cosas inesperadas.
1-- Ver TODAS las columnas de la tabla clientes2SELECT * FROM clientes;34-- Ver solo nombre y ciudad (mejor práctica)5SELECT nombre, ciudad FROM clientes;67-- Puedes renombrar columnas con AS (alias)8SELECT9 nombre AS cliente,10 email AS correo_electronico11FROM clientes;
Tres formas de usar SELECT: *, columnas específicas y con alias
Te lo repito porque es la costumbre que más pronto se coge y más tarde se pierde: SELECT * para explorar, columnas nombradas una a una para todo lo que vaya a quedarse escrito. En los ejercicios verás que siempre te pido columnas concretas. Es a propósito.
### FROM: elegir la tabla
FROM indica la tabla fuente. En nuestra base de datos tenemos: clientes, categorias, productos, pedidos y empleados. Por ahora trabajamos con una tabla a la vez — cuando lleguemos a JOINs combinaremos varias.
1-- Todos los productos2SELECT nombre, precio FROM productos;34-- Todas las categorías5SELECT * FROM categorias;67-- Todos los pedidos8SELECT id, cliente_id, importe, fecha FROM pedidos;
Consultando diferentes tablas
### WHERE: filtrar filas con condiciones
WHERE es donde la magia empieza. Sin WHERE obtienes TODAS las filas. Con WHERE, solo las que cumplen tu condición. Es como poner un colador: solo pasan los datos que te interesan.
1-- Clientes de Madrid2SELECT nombre, email3FROM clientes4WHERE ciudad = 'Madrid';56-- Productos que cuestan más de 100€7SELECT nombre, precio8FROM productos9WHERE precio > 100;1011-- Pedidos completados12SELECT id, importe, fecha13FROM pedidos14WHERE estado = 'completado';
WHERE con igualdad (=), mayor que (>) y texto
### Operadores de comparación
- = → igual a (OJO: es un solo igual, no doble como en Python)
- != o <> → distinto de
- > → mayor que
- < → menor que
- >= → mayor o igual
- <= → menor o igual
Un aviso que te va a hacer falta enseguida: si a una fila le falta el dato, no cumple ninguna comparación. Ni la afirmativa ni la negativa. En la tabla de clientes hay gente de la que no consta si es VIP, y esas filas no aparecen ni al pedir es_vip = TRUE ni al pedir es_vip != TRUE — porque «no se sabe» no es ni verdadero ni falso. Compruébalo tú en el primer ejercicio: lanza los dos filtros contrarios, mira cuántas filas dice el editor en cada uno, y verás que no suman el total de la tabla. Hay una lección entera más adelante dedicada a esto. De momento quédate con el aviso: cuando dos filtros contrarios no sumen el total, no te has equivocado — es que hay datos que faltan.
### Combinar condiciones: AND, OR, NOT
Puedes combinar múltiples condiciones con AND (todas deben cumplirse), OR (al menos una) y NOT (negar). Cuando mezclas AND y OR, usa paréntesis para que la precedencia sea clara.
1-- Clientes VIP de Madrid2SELECT nombre, ciudad3FROM clientes4WHERE es_vip = TRUE AND ciudad = 'Madrid';56-- Clientes de Madrid O Barcelona7SELECT nombre, ciudad8FROM clientes9WHERE ciudad = 'Madrid' OR ciudad = 'Barcelona';1011-- Clientes que NO son VIP12SELECT nombre, ciudad13FROM clientes14WHERE NOT es_vip;1516-- Cuidado con la precedencia: usa paréntesis17SELECT nombre, ciudad, es_vip18FROM clientes19WHERE (ciudad = 'Madrid' OR ciudad = 'Sevilla') AND es_vip = TRUE;
AND, OR, NOT y paréntesis para condiciones compuestas
AND tiene mayor precedencia que OR. Sin paréntesis, "ciudad = Madrid OR ciudad = Sevilla AND es_vip = TRUE" se interpreta como "Madrid O (Sevilla Y VIP)" — probablemente no es lo que querías. Cuando mezcles AND y OR, usa SIEMPRE paréntesis. Y no te lo creas porque lo diga aquí: copia las dos consultas del ejemplo de arriba, la de con paréntesis y la de sin, y compara cuántas filas te dice el editor en cada caso. La diferencia es de varias veces, por dos caracteres.
Comillas en SQL: los VALORES de texto van siempre entre comillas SIMPLES ('Madrid'). Las comillas dobles ("columna") se usan para nombres de columna o tabla que tienen espacios o coinciden con palabras reservadas. Si escribes WHERE ciudad = "Madrid", el motor entiende «la columna llamada Madrid» — no el texto — y te da un error diciendo que esa columna no existe. Pasa igual aquí con DuckDB que en PostgreSQL. Pruébalo: es un error que vas a cometer y conviene reconocerlo a la primera.
### Las tablas con las que vas a trabajar
En los ejercicios de esta lección y las siguientes vas a usar datos de un e-commerce. Estas cinco tablas son las que necesitas hoy, y te las puedes sacar tú mismo con SHOW TABLES y DESCRIBE en cualquier momento. Aviso para que no te descuadre: SHOW TABLES te va a devolver nueve, no cinco. Las otras cuatro (lineas_pedido, vendedores, ventas_diarias y ventas_mensuales) están ahí esperando a las lecciones donde cruzarás tablas y compararás periodos; ignóralas por ahora.
1-- Ver qué tablas hay2SHOW TABLES;34-- Ver las columnas de cada tabla5DESCRIBE clientes;6DESCRIBE pedidos;7DESCRIBE productos;
SHOW TABLES y DESCRIBE: pregúntale a la base, no te fíes de la memoria
- clientes (5.004 filas): id, nombre, email, ciudad, fecha_registro, canal_adquisicion, es_vip
- pedidos (20.003 filas): id, cliente_id, producto_id, cantidad, fecha, importe, estado
- productos (200 filas): id, nombre, categoria_id, precio, stock
- categorias (5 filas): id, nombre, descripcion
- empleados (100 filas): id, nombre, departamento, salario, fecha_contratacion
Regístrate para guardar tu progreso.
## comentarios
Reporta erratas, ayuda a otros o comparte tu opinión. Sé constructivo.
Inicia sesión para comentar y responder.
cargando comentarios...