Día 2 – Filtrado avanzado y ordenación: AND, OR, IN, LIKE, ORDER BY, LIMIT

Hoy vamos a mejorar tus consultas. Aprenderás a combinar condiciones, buscar patrones en texto, ordenar resultados y limitar cuántas filas quieres ver.

Estas técnicas te permitirán hacer consultas mucho más precisas y útiles en tu día a día.

1. Combinar condiciones con AND y OR

Hasta ahora solo has usado una condición en WHERE. Pero en la realidad necesitarás combinar varias.

AND – Todas las condiciones deben cumplirse

Usa AND cuando quieras que todas las condiciones sean verdaderas a la vez.

-- Productos caros Y con stock disponible
SELECT nombre, precio, stock
FROM productos
WHERE precio > 500 
  AND stock > 0;

Esto solo te devolverá productos que cumplan ambas condiciones: precio mayor a 500 y stock mayor a 0.

Otro ejemplo:

-- Usuarios de España registrados en 2024
SELECT nombre, pais, fecha_registro
FROM usuarios
WHERE pais = 'España' 
  AND fecha_registro >= '2024-01-01';

OR – Al menos una condición debe cumplirse

Usa OR cuando quieras que se cumpla al menos una de las condiciones.

-- Usuarios de España O de México
SELECT nombre, pais
FROM usuarios
WHERE pais = 'España' 
   OR pais = 'Mexico';

Esto te devolverá usuarios que sean de España o de México (o de ambos, aunque en este caso no aplica).

Combinar AND y OR

Aquí viene lo importante: cuando mezclas AND y OR, usa paréntesis para controlar el orden de evaluación.

-- Usuarios de España o México, que además se hayan registrado en 2024
SELECT nombre, pais, fecha_registro
FROM usuarios
WHERE (pais = 'España' OR pais = 'Mexico') 
  AND fecha_registro >= '2024-01-01';

⚠️ Importante: Sin paréntesis, AND tiene prioridad sobre OR, lo que puede dar resultados inesperados.

Ejemplo de lo que NO debes hacer:

-- ❌ INCORRECTO (sin paréntesis)
SELECT nombre, pais, fecha_registro
FROM usuarios
WHERE pais = 'España' 
   OR pais = 'Mexico' 
  AND fecha_registro >= '2024-01-01';

Esto SQL lo interpreta como:

  • usuarios de España (sin importar la fecha)
  • O usuarios de México registrados en 2024

No es lo que querías. Siempre usa paréntesis cuando combines AND y OR.

2. IN – Buscar dentro de una lista

Imagina que quieres usuarios de España, México y Argentina. Podrías hacer:

-- Forma larga (funciona pero es fea)
SELECT nombre, pais
FROM usuarios
WHERE pais = 'España' 
   OR pais = 'Mexico' 
   OR pais = 'Argentina';

Hay una forma mucho mejor: el operador IN.

-- Forma correcta con IN
SELECT nombre, pais
FROM usuarios
WHERE pais IN ('España', 'Mexico', 'Argentina');

Esto es mucho más limpio y fácil de leer.

NOT IN – Excluir valores

También puedes hacer lo contrario: excluir valores de una lista.

-- Usuarios que NO son de España ni de México
SELECT nombre, pais
FROM usuarios
WHERE pais NOT IN ('España', 'Mexico');

Usar IN con números

Funciona igual con números:

-- Productos con IDs específicos
SELECT nombre, precio
FROM productos
WHERE id IN (1, 3, 5, 7);

3. LIKE – Buscar patrones en texto

A veces no sabes el valor exacto que buscas, solo una parte. Para eso usamos LIKE.

Comodín % (cualquier cantidad de caracteres)

El símbolo % representa «cualquier cosa» (cero o más caracteres).

-- Usuarios cuyo nombre empieza por 'Mar'
SELECT nombre, email
FROM usuarios
WHERE nombre LIKE 'Mar%';

Esto encontrará: Maria, Martinez, Marcos, etc.

-- Usuarios cuyo email termina en '@email.com'
SELECT nombre, email
FROM usuarios
WHERE email LIKE '%@email.com';
-- Productos que contienen la palabra 'Logitech' en cualquier parte
SELECT nombre, precio
FROM productos
WHERE nombre LIKE '%Logitech%';

Comodín _ (un solo carácter)

El guion bajo _ representa exactamente un carácter cualquiera.

-- Buscar algo como 'a_a' (ana, ala, ata, etc.)
SELECT nombre
FROM usuarios
WHERE nombre LIKE 'A_a%';

