Operadores lógicos y de comparación

Lectura
20 min~4 min lectura

Concepto clave

Los operadores lógicos y de comparación son herramientas que te permiten filtrar datos con precisión en SQL. Piensa en ellos como los filtros de una búsqueda avanzada: mientras que un WHERE simple solo puede verificar una condición, los operadores lógicos (AND, OR, NOT) y de comparación (=, <>, <, >, <=, >=) te permiten combinar múltiples criterios para obtener exactamente los registros que necesitas.

Imagina que tienes una lista de pedidos. Con un solo filtro podrías obtener todos los pedidos de un cliente específico. Pero con operadores lógicos puedes obtener, por ejemplo, los pedidos de ese cliente que además tengan un monto mayor a $100. O los pedidos de dos clientes diferentes. O todos los pedidos excepto los cancelados.

En SQL, estos operadores se usan dentro de la cláusula WHERE para refinar las consultas. Dominarlos es fundamental para cualquier análisis de datos.

Cómo funciona en la práctica

Supongamos que trabajas con una tabla llamada pedidos que tiene las columnas: id, cliente, monto, fecha, estado.

Queremos obtener los pedidos del cliente 'Juan' que tengan un monto mayor a 500. La consulta sería:

SELECT * FROM pedidos WHERE cliente = 'Juan' AND monto > 500;

Si queremos los pedidos de 'Juan' o de 'María':

SELECT * FROM pedidos WHERE cliente = 'Juan' OR cliente = 'María';

Para excluir los pedidos cancelados:

SELECT * FROM pedidos WHERE NOT estado = 'cancelado';

También podemos combinar operadores. Por ejemplo, pedidos de 'Juan' con monto > 500 o pedidos de 'María' con monto > 300:

SELECT * FROM pedidos WHERE (cliente = 'Juan' AND monto > 500) OR (cliente = 'María' AND monto > 300);

Nota el uso de paréntesis para agrupar condiciones, igual que en matemáticas.

Código en acción

Vamos a crear una tabla de ejemplo y ejecutar consultas paso a paso.

-- Crear tabla temporal
CREATE TABLE productos (
    id INT,
    nombre VARCHAR(50),
    precio DECIMAL(10,2),
    stock INT,
    categoria VARCHAR(20)
);

-- Insertar datos
INSERT INTO productos VALUES
(1, 'Laptop', 1200.00, 10, 'Electrónica'),
(2, 'Mouse', 25.50, 50, 'Electrónica'),
(3, 'Libro SQL', 45.00, 100, 'Libros'),
(4, 'Monitor', 300.00, 20, 'Electrónica'),
(5, 'Cuaderno', 5.00, 200, 'Papelería');

-- Consulta 1: Productos electrónicos con precio menor o igual a 500
SELECT * FROM productos WHERE categoria = 'Electrónica' AND precio <= 500;

-- Consulta 2: Productos con stock mayor a 50 o precio menor a 10
SELECT * FROM productos WHERE stock > 50 OR precio < 10;

-- Consulta 3: Productos que NO sean de Papelería
SELECT * FROM productos WHERE NOT categoria = 'Papelería';

-- Consulta 4: Combinación: Electrónica con precio entre 20 y 1000
SELECT * FROM productos WHERE categoria = 'Electrónica' AND precio >= 20 AND precio <= 1000;

Resultado esperado: La consulta 1 devuelve Mouse y Monitor; la 2 devuelve Libro SQL, Cuaderno; la 3 devuelve Laptop, Mouse, Libro SQL, Monitor; la 4 devuelve Mouse y Monitor.

Errores comunes

  • Usar = en lugar de <> (o !=): Para negar una igualdad, usa <> o !=. Ejemplo: WHERE estado <> 'inactivo'.
  • Olvidar los paréntesis al combinar AND y OR: AND tiene prioridad sobre OR. Siempre usa paréntesis para evitar ambigüedades. Ejemplo: WHERE (cond1 OR cond2) AND cond3.
  • Usar AND para condiciones excluyentes: Si quieres que se cumpla al menos una, usa OR. AND requiere que todas sean verdaderas.
  • Comparar con NULL: Cualquier comparación con NULL da NULL (falso). Usa IS NULL o IS NOT NULL.
  • Confundir operadores de comparación con asignación: En SQL, = es comparación en WHERE, no asignación.

Checklist de dominio

  • Escribí una consulta con AND que filtra por dos columnas diferentes.
  • Escribí una consulta con OR que filtra por dos valores en la misma columna.
  • Usé NOT para excluir un valor específico.
  • Combiné AND y OR con paréntesis correctamente.
  • Usé operadores de comparación (<, >, <=, >=, <>) en al menos una consulta.
  • Evité comparar con NULL usando IS NULL o IS NOT NULL.
  • Probé mis consultas en un conjunto de datos de ejemplo y verifiqué los resultados.

Para verificar tu resultado, ejecuta la consulta y cuenta los registros obtenidos. Luego, haz una comprobación manual con los datos originales para asegurarte de que el filtro funciona como esperas.

Filtrar pedidos con operadores lógicos

Utilizando la tabla pedidos con las columnas id, cliente, monto, fecha, estado, escribe las siguientes consultas SQL. Crea un archivo llamado ejercicio_operadores.sql con todas las consultas.

  1. Obtén todos los pedidos del cliente 'Ana' con monto mayor a 100.
  2. Obtén los pedidos del cliente 'Luis' o aquellos con estado 'pendiente'.
  3. Obtén los pedidos que NO sean del cliente 'Carlos' y que tengan monto menor o igual a 50.
  4. Obtén los pedidos con monto entre 30 y 200 (inclusive) y que no estén en estado 'cancelado'.

Mini-rúbrica de evaluación:

  • Uso correcto de operadores de comparación (1 punto)
  • Uso correcto de AND/OR/NOT (1 punto)
  • Uso de paréntesis cuando es necesario (1 punto)
  • Resultados correctos según los datos de prueba (2 puntos)
Pistas
  • Recuerda que los operadores de comparación son =, <>, <, >, <=, >=.
  • Para rangos usa AND: monto >= 30 AND monto <= 200.
  • Para negar un estado usa NOT estado = 'cancelado' o estado <> 'cancelado'.