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
.