ILIKE – Búsqueda sin importar mayúsculas/minúsculas (PostgreSQL)

LIKE distingue entre mayúsculas y minúsculas. Si quieres ignorarlas, usa ILIKE (específico de PostgreSQL):

-- Encuentra 'mar', 'Mar', 'MAR', 'MaR', etc.
SELECT nombre
FROM usuarios
WHERE nombre ILIKE 'mar%';

NOT LIKE – Excluir patrones

También puedes buscar lo que no cumple un patrón:

-- Productos que NO contienen 'Logitech'
SELECT nombre
FROM productos
WHERE nombre NOT LIKE '%Logitech%';

4. ORDER BY – Ordenar resultados

Por defecto, los resultados salen en el orden en que están almacenados en la base de datos (que suele ser el orden de inserción). Con ORDER BY puedes ordenarlos como quieras.

Orden ascendente (ASC) – por defecto

-- Productos ordenados por precio (de menor a mayor)
SELECT nombre, precio
FROM productos
ORDER BY precio;

ASC (ascendente) es el orden por defecto, así que no hace falta escribirlo. Pero si quieres ser explícito:

SELECT nombre, precio
FROM productos
ORDER BY precio ASC;

Orden descendente (DESC)

-- Productos ordenados por precio (de mayor a menor)
SELECT nombre, precio
FROM productos
ORDER BY precio DESC;

Ordenar por múltiples columnas

Puedes ordenar por varias columnas. Primero ordena por la primera, y en caso de empate, por la segunda:

-- Ordenar por categoría, y dentro de cada categoría por precio
SELECT nombre, categoria, precio
FROM productos
ORDER BY categoria ASC, precio DESC;

Esto agrupa por categoría (alfabéticamente), y dentro de cada categoría ordena por precio de mayor a menor.

Ordenar por columna no seleccionada

Puedes ordenar por columnas que no estás mostrando:

-- Mostrar solo nombre, pero ordenar por precio
SELECT nombre
FROM productos
ORDER BY precio DESC;

Ordenar por fechas

-- Usuarios más recientes primero
SELECT nombre, fecha_registro
FROM usuarios
ORDER BY fecha_registro DESC;

5. LIMIT – Limitar número de resultados

A veces solo quieres ver los primeros N resultados. Para eso usamos LIMIT.

Primeros N resultados

-- Los 5 productos más caros
SELECT nombre, precio
FROM productos
ORDER BY precio DESC
LIMIT 5;

Importante: LIMIT suele usarse junto con ORDER BY, porque si no ordenas, te devolverá 5 filas aleatorias (las primeras que encuentre).

-- Los 3 usuarios más recientes
SELECT nombre, fecha_registro
FROM usuarios
ORDER BY fecha_registro DESC
LIMIT 3;

OFFSET – Saltar filas

OFFSET te permite saltar las primeras N filas. Útil para paginación.

-- Usuarios del 6 al 10 (salta los primeros 5)
SELECT nombre, email
FROM usuarios
ORDER BY fecha_registro DESC
LIMIT 5 OFFSET 5;

Esto es útil para hacer paginación:

  • Página 1: LIMIT 10 OFFSET 0 (registros 1-10)
  • Página 2: LIMIT 10 OFFSET 10 (registros 11-20)
  • Página 3: LIMIT 10 OFFSET 20 (registros 21-30)

Combinándolo todo

-- Top 3 productos de Electrónica con stock, ordenados por precio
SELECT nombre, precio, stock
FROM productos
WHERE categoria = 'Electronica' 
  AND stock > 0
ORDER BY precio DESC
LIMIT 3;

6. Orden de ejecución de las cláusulas

Es importante entender en qué orden SQL procesa tu consulta:

  1. FROM – Qué tabla(s) usar
  2. WHERE – Filtrar filas
  3. ORDER BY – Ordenar resultados
  4. LIMIT – Limitar cantidad de filas

Por eso LIMIT va siempre al final.

-- Orden correcto
SELECT nombre, precio
FROM productos
WHERE precio > 100
ORDER BY precio DESC
LIMIT 5;

7. Consultas Útiles del Día a Día

Top 10 productos más caros en stock

SELECT nombre, precio, stock
FROM productos
WHERE stock > 0
ORDER BY precio DESC
LIMIT 10;

Buscar usuario por parte del email

SELECT nombre, email
FROM usuarios
WHERE email LIKE '%garcia%';

Productos de varias categorías, ordenados

