Outils pour utilisateurs

Outils du site


cours:informatique:dev:db:postgres:fondamentaux_postgresql:235_operateur_in

Table des matières

PostgreSQL IN

Notes et traduction du tutoriel PostgreSQL Tutorial

L'opérateur IN permet de vérifier si une valeur se trouve parmi une liste de valeurs :

VALUE IN (value1,value2,...)

L'opérateur IN retourne vrai si “value” est égale à l'une des valeurs de la liste : “value1”, “value2” etc.

  • La liste des valeurs est une liste littérale incluant nombres et chaînes de caractères.
  • En plus des valeurs littérales, l' opérateur IN accepte une liste de valeurs retournée par une requête (confère tutoriel sous-requête).

Du point de vue fonctionnel, utiliser l'opérateur IN est équivalent à combiner des expressions booléennes avec l'opérateur OR:

VALUE IN (value1,value2,...)
 
# Equivaut
VALUE = value1 OR VALUE = value2 OR ...

Par exemple :

SELECT
  film_id,
  title
FROM
  film
WHERE
  film_id IN (1, 2, 3);
 
-- Requête équivalente
SELECT
  film_id,
  title
FROM
  film
WHERE
  film_id = 1
  OR film_id = 2
  OR film_id = 3;

L'usage de IN rend la première forme plus condensée et plus lisible.

Ci-dessous un exemple avec des chaînes de caractères :

SELECT
  first_name,
  last_name
FROM
  actor
WHERE
  last_name IN ('Allen', 'Chase', 'Davis')
ORDER BY
  last_name;

Un autre exemple un peut particulier avec une valeur de type timestamp :

SELECT
  payment_id,
  amount,
  payment_date
FROM
  payment
WHERE
  payment_date::DATE IN ('2007-02-15', '2007-02-16');

La requête retourne:

payment_id | amount |        payment_date
------------+--------+----------------------------
      17503 |   7.99 | 2007-02-15 22:25:46.996577
      17504 |   1.99 | 2007-02-16 17:23:14.996577
      17505 |   7.99 | 2007-02-16 22:41:45.996577
      17512 |   4.99 | 2007-02-16 00:10:50.996577
...

Ici le champ payment_date est de type timestamp contenant une partie date et une partie heure. Pour pouvoir comparer la valeur payment_date avec une liste de dates, il faut d'abord changer son type via l'opérateur de transtypage :: (cast operator)

-- Convertir le timestamp en date
payment_date::DATE

Par exemple si le timestamp vaut 2007-02-15 22:25:46.996577, l'opérateur de transtypage le convertit en 2007-02-15.

L'opérateur NOT IN

L'opérateur NOT IN retourne vrai si la valeur est différente de tous les éléments de la liste.

Utiliser l'opérateur NOT IN est équivalent à utiliser une combinaison d'expression booléennes avec des opérateurs AND :

VALUE NOT IN (value1, value2, ...)
 
-- Equivaut
VALUE <> value1 AND VALUE <> value2 AND ...

Par exemple :

SELECT
  film_id,
  title
FROM
  film
WHERE
  film_id NOT IN (1, 2, 3)
ORDER BY
  film_id;
 
-- Requête équivalente
SELECT
  film_id,
  title
FROM
  film
WHERE
  film_id <> 1
  AND film_id <> 2
  AND film_id <> 3
ORDER BY
  film_id;

Résumé

  • Utiliser l'opérateur IN pour vérifier si une valeur se trouve dans une liste de valeurs ;
  • Utiliser l'opérateur NOT pour inverser la comparaison et vérifier qu'un valeur est bien absente d'une liste de valeurs.

◁ Précédent | ⌂ Retour au sommaire | Suivant ▷

cours/informatique/dev/db/postgres/fondamentaux_postgresql/235_operateur_in.txt · Dernière modification : 2025/04/09 19:47 de yoann