Los operadores lógicos son herramientas que te ayudan a unir condiciones en las consultas para filtrar datos de forma más compleja. Seguro que ya te los has encontrado en otros lenguajes de programación. Si comparamos las consultas con un programa de filtro de spam en tu correo, los operadores lógicos serían como las reglas que deciden si un correo va a la carpeta de "Spam" o se queda en "Bandeja de entrada".
SQL es una herramienta que se usa mucho para seleccionar o analizar datos. Los operadores lógicos (AND, OR, NOT) te permiten combinar varias condiciones en una sola consulta para responder preguntas más complejas, como:
- ¿Qué estudiantes tienen más de 18 años y tienen una nota "A"?
- ¿Qué productos pertenecen a la categoría "Electrónica" o "Electrodomésticos"?
- ¿Qué clientes no han hecho compras?
Vamos a ver los tres operadores lógicos principales en SQL:
AND: ambas condiciones tienen que ser verdaderas.OR: al menos una de las condiciones tiene que ser verdadera.NOT: invierte (niega) la condición.
Operador AND: ambas condiciones son verdaderas
El operador AND te permite decir que las dos partes de la condición tienen que cumplirse para que la fila salga en el resultado.
Sintaxis
SELECT columna1, columna2
FROM tabla
WHERE condicion AND condicion2;
Ejemplo 1: Filtrar estudiantes mayores de 18 años y con nota "A"
Supón que tenemos una tabla students:
| id | name | age | grade |
|---|---|---|---|
| 1 | Alex | 20 | A |
| 2 | Maria | 19 | B |
| 3 | Otto | 17 | A |
| 4 | Anna | 22 | A |
Consulta:
SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A';
Resultado:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Anna | 22 | A |
Ejemplo 2: Filtrar empleados del departamento "HR" y con salario mayor de 50000
SELECT name, department, salary
FROM employees
WHERE department = 'HR' AND salary > 50000;
Operador OR: al menos una condición es verdadera
El operador OR se usa cuando quieres seleccionar filas que cumplen al menos una de las condiciones.
Sintaxis
SELECT columna1, columna2
FROM tabla
WHERE condicion OR condicion2;
Ejemplo 1: Filtrar estudiantes con nota "A" o "B"
SELECT name, age, grade
FROM students
WHERE grade = 'A' OR grade = 'B';
Resultado:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Maria | 19 | B |
| Otto | 17 | A |
| Anna | 22 | A |
Ejemplo 2: Productos de la categoría "Electrónica" o con precio menor de 100
Tabla products:
| product_id | name | category | price |
|---|---|---|---|
| 1 | Televisor | Electrónica | 300 |
| 2 | Plancha | Electrodomésticos | 50 |
| 3 | Smartphone | Electrónica | 700 |
| 4 | Hervidor | Electrodomésticos | 80 |
SELECT name, category, price
FROM products
WHERE category = 'Electrónica' OR price < 100;
Resultado:
| name | category | price |
|---|---|---|
| Televisor | Electrónica | 300 |
| Plancha | Electrodomésticos | 50 |
| Hervidor | Electrodomésticos | 80 |
| Smartphone | Electrónica | 700 |
Operador NOT: invertir la condición
Si AND y OR ponen condiciones que deben ser verdaderas, NOT hace justo lo contrario: selecciona las filas donde la condición indicada es falsa.
Sintaxis
SELECT columna1, columna2
FROM tabla
WHERE NOT condicion;
Ejemplo 1: Filtrar estudiantes que no tienen nota "A"
SELECT name, age, grade
FROM students
WHERE NOT grade = 'A';
Resultado:
| name | age | grade |
|---|---|---|
| Maria | 19 | B |
Ejemplo 2: Seleccionar productos que no pertenecen a la categoría "Electrónica"
SELECT name, category, price
FROM products
WHERE NOT category = 'Electrónica';
Combinando operadores lógicos
Puedes combinar operadores lógicos para crear condiciones aún más complejas. Por ejemplo, si quieres seleccionar estudiantes mayores de 18 años y con nota "A" o "B", puedes combinar AND y OR.
Sintaxis combinada
SELECT columna1, columna2
FROM tabla
WHERE (condicion1 AND condicion2) OR condicion3;
Ejemplo: Estudiantes mayores de 18 años con nota "A" o estudiantes con nota "B"
SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR grade = 'B';
Resultado:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Anna | 22 | A |
| Maria | 19 | B |
Prioridad de ejecución de los operadores
Es importante recordar que SQL ejecuta los operadores lógicos en este orden:
NOTANDOR
Puedes usar paréntesis para cambiar el orden de ejecución. ¡Sin paréntesis el resultado puede ser inesperado!
Ejemplo: Comparación con y sin paréntesis
¿Qué pasa en esta consulta?
SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A' OR grade = 'B';
Esta consulta selecciona estudiantes:
- Que tienen más de 18 años y nota "A".
- Que tienen nota "B".
La prioridad de los operadores da el mismo resultado que si usas paréntesis así:
SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR (grade = 'B');
Pero si pones los paréntesis así:
SELECT name, age, grade
FROM students
WHERE age > 18 AND (grade = 'A' OR grade = 'B');
Ahora se seleccionan estudiantes mayores de 18 años con nota "A" o "B". ¡Los paréntesis de verdad lo cambian todo!
Errores típicos al usar operadores lógicos
- Olvidar los paréntesis. Esto puede dar resultados inesperados, sobre todo al combinar
ANDyOR. - Usar
NOTsin tener claro qué filas se excluyen. - Usar mal los operadores lógicos. Por ejemplo,
ANDen vez deORo al revés. - Condiciones demasiado largas. Condiciones muy largas con varios
AND,OR,NOTsin comentarios pueden ser difíciles de leer.
Estos operadores son la base de cualquier consulta compleja. ¡Ahora ya puedes escribir consultas que no solo funcionan, sino que encuentran justo lo que necesitas!
GO TO FULL VERSION