2. LENGUAJE DE MANIPULACIÓN DE DATOS (DML, DATA MANAGEMENT LANGUAGE).

2.3. SINTAXIS BÁSICA DE OPERADORES LÓGICOS AND, OR Y NOT EN SQL

En la lección anterior se explicó cómo utilizar la cláusula WHERE para filtrar registros en una consulta SQL. En este nuevo módulo, abordaremos cómo complementar WHERE con los operadores lógicos AND, OR y NOT, con el fin de establecer condiciones múltiples y filtrar datos de forma más precisa.

Visión general

Los operadores lógicos permiten definir condiciones compuestas al momento de consultar datos. A continuación, se presenta el comportamiento general de cada uno:

  • AND: Devuelve un registro solo si todas las condiciones especificadas son verdaderas.
  • OR: Devuelve un registro si al menos una de las condiciones es verdadera.
  • NOT: Excluye los registros que cumplen con la condición especificada (es decir, selecciona aquellos donde la condición no se cumple).

EL OPERADOR AND EN SQL

El operador AND permite seleccionar únicamente las filas que cumplen simultáneamente dos o más condiciones.

Ejemplo:

Supongamos que deseas obtener todos los comentarios realizados sobre productos en Amazon donde:

  • El product_id sea igual a 50001, y
  • La calificación en estrellas sea mayor que 3.

La consulta correspondiente sería:

SELECT * FROM revisiones
WHERE product_id = 50001
AND stars > 3;


Esta instrucción devolverá únicamente las reseñas que cumplan ambas condiciones al mismo tiempo.


review_id user_id created_date product_id stars
6171 123 2022-08-06 00:00:00 50001 4

Comparación: Uso del operador AND en SQL vs. Google Sheets

El operador lógico AND en SQL cumple una función muy similar al que se utiliza en herramientas como Excel o Google Sheets, donde también se evalúan múltiples condiciones y se retorna un valor VERDADERO (TRUE) o FALSO (FALSE) según los criterios establecidos.

Excel_Amazon

Ejemplo en Google Sheets:

Supongamos que tienes una hoja de cálculo con datos de reseñas de productos. Deseas filtrar únicamente aquellas reseñas donde:

  • El product_id sea 50001, y
  • La calificación (stars) sea mayor que 3.

En Google Sheets, podrías usar la siguiente fórmula:

=AND(D2 = 50001, E2 > 3)

Esta fórmula devuelve TRUE únicamente si ambas condiciones se cumplen en la fila correspondiente.

Equivalencia en SQL:

La misma lógica se puede aplicar en SQL mediante la cláusula WHERE combinada con AND:

SELECT * FROM reviews
WHERE product_id = 50001
AND stars > 3;


Como puedes ver, la lógica de comparación es muy parecida entre las hojas de cálculo y SQL, lo cual facilita el aprendizaje para quienes ya están familiarizados con herramientas como Google Sheets o Excel.

¿Puedo usar múltiples operadores AND en SQL?

¡Sí! En SQL, puedes combinar tantas condiciones como desees utilizando AND junto con otros operadores de comparación (=, >, <, <>, BETWEEN, etc.). Esto permite construir filtros más complejos y precisos para tus consultas.

SELECT * FROM revisiones
WHERE estrellas > 3
AND estrellas < 5
AND product_id != 50001;


EL OPERADOR OR EN SQL

El operador lógico OR en SQL se utiliza para seleccionar registros que cumplan al menos una de dos (o más) condiciones. A diferencia del operador AND, que requiere que todas las condiciones se cumplan simultáneamente, OR permite que basta con que una sola condición sea verdadera para que el registro sea incluido en los resultados.

Ejemplo práctico

Considera la siguiente consulta, basada en una tabla de reseñas:

SELECT * FROM revisiones
WHERE estrellas > 3 OR product_id = 50001;


Esta consulta traerá todos los registros en los que:

  • La calificación en estrellas sea mayor que 3, o
  • El identificador del producto (product_id) sea igual a 50001.

Interpretación del resultado

