Saltar al contenido

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, columna3
2FROM nombre_de_tabla
3WHERE 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 clientes
2SELECT * FROM clientes;
3
4-- Ver solo nombre y ciudad (mejor práctica)
5SELECT nombre, ciudad FROM clientes;
6
7-- Puedes renombrar columnas con AS (alias)
8SELECT
9 nombre AS cliente,
10 email AS correo_electronico
11FROM 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 productos
2SELECT nombre, precio FROM productos;
3
4-- Todas las categorías
5SELECT * FROM categorias;
6
7-- Todos los pedidos
8SELECT 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 Madrid
2SELECT nombre, email
3FROM clientes
4WHERE ciudad = 'Madrid';
5
6-- Productos que cuestan más de 100€
7SELECT nombre, precio
8FROM productos
9WHERE precio > 100;
10
11-- Pedidos completados
12SELECT id, importe, fecha
13FROM pedidos
14WHERE 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 Madrid
2SELECT nombre, ciudad
3FROM clientes
4WHERE es_vip = TRUE AND ciudad = 'Madrid';
5
6-- Clientes de Madrid O Barcelona
7SELECT nombre, ciudad
8FROM clientes
9WHERE ciudad = 'Madrid' OR ciudad = 'Barcelona';
10
11-- Clientes que NO son VIP
12SELECT nombre, ciudad
13FROM clientes
14WHERE NOT es_vip;
15
16-- Cuidado con la precedencia: usa paréntesis
17SELECT nombre, ciudad, es_vip
18FROM clientes
19WHERE (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 hay
2SHOW TABLES;
3
4-- Ver las columnas de cada tabla
5DESCRIBE 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...