Clause WHERE PostgreSQL

En PostgreSQL, lorsque nous devons interroger des données dans une seule table ou plusieurs tables selon des conditions spécifiées, nous pouvons ajouter la clause WHERE à l'instruction SELECT afin de filtrer les données dont nous n'avons pas besoin.

La clause WHERE peut être utilisée non seulement dans les instructions SELECT, mais aussi dans les instructions UPDATE, DELETE et autres.

Syntaxe

Voici la syntaxe générale pour lire des données depuis la base de données à l'aide de la clause WHERE dans une instruction SELECT :

SELECT column1, column2, columnN
FROM table_name
WHERE [condition1]

Nous pouvons utiliser des opérateurs de comparaison ou des opérateurs logiques dans la clause WHERE, tels que>, <, =, LIKE, NOTetc.

Créez la table COMPANY (Télécharger le fichier SQL COMPANY), avec le contenu de données suivant :

exampledb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)
Dans les exemples suivants, nous utilisons des opérateurs logiques pour lire les données de la table.

ET

TrouverAGE (age)champ supérieur ou égal à 25, etSALARY (salary)champ supérieur ou égal à 65000 :

exampledb=# SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;
 id | name  | age |  address   | salary
----+-------+-----+------------+--------
  4 | Mark  |  25 | Rich-Mond  |  65000
  5 | David |  27 | Texas      |  85000
(2 rows)

OR

TrouverAGE (age)champ supérieur ou égal à 25, ouSALARY (salary)champ supérieur ou égal à 65000 :

exampledb=# SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;
id | name  | age | address     | salary
----+-------+-----+-------------+--------
  1 | Paul  |  32 | California  |  20000
  2 | Allen |  25 | Texas       |  15000
  4 | Mark  |  25 | Rich-Mond   |  65000
  5 | David |  27 | Texas       |  85000
(4 rows)

NOT NULL

Trouver les enregistrements dans la table COMPANY où leAGE (age)champ n'est pas vide :

exampledb=#  SELECT * FROM COMPANY WHERE AGE IS NOT NULL;
  id | name  | age | address    | salary
 ----+-------+-----+------------+--------
   1 | Paul  |  32 | California |  20000
   2 | Allen |  25 | Texas      |  15000
   3 | Teddy |  23 | Norway     |  20000
   4 | Mark  |  25 | Rich-Mond  |  65000
   5 | David |  27 | Texas      |  85000
   6 | Kim   |  22 | South-Hall |  45000
   7 | James |  24 | Houston    |  10000
(7 rows)

LIKE

Trouver dans la table COMPANYNAME (name)champ qui commence par Pa :

exampledb=# SELECT * FROM COMPANY WHERE NAME LIKE 'Pa%';
id | name | age |address    | salary
----+------+-----+-----------+--------
  1 | Paul |  32 | California|  20000

IN

L'instruction SELECT suivante liste le champAGE (age)égal à 25 ou 27 :

exampledb=# SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 );
 id | name  | age | address    | salary
----+-------+-----+------------+--------
  2 | Allen |  25 | Texas      |  15000
  4 | Mark  |  25 | Rich-Mond  |  65000
  5 | David |  27 | Texas      |  85000
(3 rows)

NOT IN

L'instruction SELECT suivante liste le champAGE (age)différent de 25 ou 27 :

exampledb=# SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 );
 id | name  | age | address    | salary
----+-------+-----+------------+--------
  1 | Paul  |  32 | California |  20000
  3 | Teddy |  23 | Norway     |  20000
  6 | Kim   |  22 | South-Hall |  45000
  7 | James |  24 | Houston    |  10000
(4 rows)

ENTRE

L'instruction SELECT suivante liste le champAGE (age)compris entre 25 et 27 :

exampledb=# SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;
 id | name  | age | address    | salary
----+-------+-----+------------+--------
  2 | Allen |  25 | Texas      |  15000
  4 | Mark  |  25 | Rich-Mond  |  65000
  5 | David |  27 | Texas      |  85000
(3 rows)

Sous-requête

L'instruction SELECT suivante utilise une sous-requête SQL. La sous-requête lit les donnéesSALARY (salary)dont le champ est supérieur à 65000, puis, via l'opérateurEXISTS, détermine si elle renvoie des lignes. Si des lignes sont renvoyées, elle lit tous lesAGE (age).

exampledb=# SELECT AGE FROM COMPANY
        WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
 age
-----
  32
  25
  23
  25
  27
  22
  24
(7 rows)

L'instruction SELECT suivante utilise également une sous-requête SQL. La sous-requête lit le champSALARY (salary)supérieur à 65000 dans les données du champAGE (age), puis utilise l'>opérateur pour interroger les données supérieures auxAGE (age):

exampledb=# SELECT * FROM COMPANY
        WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
 id | name | age | address    | salary
----+------+-----+------------+--------
  1 | Paul |  32 | California |  20000
Autres extensions