Al ejecutar esta consulta, se incluirán:

  • Las filas que cumplan la primera condición (estrellas > 3), y
  • También aquellas que no cumplan la primera condición, pero sí cumplan la segunda (product_id = 50001).
  • Esto permite mayor flexibilidad al momento de consultar datos, especialmente cuando se necesita obtener registros que pueden cumplir diferentes criterios alternativos.

    Uso de múltiples condiciones con OR y combinación con AND

    En SQL, no solo es posible utilizar varias condiciones con el operador OR, sino que también se pueden combinar de forma estructurada con el operador AND para realizar consultas más específicas.

    Ejemplo combinado:

    SELECT * FROM revisiones
    WHERE (estrellas = 3 OR estrellas = 4)
    AND review_id > 5000;

    ¿Qué hace esta consulta?

    • (stars = 3 OR stars = 4): Selecciona las reseñas que tienen 3 o 4 estrellas.
    • AND review_id > 5000: De esas reseñas, solo incluirá aquellas cuyo ID de reseña sea mayor a 5000.

    Nota importante:

    Los paréntesis son esenciales para indicar que primero se debe evaluar la condición OR, y luego aplicar el AND sobre el resultado. Esto es similar al uso de paréntesis en operaciones matemáticas para controlar el orden de evaluación.

    Aplicación práctica:

    Este tipo de consulta es muy útil cuando se desea combinar condiciones alternativas con filtros adicionales, como fechas, rangos de ID o atributos de usuarios.

    SQL Y O ejercicio de práctica

    Practiquemos usando múltiples ANDs, junto con múltiples ORs, en este próximo ejercicio de práctica SQL. TechStore almacena en su base de datos las reseñas que los clientes dejan sobre los productos tecnológicos adquiridos. Como parte del análisis de satisfacción del cliente, necesitas extraer las reseñas que cumplan ciertas condiciones específicas combinando operadores lógicos AND y OR.

    Filtra las reseñas almacenadas en la tabla resenas con base en las siguientes condiciones:

    • La calificación (estrellas) debe ser mayor que 2 e igual o inferior a 4.
    • La reseña debe haber sido realizada por cualquiera de los siguientes usuarios: 123, 265 o 362.

    Ejemplo de salida que coincide con las condiciones anteriores:


    resena_id usuario_id fecha_publicacion producto_id estrellas
    6171 123 2022-08-06 00:00:00 50001 4
    7802 265 2022-10-06 00:00:00 69852 4
    5293 362 2022-06-18 00:00:00 50001 3

    EL OPERADOR NOT EN SQL

    En SQL, el operador NOT se utiliza para excluir registros que cumplen una condición determinada, es decir, para mostrar únicamente aquellos registros en los que la condición NO es verdadera. Es una herramienta útil cuando se desea aplicar filtros negativos en una consulta.

    Ejemplo básico:

    Supongamos que deseas consultar todas las reseñas de productos excepto aquellas que tienen una calificación de 5 estrellas. Puedes usar el operador NOT de la siguiente manera:

    SELECT * FROM revisiones
    WHERE NOT rating = 5;

    Esta consulta devuelve los registros donde la calificación no es igual a 5.

    Equivalencia:

    Esta instrucción produce los mismos resultados que:

    WHERE rating != 5

    Entonces, ¿por qué usar NOT si != funciona igual?

    La razón es que NOT permite negar condiciones más complejas, especialmente aquellas que involucran expresiones con otras palabras clave, como BETWEEN, IN, LIKE, etc., que no tienen un operador directo de negación.

    Uso de NOT con BETWEEN

    El operador BETWEEN permite especificar un rango de valores. Pero si deseas excluir todos los registros que estén dentro de ese rango, puedes utilizar NOT para negarlo.

    Ejemplo:

    Supón que deseas obtener todas las reseñas cuya calificación no esté entre 2 y 4 estrellas. La consulta sería:

    SELECT * FROM revisiones
    WHERE stars NOT BETWEEN 2 AND 4;

    Esta consulta selecciona solo las reseñas con 1 estrella o 5 estrellas, es decir, fuera del rango especificado.

    Nos sumergiremos más en el filtrado en una gama de valores en el próximo tutorial en SQL BETWEEN.

    Ejercicio de práctica de SQL

    Problemas de la práctica

    Filtra las reseñas de la tabla reseñas usando las siguientes condiciones del ejercicio.

    Ejercicio #1

    TechStore ha desarrollado un sistema para recolectar reseñas de sus productos tecnológicos. Cada reseña incluye información sobre la calificación, el usuario que la emitió, el ID del producto y la fecha en que fue registrada.

    Como parte del equipo de análisis, necesitas construir una consulta SQL que filtre las reseñas con base en múltiples condiciones usando WHERE y AND.

    Quieres ver la lista de todos los productos que tiene TechStore.

    Requerimiento:

    Filtra las reseñas de la tabla reseñas (resena) usando las siguientes condiciones:

    1. La calificación (rese_estrellas) debe ser mayor o igual a 4.

    2. El rese_id debe ser menor a 6000.

    3. El rese_id debe ser mayor a 2000.

    4. El usua_id no debe ser 142.


    Ejercicio #2

    La empresa TechStore recolecta diariamente reseñas de sus productos tecnológicos con el fin de evaluar la satisfacción de sus clientes. Estas reseñas incluyen información como la calificación (estrellas), el identificador del usuario, el producto evaluado y la fecha de publicación.

    Como parte del análisis de datos, es necesario filtrar las reseñas que cumplan varias condiciones lógicas combinadas, utilizando los operadores AND y OR en SQL.

    Requerimiento:

    Realiza una consulta SQL sobre la tabla resenas (resena) que cumpla con las siguientes condiciones:

    1. La calificación en estrellas (rese_estrellas) debe ser mayor que 2 e inferior o igual a 4.

    2. La reseña debe haber sido realizada por alguno de los siguientes usuarios (usua_id): 123, 265 o 362.

    Sugerencia profesional:

    Antes de escribir toda la consulta completa, prueba codificar y ejecutar una condición a la vez. Esto te ayudará a identificar errores más fácilmente y entender el comportamiento de los filtros.

    Estructura de la tabla:

    Nombre de columna Tipo de dato
    rese_id INTEGER
    usua_id INTEGER
    rese_fechapublicacion DATETIME
    prod_id INTEGER
    rese_estrellas INTEGER (1–5)

    Datos de ejemplo:

    rese_id usua_id rese_fechapublicacion prod_id rese_estrellas
    6171 123 2022-08-06 00:00:00 50001 4
    4582 562 2018-06-15 00:00:00 12580 4
    7802 265 2022-10-06 00:00:00 69852 4
    5293 362 2022-06-18 00:00:00 50001 3
    6352 192 2022-07-26 00:00:00 69852 3
    4517 981 2022-05-07 00:00:00 69852 2


    -------------------------------------------------------------------------------------------------------------

    SIGUIENTE - BETWEEN