SELECT nombre, categoria, precio
FROM productos
WHERE categoria IN ('Electronica', 'Accesorios')
ORDER BY categoria, precio DESC;

Usuarios recientes de países específicos

SELECT nombre, pais, fecha_registro
FROM usuarios
WHERE pais IN ('España', 'Mexico', 'Argentina')
  AND fecha_registro >= '2024-03-01'
ORDER BY fecha_registro DESC;

Productos baratos con stock bajo

SELECT nombre, precio, stock
FROM productos
WHERE precio < 150 
  AND stock < 20
ORDER BY stock ASC;

8. Ejercicios Prácticos

Intenta resolver estos ejercicios antes de mirar las soluciones.

  1. Muestra los productos de categoría ‘Electronica’ o ‘Accesorios’, ordenados por precio de mayor a menor
  2. Encuentra usuarios cuyo nombre empiece por ‘C’ o por ‘M’
  3. Muestra los 3 productos más baratos que tengan stock disponible
  4. Busca productos que contengan la palabra ‘Logitech’ en su nombre
  5. Muestra usuarios de España registrados en marzo de 2024 (fecha_registro entre ‘2024-03-01’ y ‘2024-03-31’)
  6. Muestra los 5 productos con menos stock (pero que tengan al menos 1 unidad)
  7. Encuentra usuarios cuyo email NO termine en ‘@email.com’
  8. Muestra productos con precio entre 100 y 300 euros, ordenados por nombre

💡 Consejo: Escribe las consultas paso a paso. Primero el SELECT y FROM, luego añade WHERE, después ORDER BY, y finalmente LIMIT si lo necesitas.

9. Soluciones

Compara tus respuestas. Si tu solución funciona aunque sea diferente, ¡también está bien!

Solución Ejercicio 1

SELECT nombre, categoria, precio
FROM productos
WHERE categoria IN ('Electronica', 'Accesorios')
ORDER BY precio DESC;

Solución Ejercicio 2

SELECT nombre, email
FROM usuarios
WHERE nombre LIKE 'C%' 
   OR nombre LIKE 'M%';

O también (más corto pero menos obvio):

SELECT nombre, email
FROM usuarios
WHERE nombre SIMILAR TO '[CM]%';

Solución Ejercicio 3

SELECT nombre, precio, stock
FROM productos
WHERE stock > 0
ORDER BY precio ASC
LIMIT 3;

Solución Ejercicio 4

SELECT nombre, precio
FROM productos
WHERE nombre LIKE '%Logitech%';

O sin importar mayúsculas:

SELECT nombre, precio
FROM productos
WHERE nombre ILIKE '%logitech%';

Solución Ejercicio 5

SELECT nombre, pais, fecha_registro
FROM usuarios
WHERE pais = 'España' 
  AND fecha_registro >= '2024-03-01' 
  AND fecha_registro <= '2024-03-31';

O usando BETWEEN (más elegante):

SELECT nombre, pais, fecha_registro
FROM usuarios
WHERE pais = 'España' 
  AND fecha_registro BETWEEN '2024-03-01' AND '2024-03-31';

Solución Ejercicio 6

SELECT nombre, stock
FROM productos
WHERE stock >= 1
ORDER BY stock ASC
LIMIT 5;

Solución Ejercicio 7

SELECT nombre, email
FROM usuarios
WHERE email NOT LIKE '%@email.com';

Solución Ejercicio 8

SELECT nombre, precio
FROM productos
WHERE precio >= 100 
  AND precio <= 300
ORDER BY nombre;

O usando BETWEEN:

SELECT nombre, precio
FROM productos
WHERE precio BETWEEN 100 AND 300
ORDER BY nombre;

Resumen del Día 2

¡Excelente! Ahora sabes hacer consultas mucho más potentes. Has aprendido:

✅ Combinar condiciones con AND y OR (¡usa paréntesis!)
✅ Buscar en listas con IN y NOT IN
✅ Buscar patrones en texto con LIKE (comodines % y _)
✅ Ordenar resultados con ORDER BY (ASC/DESC)
✅ Limitar filas con LIMIT y saltar con OFFSET
✅ Combinar todo en consultas complejas

Estas técnicas te permitirán resolver el 90% de las consultas que necesitarás en tu trabajo diario.

Siguiente paso:

En el Día 3 aprenderás funciones de agregación como COUNT, SUM, AVG, y a agrupar datos con GROUP BY y HAVING. Podrás generar estadísticas y reportes.

¡Nos vemos en el Día 3!

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies