Oracle NOT EXISTS (Français)

Résumé : dans ce tutoriel, vous apprenez à utiliser l’opérateur Oracle NOT EXISTS pour soustraire un ensemble de données à un autre.

Introduction à l’opérateur NOT EXISTS d’Oracle

L’opérateur NOT EXISTS fonctionne à l’inverse de l’opérateur EXISTS. Nous utilisons souvent l’opérateur NOT EXISTS avec une sous-requête pour soustraire un ensemble de données à un autre.

Voyez l’instruction suivante qui utilise l’opérateur NOT EXISTS:

SELECT *FROM table_nameWHERE NOT EXISTS (subquery);

L’opérateur NOT EXISTS renvoie true si la sous-requête ne renvoie aucun rang. Sinon, il renvoie false.

Notez que l’opérateur NOT EXISTS renvoie false si la sous-requête renvoie des lignes avec une valeur NULL.

Exemples de NOT EXISTS d’Oracle

Voir les tables suivantes customers et orders dans la base de données exemple :

L’instruction suivante trouve tous les clients qui n’ont pas de commande :

SELECT nameFROM customersWHERE NOT EXISTS ( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id )ORDER BY name;


Pour archiver les clients qui n’ont pas de commande, vous utilisez l’instruction suivante :

CREATE TABLE customers_archive ASSELECT * FROM customersWHERE NOT EXISTS ( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id );

Pour mettre à jour la limite de crédit des clients qui n’ont pas de commande en 2017, vous utilisez l’instruction suivante UPDATE :

UPDATE customersSET credit_limit = 0WHERE NOT EXISTS( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id AND EXTRACT( YEAR FROM order_date );

Et pour supprimer tous les clients qui n’ont eu aucune commande en 2016 et 2017 de la table customers, vous utilisez l’instruction DELETE suivante :

Oracle NOT EXISTS vs. NOT IN

L’instruction suivante utilise l’opérateur IN avec une sous-requête:

SELECT*FROMtable_nameWHEREid IN(subquery);

Supposons que la subquery renvoie quatre valeurs 1, 2, 3 et NULL. Vous pouvez réécrire l’ensemble de la requête ci-dessus comme suit :

SELECT *FROM table_nameWHERE id = 1 OR id = 2 OR id = 3 OR id = NULL;

L’expression suivante renvoie toujours une valeur NULL car une valeur NULL ne peut pas être comparée à quoi que ce soit.

id = NULL

Par conséquent, l’expression suivante renvoie une valeur NULL si une ligne du jeu de résultats de la sous-requête est NULL.

id NOT IN (subquery)

En revanche, NULL n’affecte pas le résultat de l’opérateur NOT EXIST car l’opérateur NOT EXISTS vérifie uniquement l’existence des lignes dans la sous-requête :

SELECT *FROM table_nameWHERE NOT EXISTS(subquery);

En conclusion, les opérateurs NOT EXISTS et NOT IN se comportent différemment lorsque des valeurs nulles sont impliquées.

Dans ce tutoriel, vous avez appris à utiliser l’opérateur NOT EXISTS d’Oracle pour soustraire un ensemble de données à un autre.

  • Ce tutoriel vous a-t-il été utile ?
  • OuiNon

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *