PaliSkill
SQL Intermédiaire

Leçon 4 / 10 — Chapitre 6: Modifier les données avec rigueur

DELETE avec une sous-requête en WHERE

Le WHERE d'un DELETE accepte lui aussi une sous-requête, pour supprimer des lignes selon une condition qui dépend d'une autre table.

DELETE FROM inscriptions
WHERE abonne_id IN (
  SELECT id FROM abonnes WHERE statut = 'inactif'
);

Cette instruction agit sur inscriptions (la table nommée après DELETE FROM), pas sur abonnes : elle supprime les inscriptions des abonnés dont le statut vaut 'inactif', en s'appuyant sur une sous-requête qui, elle, interroge abonnes.

Comme pour tout DELETE, l'absence de WHERE supprimerait ici toutes les lignes de inscriptions, sans distinction — la sous-requête ne change rien à ce principe fondamental, elle ne fait que construire une condition plus riche.

À retenir :

  • La table modifiée par un DELETE est toujours celle nommée juste après DELETE FROM, même si son WHERE interroge une autre table via une sous-requête.
  • Une sous-requête dans le WHERE d'un DELETE construit une condition plus riche, mais ne remplace jamais la nécessité d'un WHERE pour éviter de tout supprimer.
  • Comme pour UPDATE, IN, NOT IN (avec prudence, voir le piège NULL) et EXISTS/NOT EXISTS fonctionnent tous dans le WHERE d'un DELETE.

À vous de jouer : si cette instruction était exécutée sans sa clause WHERE, quelles lignes de inscriptions seraient supprimées ?

🔒

Continuez ce module

Débloquez les leçons restantes ainsi que la certification finale.

2 500 XOF / 3,81 € / 4,15 $

Débloquez les 80 leçons restantes de ce module

Votre paiement est vérifié avant l'activation de l'accès