Testez-vous une liste ou une relation ?
statut IN ('Payée', 'En attente') décrit une liste fermée. EXISTS convient lorsqu’une ligne extérieure doit être conservée si une ligne liée remplit une condition.
EXISTS évite de dupliquer un client qui possède plusieurs commandes correspondantes, car seule l’existence de la première correspondance compte.
La requête expliquée
Commencez par définir ce que doit représenter une ligne du résultat. Cette décision détermine les colonnes, les regroupements et les contrôles nécessaires.
L’exemple suivant isole le mécanisme principal. Exécutez-le, observez le résultat, puis modifiez une seule clause à la fois pour comprendre son effet.
SELECT c.id_client, c.nom
FROM clients c
WHERE EXISTS (
SELECT 1
FROM commandes co
WHERE co.id_client = c.id_client
AND co.statut = 'Payée'
);Lire le résultat comme un analyste
La sous-requête est corrélée par id_client. SELECT 1 indique que les colonnes internes ne sont pas utilisées dans le résultat.
Soyez prudent avec NOT IN si la liste peut contenir NULL ; NOT EXISTS exprime souvent plus clairement l’absence de relation.
- Identifier la clé de corrélation.
- Tester un cas avec plusieurs correspondances.
- Tester un cas sans correspondance.
- Contrôler la présence éventuelle de NULL.
Les erreurs qui faussent l’analyse
Une requête peut être valide sans répondre correctement à la question. Les erreurs les plus coûteuses sont souvent silencieuses : mauvais périmètre, ligne multipliée ou valeur absente interprétée comme zéro.
Avant de partager le résultat, confrontez-le à un petit échantillon calculé à la main et conservez la définition du périmètre avec la requête.
- Afficher des colonnes internes alors que seule l’existence compte.
- Oublier la corrélation et rendre EXISTS vrai pour toutes les lignes.
- Utiliser NOT IN avec des NULL non anticipés.
- Joindre puis ajouter DISTINCT pour compenser les répétitions.
Passez à la pratique
Faites l’exercice EXISTS sur les commandes importantes, puis changez le seuil et observez la population retenue.
Le simulateur SQL de SQL.tn exécute uniquement des requêtes de lecture sur des données fictives dans votre navigateur. Vous pouvez essayer plusieurs écritures et comparer leur résultat sans installer de logiciel.
Mettez ce guide en pratique.
Ouvrez l’exercice associé, exécutez votre requête et comparez le résultat attendu.
