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
.