Omet navegació

11. La clàusula WHERE

 

Ens servirà per establir filtres. Només eixiran les files que satisfacen la condició del filtre.

Sintaxi

SELECT <columnes>
FROM <taules>
WHERE <condició> ;

 

La condició podrà ser una o més d'una, unides en aquest cas pels operadors lògics AND, OR i NOT. Cada condició serà una comparació entre expressions, on poden entrar columnes, constants, paràmetres, funcions vàlides de PostgreSQL, ... unides per operadors aritmètics. Els operadors que es poden utilitzar per a fer les comparacions són:

  • <     <=     =     >=     >           <>  (!=)   (distint)
  • BETWEEN valor1 AND valor2 (els valors compresos entre valor1 i valor2)
  • IN (llista_de_valors) si el valor amb què es compara està en la llista de valors (entre parèntesis i valors separats per comes)
  • També podem utilitzar LIKE en la condició. En els exemples 6, 7 i 8 es veu la seua utilització. L'operador LIKE s'utilitza junt amb els caràcters "comodí":
    • % (equival a 0 o més caràcters, els que siga)
    • _ (1 i només un caràcter, això sí, el que siga).
  • IS [NOT] és un operador especial per a comparar amb el valor nul (NULL).

 

Recordem per una altra banda com s'escriuen les constants:

  • les constants numèriques van tal qual, sense cometes ni res (amb el punt decimal, i no coma decimal)
  • les constants alfanumèriques (de text) van entre cometes simples
  • les constants de data van entre cometes simples, i PostgreSQL ja farà la conversió
  • per últim el valur nul s'escriu NULL

 

Exemples

  1. Traure les comarques de la província de Castelló

SELECT *
FROM COMARQUES
WHERE provincia = 'Castelló';

 

  1. Traure totes les poblacions que tenen de llengua el valencià.

SELECT *
FROM POBLACIONS
WHERE llengua = 'V';

 

  1. Traure les poblacions de la comarca de la Plana Alta de més de 300 metres d'altura

SELECT *
FROM POBLACIONS
WHERE nom_c = 'Plana Alta' AND altura > 300;

 

  1. Traure els instituts dels codis postals 12001, 12002 o 12003.

SELECT *
FROM INSTITUTS
WHERE codpostal=12001 OR codpostal=12002 OR codpostal=12003;

 

SELECT *
FROM INSTITUTS
WHERE codpostal >= 12001 AND codpostal <= 12003;

 

SELECT *
FROM INSTITUTS
WHERE codpostal BETWEEN 12001 AND 12003;

 

SELECT *
FROM INSTITUTS
WHERE codpostal IN (12001,12002,12003);

 

  1. Traure els pobles de la comarca Plana d'Utiel. Tenim la dificultat de la cometa simple, que ens serveix sempre per a delimitar una constant alfanumèrica. La manera de solucionar-ho és posar-la dues vegades
SELECT *
FROM POBLACIONS
WHERE nom_c = 'Plana d''Utiel';

  1. Traure nom i província dels pobles que comencen per G (el primer cognom).

SELECT nom, nom_c
FROM POBLACIONS
WHERE nom LIKE 'G%';

 

  1. Traure les poblacions que estan a 40º 1' (i els segons que siguen) de latitud nord

SELECT *
FROM POBLACIONS
WHERE latitud LIKE '40º01____N';

Hem posat els 40º i 1 minut. A continuació hem posat exactament 4 caràcters, els que siga. Hem posat 4, que serien la cometa que assenyala els minuts, les 2 xifres dels segons i la doble cometa que assenyala els segons. Observeu com la cometa simple és problemàtica, ja que és la que serveix per a delimitar la constant alfanumèrica. Si volem posar-la, en la constant l'haurem de doblar (l'haurem de posar 2 vegades seguides)

SELECT *
FROM POBLACIONS
WHERE latitud LIKE '40º01''__"N';

  1. Traure totes les poblacions, el nom de les quals només consta d'una paraula (no tindran espais en blanc).

SELECT *
FROM POBLACIONS
WHERE nom NOT LIKE '% %';

 

  1. Traure els instituts que no tenen introduït el numero del carrer.

SELECT *
FROM INSTITUTS
WHERE numero IS NULL;