Saltar al contenido

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, 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

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 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

### 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.

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 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.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

[01]

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).

Cargando editor...
[02]

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.

Cargando editor...
[03]

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.

Cargando editor...
[04]

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.

Cargando editor...
[05]

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.

Cargando editor...

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...