Consultar con SELECT
💡 🎯 Al terminar esta lección podrás…
- Elegir columnas con
SELECT, usar alias y quitar repetidos conDISTINCT. - Filtrar filas con
WHERE,AND,OR,BETWEEN,INyLIKE. - Ordenar resultados y limitarlos con
ORDER BY,LIMITyOFFSET. - Escribir las cláusulas en el orden correcto y manejar
NULL.
1.SELECT y FROM: pedir columnas
SELECT es la instrucción que más usarás. Su forma mínima tiene dos partes: qué columnas quieres (SELECT) y de qué tabla (FROM). Un asterisco * significa «todas las columnas».
SELECT * FROM productos;
Resultado esperado
| id | nombre | categoria | precio | stock |
|---|---|---|---|---|
| 1 | Teclado | Periféricos | 120.00 | 15 |
| 2 | Ratón | Periféricos | 45.50 | 40 |
| 3 | Monitor FHD | Pantallas | 650.00 | 8 |
| 4 | Auriculares | Audio | 89.90 | 0 |
| 5 | Webcam | Periféricos | 150.00 | 12 |
| 6 | Altavoz | Audio | 99.00 | 25 |
| 7 | Monitor 4K | Pantallas | 899.00 | 3 |
| 8 | Cable HDMI | Accesorios | 15.00 | 100 |
Casi siempre conviene pedir solo las columnas que necesitas, separadas por comas:
SELECT nombre, precio
FROM productos;
Resultado esperado
| nombre | precio |
|---|---|
| Teclado | 120.00 |
| Ratón | 45.50 |
| Monitor FHD | 650.00 |
| Auriculares | 89.90 |
| Webcam | 150.00 |
| Altavoz | 99.00 |
| Monitor 4K | 899.00 |
| Cable HDMI | 15.00 |
Dos herramientas muy útiles al elegir columnas:
ASpone un alias (otro nombre) a una columna o a un cálculo.DISTINCTelimina los resultados repetidos.
-- Valor del inventario de cada producto
SELECT nombre, precio * stock AS valor
FROM productos;
-- ¿Qué categorías existen?
SELECT DISTINCT categoria
FROM productos;
Resultado esperado de la primera consulta
| nombre | valor |
|---|---|
| Teclado | 1800.00 |
| Ratón | 1820.00 |
| Monitor FHD | 5200.00 |
| Auriculares | 0.00 |
| Webcam | 1800.00 |
| Altavoz | 2475.00 |
| Monitor 4K | 2697.00 |
| Cable HDMI | 1500.00 |
Resultado esperado de la segunda consulta
| categoria |
|---|
| Periféricos |
| Pantallas |
| Audio |
| Accesorios |
📌 Nota · Un SELECT no cambia nada
Consultar es de solo lectura: ni SELECT ni los cálculos modifican los datos guardados. Puedes probar todo sin miedo. Los cambios llegan en la lección 3.
2.WHERE: filtrar filas
Sin WHERE obtienes todas las filas. Con WHERE indicas una condición y solo se devuelven las filas que la cumplen.
SELECT nombre, precio
FROM productos
WHERE precio > 100;
Resultado esperado
| nombre | precio |
|---|---|
| Teclado | 120.00 |
| Monitor FHD | 650.00 |
| Webcam | 150.00 |
| Monitor 4K | 899.00 |
| Operador | Significado | Ejemplo |
|---|---|---|
= | igual a | categoria = 'Audio' |
<> o != | distinto de | categoria <> 'Audio' |
> · >= | mayor que · mayor o igual | stock >= 10 |
< · <= | menor que · menor o igual | precio < 50 |
⚠️ Importante · Texto entre comillas simples
Los valores de texto van entre comillas simples: 'Audio'. Las comillas dobles "…" son para nombres de tablas o columnas, y en PostgreSQL usarlas con un texto da error. Los números van sin comillas. Además, la comparación = con texto distingue mayúsculas de minúsculas: 'audio' no es igual a 'Audio'.
Combinar condiciones: AND, OR, NOT
AND: deben cumplirse las dos condiciones.OR: basta con que se cumpla una.NOT: invierte una condición.
-- Periféricos que tengan stock
SELECT nombre, categoria, stock
FROM productos
WHERE categoria = 'Periféricos' AND stock > 0;
-- Con paréntesis, para que quede claro
SELECT nombre, categoria, precio
FROM productos
WHERE (categoria = 'Audio' OR categoria = 'Pantallas')
AND precio < 700;
Resultado de la primera consulta
| nombre | categoria | stock |
|---|---|---|
| Teclado | Periféricos | 15 |
| Ratón | Periféricos | 40 |
| Webcam | Periféricos | 12 |
Resultado de la segunda consulta
| nombre | categoria | precio |
|---|---|---|
| Monitor FHD | Pantallas | 650.00 |
| Auriculares | Audio | 89.90 |
| Altavoz | Audio | 99.00 |
💡 Consejo · Usa paréntesis cuando mezcles AND y OR
AND se evalúa antes que OR, como la multiplicación antes que la suma. Sin paréntesis, a OR b AND c significa a OR (b AND c), y suele no ser lo que querías.
BETWEEN e IN
Dos atajos que hacen las consultas más legibles: BETWEEN comprueba un rango (incluye los dos extremos) e IN comprueba si el valor está en una lista.
SELECT nombre, precio
FROM productos
WHERE precio BETWEEN 40 AND 100;
SELECT nombre, categoria
FROM productos
WHERE categoria IN ('Audio', 'Accesorios');
Resultado de la primera consulta
| nombre | precio |
|---|---|
| Ratón | 45.50 |
| Auriculares | 89.90 |
| Altavoz | 99.00 |
Resultado de la segunda consulta
| nombre | categoria |
|---|---|
| Auriculares | Audio |
| Altavoz | Audio |
| Cable HDMI | Accesorios |
3.LIKE: buscar patrones de texto
LIKE busca texto que se parezca a un patrón. Tiene dos comodines:
%representa cualquier cantidad de caracteres (también ninguno)._representa exactamente un carácter.
| Patrón | Encuentra… |
|---|---|
'Monitor%' | Textos que empiezan por Monitor |
'%or' | Textos que terminan en «or» |
'%cam%' | Textos que contienen «cam» |
'Ca_le HDMI' | «Cable HDMI», pero el cuarto carácter puede ser cualquiera |
SELECT nombre, precio
FROM productos
WHERE nombre LIKE 'Monitor%';
SELECT nombre
FROM productos
WHERE nombre LIKE '%cam%';
Resultado de la primera consulta
| nombre | precio |
|---|---|
| Monitor FHD | 650.00 |
| Monitor 4K | 899.00 |
Resultado de la segunda consulta
| nombre |
|---|
| Webcam |
⚠️ Importante · Mayúsculas: SQLite y PostgreSQL difieren
En SQLite, LIKE ignora mayúsculas y minúsculas para las letras ASCII ('%cam%' encuentra «Webcam»). En PostgreSQL, LIKE sí distingue mayúsculas: para ignorarlas se usa ILIKE (nombre ILIKE '%cam%').
Valores vacíos: NULL
NULL significa «no hay valor» (dato desconocido o ausente). No es cero ni un texto vacío, y por eso no se compara con =: precio = NULL nunca es verdadero. Se usa IS NULL o IS NOT NULL.
SELECT * FROM productos WHERE precio IS NULL; -- correcto
SELECT * FROM productos WHERE precio = NULL; -- NO funciona: nunca devuelve filas
📌 Nota · En nuestra tabla no hay NULL
Las columnas de productos son NOT NULL, así que ninguna consulta de arriba devolvería filas. Lo verás en acción cuando diseñes tus propias tablas en la lección 4.
4.ORDER BY, LIMIT y OFFSET
Una consulta no garantiza ningún orden salvo que lo pidas. ORDER BY ordena el resultado; ASC es ascendente (por defecto) y DESC descendente. Puedes ordenar por varias columnas separándolas con comas.
-- Del más caro al más barato
SELECT nombre, precio
FROM productos
ORDER BY precio DESC;
-- Por categoría y, dentro de cada una, por precio
SELECT categoria, nombre, precio
FROM productos
ORDER BY categoria ASC, precio DESC;
Resultado de la primera consulta
| nombre | precio |
|---|---|
| Monitor 4K | 899.00 |
| Monitor FHD | 650.00 |
| Webcam | 150.00 |
| Teclado | 120.00 |
| Altavoz | 99.00 |
| Auriculares | 89.90 |
| Ratón | 45.50 |
| Cable HDMI | 15.00 |
Resultado de la segunda consulta
| categoria | nombre | precio |
|---|---|---|
| Accesorios | Cable HDMI | 15.00 |
| Audio | Altavoz | 99.00 |
| Audio | Auriculares | 89.90 |
| Pantallas | Monitor 4K | 899.00 |
| Pantallas | Monitor FHD | 650.00 |
| Periféricos | Webcam | 150.00 |
| Periféricos | Teclado | 120.00 |
| Periféricos | Ratón | 45.50 |
LIMIT restringe cuántas filas se devuelven y OFFSET indica cuántas saltar antes de empezar. Juntos sirven para paginar resultados.
SELECT nombre, precio FROM productos
ORDER BY precio DESC
LIMIT 3;
-- Siguientes tres (página 2)
SELECT nombre, precio FROM productos
ORDER BY precio DESC
LIMIT 3 OFFSET 3;
Resultado de la primera consulta
| nombre | precio |
|---|---|
| Monitor 4K | 899.00 |
| Monitor FHD | 650.00 |
| Webcam | 150.00 |
Resultado de la segunda consulta
| nombre | precio |
|---|---|
| Teclado | 120.00 |
| Altavoz | 99.00 |
| Auriculares | 89.90 |
💡 Consejo · LIMIT casi siempre va con ORDER BY
Sin ORDER BY, «las tres primeras filas» no significan nada concreto: el gestor puede devolverlas en cualquier orden. Para obtener «los tres más caros» ordena primero y limita después.
5.El orden de las cláusulas
Las cláusulas se escriben siempre en este orden. Todas son opcionales salvo SELECT (y FROM cuando se consulta una tabla):
SELECT columnas
FROM tabla
WHERE condición
ORDER BY columnas
LIMIT cantidad OFFSET saltar;
- FROM: el gestor toma la tabla.
- WHERE: se quedan solo las filas que cumplen la condición.
- SELECT: se eligen y calculan las columnas.
- ORDER BY: se ordena el resultado.
- LIMIT / OFFSET: se recorta el resultado.
Esa es la secuencia en la que el gestor piensa la consulta, y explica por qué no puedes usar un alias de SELECT dentro de WHERE.
6.Pruébalo: simulador de consultas
Este simulador funciona con la tabla productos y construye la consulta SQL mientras eliges. Cambia el filtro, el orden y el límite y observa tanto la consulta como las filas devueltas. (Es una simulación en tu navegador: no ejecuta SQL real, pero se comporta igual que SQLite con estas opciones.)
🧪 Ejemplo · Experimentos para probar
1) Columna categoria, operador =, valor Audio. 2) Columna nombre, operador LIKE, valor %mon%. 3) Columna stock, operador <=, valor 10, ordenando por stock ascendente. 4) Quita el filtro y pon LIMIT 3 ordenando por precio descendente.
7.Errores frecuentes
- Comillas dobles en los textos:
WHERE categoria = "Audio"funciona a veces en SQLite por tolerancia, pero en PostgreSQL falla. Usa siempre comillas simples. - Comparar con NULL usando
=: usaIS NULLoIS NOT NULL. - Mezclar AND y OR sin paréntesis: el resultado cambia según la prioridad de los operadores.
- Usar
LIMITsinORDER BY: «las primeras filas» no tienen un orden definido. - Olvidar el punto y coma al final en la terminal:
sqlite3se queda esperando más texto (aparece...>). Escribe;y Enter. - Escribir las cláusulas en otro orden:
WHEREva antes deORDER BY, yLIMITal final. - Esperar que
LIKEdistinga o ignore mayúsculas igual en todos los motores: SQLite lo ignora; PostgreSQL lo distingue (usaILIKE).
📒 Apuntes para llevar
SELECT columnas FROM tablalee datos y no modifica nada;*significa todas las columnas.ASpone un alias yDISTINCTquita los resultados repetidos.WHEREfiltra filas con=,<>,>,<,>=,<=,BETWEEN,INyLIKE.- El texto va entre comillas simples; los números, sin comillas.
ANDexige las dos condiciones,ORuna de ellas; usa paréntesis para mezclarlas.LIKEusa%(cualquier cantidad de caracteres) y_(uno solo); conNULLse usaIS NULL.ORDER BY col [ASC|DESC]ordena;LIMIT n OFFSET mrecorta y pagina.- Orden de escritura:
SELECT … FROM … WHERE … ORDER BY … LIMIT.
8.Glosario
| Término | Significado |
|---|---|
| Consulta (query) | Instrucción SQL que pide datos a la base de datos. |
| Cláusula | Cada parte de una instrucción: FROM, WHERE, ORDER BY… |
| Alias | Nombre alternativo para una columna o un cálculo, creado con AS. |
| Condición | Expresión que es verdadera o falsa para cada fila y decide si entra en el resultado. |
| Comodín | Carácter especial de LIKE: % (cualquier cantidad) o _ (uno). |
| NULL | Marca de «sin valor»; no es cero ni texto vacío. |
| Paginación | Dividir un resultado largo en páginas con LIMIT y OFFSET. |
🧠 Comprueba lo aprendido
Elige una respuesta en cada pregunta. Verás al instante si acertaste y por qué.
¿Qué devuelve SELECT nombre FROM productos WHERE precio < 50; con la tabla de ejemplo?
Los productos de menos de 50 son Ratón (45.50) y Cable HDMI (15.00).
¿Cómo se escribe correctamente la condición para texto?
El texto va entre comillas simples y la igualdad se escribe con un solo =.
¿Qué patrón encuentra los nombres que empiezan por «Mon»?
El % detrás del texto significa «cualquier cosa a continuación»; delante significaría «termina en».
¿Cómo se obtienen los 3 productos más baratos?
Orden ascendente por precio y luego limitar a 3: sin ordenar o con DESC saldrían otros productos.
¿Cómo se buscan las filas sin precio (valor NULL)?
NULL no se compara con =; se usa IS NULL.
Tu progreso se guarda en este navegador y se refleja en el índice del curso.
💡 🚀 ¡Ahora te toca!
La práctica fija lo aprendido. Pasa al ejercicio de esta lección.