Saltar a contenido

Cláusulas Condicionales

Las cláusulas condicionales se utilizan con ayuda de la cláusula WHERE, la cual permite seleccionar registros de las tablas en base a criterios específicos. Pueden afectar a la lectura de datos (SELECT), a la actualización (UPDATE) y a la eliminación (DELETE).

SELECT

por coincidencia numérica

SELECT * FROM Products 
WHERE ProductID = 24;

Resultado: el producto con ID 24

ProductID ProductName SupplierID CategoryID Unit Price
24 Guaraná Fantástica 10 1 12 - 355 ml cans 4.5

por texto

SELECT * FROM Products 
WHERE ProductName = "Tofu";

Resultado: el único tofu encontrado

ProductID ProductName SupplierID CategoryID Unit Price
14 Tofu 6 7 40 - 100 g pkgs. 23.25

por rango numérico

SELECT * FROM Products 
WHERE Price <= 40; --menor o igual a 4
Resultado: 77 registros con precio unitario menor a 40

ProductID ProductName SupplierID CategoryID Unit Price
1 Chais 1 1 10 boxes x 20 bags 18
2 Chang 1 1 24 - 12 oz bottles 19
3 Aniseed Syrup 1 2 12 - 550 ml bottles 10
...
76 Lakkalikööri 23 1 500 ml 18
77 Original Frankfurter grüne Soße 12 2 12 boxes 13

DELETE

DELETE FROM turnos_medicos 
WHERE id_turno = 2 ;

UPDATE

UPDATE turnos_medicos SET horario = "13:00" 
WHERE id_turno = 1 ; 

Operadores Lógicos

AND

SELECT * FROM Customers
WHERE CustomerID >= 50 AND CustomerID < 55 ;

OR

SELECT * FROM Employees
WHERE FirstName ="Janet" OR FirstName = "Adam" ;

NOT

SELECT * FROM Customers
WHERE NOT Country = "USA" ;

Combinados con paréntesis

SELECT * FROM Products
WHERE (Price < 20  OR CategoryID = 6) AND SupplierID = 7 ;

LIMIT

Con la cláusula LIMIT se puede poner tope al numero de resultados:

SELECT * FROM Customers
WHERE CustomerID >=50
LIMIT 5 ;

Ejemplo: cláusulas combinadas

SELECT * FROM Products
WHERE NOT CategoryID = 6 
AND NOT SupplierID = 1
AND Price <= 30
ORDER BY RANDOM()
LIMIT 5 ;

DISTINCT

SELECT * FROM Customers
WHERE  Country != "USA" ;

El operador DISTINCT (!=) es un operador de comparación. NO cuenta como operador lógico.

BETWEEN

El operador BETWEEN facilita elegir campos en un rango de valores.

SELECT * FROM Products 
WHERE Price BETWEEN 20 AND 40 ;
SELECT * FROM Products 
WHERE Price BETWEEN 20 AND 40
AND CategoryID = 6 ;

Este operador es práctico para seleccionar entre fechas

SELECT * FROM Employees
WHERE BirthDate BETWEEN "1960-0-1" AND "1970-01" ;

Valores límite

Los valores límite de BETWEEN están incluidos. Además estos deben cumplir:

  • estar ordenados de menor a mayor;
  • ser de tipo compatible (hay que evitar mezcla de criterios).

LIKE

La cláusula LIKE se porta como un operador igualdad:

SELECT * FROM Employees
WHERE LastName LIKE "Fuller" ;
La ventaja es el potencial de usar caracteres comodín para implementar la búsqueda de patrones.

Comodin %

-- Apellidos que empiezan con "D"
SELECT * FROM Employees
WHERE LastName LIKE "D%" ;
-- Apellidos que terminan con "G"
SELECT * FROM Employees
WHERE LastName LIKE "%G" ;
-- Apellidos que incluyen la "A"
SELECT * FROM Employees
WHERE LastName LIKE "%A%" ;

Comodin _

-- Apellidos que coinciden con el patrón
SELECT * FROM Employees
-- Empieza con "F", 4 espacios en medio, termina en "R"
WHERE LastName LIKE "F____R" ; 
-- Apellidos que coinciden con el patrón
SELECT * FROM Employees
-- 1 espacio al inicio, 1 "U", 4 espacios al final
WHERE LastName LIKE "_U____" ;

Comodines combinados

-- Apellidos que coinciden con el patrón
SELECT * FROM Employees
-- 1 espacio al inicio, 1 "U", al menos 5 letras
WHERE LastName LIKE "_U___%" ; 

IS

Con el operador IS se puede filtrar tanto a los registros con valor nulos como a los no nulos.

nulos
-- Registros con valor nulo
SELECT * FROM Products
WHERE ProductName IS NULL;
no nulos
-- Registros con valores no nulos
SELECT * FROM Products
WHERE ProductName IS NOT NULL;

IN

El operador IN sirve para aquellos casos en que se necesita seleccionar muchos valores particulares de un parámetro.

Por ejemplo: valores 3,4,9

SELECT * FROM Products
WHERE SupplierID = 3
OR SupplierID = 4
OR SupplierID = 9;

Con el operador IN se reduce a:

SELECT * FROM Products
WHERE SupplierID IN (3, 4, 9);

Los valores de interés se agrupan por paréntesis y se separan con comas.

IN es considerado un operador lógico por sustituir la batería de operadores OR que aglomeraban los condicionales de relación para cada valor.

Los valores buscados pueden ser textos:

SELECT * FROM Employees
WHERE LastName IN ("King","Fuller") ;
Con el operador NOT se puede invertir el resultado, excluyendo los casos elegidos:
SELECT * FROM Employees
WHERE LastName NOT IN ("King","Fuller") ;