Exploiter une base relationnelle

15 minutes de SQL

Utiliser une sous-requête avec IN

Thème : Exploiter une base relationnelle

Niveau : ECG2

Année : Maths appliquées

Objectif : Comprendre le principe d’une sous-requête (requête dans une requête), par exemple avec IN, pour exprimer proprement « sélectionner ceux dont la valeur appartient à un ensemble ».

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

Exemple 1

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 dans joueurs.

joueurs(id, pseudo, credit, niveau) et parties(id, date, score)

SELECT pseudo
FROM joueurs
WHERE id IN (
  SELECT id
  FROM parties
  WHERE date = '2024-06-01'
);
Exemple 2

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
);
Exemple 3

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
);
Exemple 4

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
);
Exemple 5

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.

Et pour quelques minutes de plus…

Niveau 1 Lire et interpréter

Niveau 2 Compléter une requête

Niveau 3 Écrire une requête

error: Ce contenu est protégé !