15 minutes de SQL
Utiliser une sous-requête avec IN
Sous-requête : l’idée
Une sous-requête est une requête SQL placée à l’intérieur d’une autre. Elle permet souvent d’écrire une condition « en deux temps ».
Un schéma classique :
... WHERE x IN (SELECT ...)
La sous-requête calcule un ensemble de valeurs, et la requête principale garde les lignes dont x appartient à cet ensemble.
Remarque : selon les enseignants, les sous-requêtes peuvent être vues comme un prolongement naturel des requêtes de base ; l’essentiel ici est d’en comprendre la logique.
Exemples commentés
SELECT pseudo
FROM joueurs
WHERE id IN (
SELECT id
FROM parties
WHERE date = '2024-06-01'
);
On affiche les clients ayant passé au moins une commande. La sous-requête donne les id_client présents dans commandes.
SELECT nom, ville
FROM clients
WHERE id_client IN (
SELECT id_client
FROM commandes
);
On affiche les films dont le budget est supérieur à la moyenne des budgets de tous les films. La sous-requête calcule cette moyenne.
SELECT film_titre, budget
FROM films
WHERE budget > (
SELECT AVG(budget)
FROM films
);
On veut afficher les triangles dont le périmètre est strictement supérieur au périmètre moyen.
SELECT idt, ab, ac, bc
FROM triangles
WHERE (ab + ac + bc) > (
SELECT AVG(ab + ac + bc)
FROM triangles
);
Dans une base « étudiants / notes », on veut afficher les étudiants ayant au moins une note inférieure à 8. La sous-requête repère les identifiants concernés dans notes.
etudiants(id_etudiant, nom, prenom) et notes(id_etudiant, matiere, note)
SELECT nom, prenom
FROM etudiants
WHERE id_etudiant IN (
SELECT id_etudiant
FROM notes
WHERE note < 8
);
Accès restreint. Les exercices interactifs et le feedback IA sont réservés aux membres.
On veut récupérer les pseudos des joueurs ayant joué à une date donnée. On commence par sélectionner les identifiants dans
parties, puis on récupère les pseudos dansjoueurs.joueurs(id, pseudo, credit, niveau)etparties(id, date, score)