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
DELETEest toujours celle nommée juste aprèsDELETE FROM, même si sonWHEREinterroge une autre table via une sous-requête. - Une sous-requête dans le
WHEREd'unDELETEconstruit une condition plus riche, mais ne remplace jamais la nécessité d'unWHEREpour éviter de tout supprimer. - Comme pour
UPDATE,IN,NOT IN(avec prudence, voir le piège NULL) etEXISTS/NOT EXISTSfonctionnent tous dans leWHEREd'unDELETE.
À 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