lección 3
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
Consejo de senior: SELECT * es para explorar en tu terminal. En código que va a producción, siempre lista las columnas explícitamente. He visto pipelines romperse porque alguien añadió una columna de 10MB (un BLOB) y el SELECT * empezó a devolver gigas de datos inesperados.
### FROM: elegir la tabla
FROM indica la tabla fuente. En nuestra base de datos tenemos: clientes, categorias, productos y pedidos. 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
### 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.
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", algunos motores lo interpretan como "la columna llamada Madrid" — no como el texto. DuckDB es tolerante, pero en PostgreSQL dará error.
### 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 son las tablas que tienes disponibles — te las puedes sacar tú mismo con SHOW TABLES y DESCRIBE en cualquier momento:
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.000 filas): id, nombre, email, ciudad, fecha_registro, canal_adquisicion, es_vip
- pedidos (20.000 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
## ejercicios
Seleccionar clientes específicos
El equipo de marketing quiere enviar una campaña a los clientes VIP. Escribe una consulta que devuelva, en este orden: nombre y email de todos los clientes que son VIP (es_vip = TRUE).
Productos premium
El CEO quiere saber qué productos cuestan más de 200€ para destacarlos en la web. Muestra, en este orden: nombre y precio.
Pedidos completados en un rango de fechas
Finanzas necesita los pedidos completados entre 2024-01-01 y 2024-06-30. Muestra, en este orden: id, importe y fecha.
Clientes de las dos ciudades principales
Logística necesita los clientes de Valencia y Sevilla para calcular costes de envío. Muestra, en este orden: nombre y ciudad.
Productos con stock bajo y precio alto
El equipo de compras necesita saber qué productos tienen menos de 30 unidades en stock Y cuestan más de 100€. Muestra, en este orden: nombre, precio y stock.
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...