Combinar condiciones con AND, OR e IN
Objetivos
Al terminar podrás combinar rangos y listas sin depender de precedencias implícitas.
Concepto
AND exige que ambas condiciones sean verdaderas; OR acepta una u otra. Cuando una pregunta mezcla ambos operadores, usa paréntesis para mostrar qué condiciones pertenecen al mismo grupo.
BETWEEN incluye sus dos límites. IN compara una columna con una lista de valores. La consulta del ejemplo elige pagos dentro de un rango o menores de uno, y luego limita el conjunto a tres identificadores de cliente.
Ejemplo
SELECT payment_id, customer_id, amount
FROM payment
WHERE (amount BETWEEN 5.00 AND 10.00 OR amount < 1.00)
AND customer_id IN (1, 2, 3)
ORDER BY amount DESC, payment_id ASC
LIMIT 10;Los paréntesis hacen que la lista de clientes se aplique a las dos opciones de importe. BETWEEN 5.00 AND 10.00 incluye cinco y diez.
Práctica guiada
- Quita los paréntesis y explica qué operador se evalúa primero.
- Cambia
IN (1, 2, 3)por dos identificadores y compara el filtro. - Cambia
BETWEENaamount >= 5.00 AND amount < 10.00; nota que el límite superior ahora queda excluido.
Reto
Selecciona pagos de dos clientes que tengan un importe entre uno y cinco, inclusive. Devuelve identificador del pago, cliente e importe; ordena por cliente y fecha. Explica cómo los paréntesis aclaran la relación entre AND y OR.
Ver respuesta al reto
SELECT payment_id, customer_id, amount, payment_date
FROM sakila.payment
WHERE customer_id IN (1, 2)
AND amount BETWEEN 1.00 AND 5.00
ORDER BY customer_id, payment_date, payment_id;Los paréntesis en una condición equivalente como (customer_id = 1 OR customer_id = 2) AND amount BETWEEN 1 AND 5 dejan claro que el rango aplica a ambos clientes.
Quiz
Comprobación
Ya controlas listas y rangos. La siguiente lección combina búsquedas LIKE con comprobaciones correctas de NULL.