Module : ALGÈBRE RELATIONNELLE
&
LANGAGE SQL
(Bases de Données Relationnelles)
Le langage SQL - Partie 3 : Les sous-requêtes
Pr. Salma MOULINE
TC MIP-Informatique — S4 Département d’Informatique
2024/2025 Laboratoire LRIT
Introduction aux Sous-requêtes en MySQL
• Une sous-requête est une requête SQL incluse à l'intérieur d'une autre requête.
• Elle permet d'effectuer des calculs intermédiaires ou de récupérer des valeurs pour
la requête principale.
• Utilisation dans les instructions SELECT, INSERT, UPDATE ou DELETE.
Salma MOULINE —- 2024/2025
Sous-requête scalaire (une seule valeur)
• Une sous-requête qui retourne une seule valeur (une ligne, une colonne).
• Exemple : Employé (id, nom, salaire, département)
SELECT nom, salaire FROM employe
WHERE salaire > (SELECT AVG(salaire) FROM employe);
Utilise la sous-requête pour calculer le salaire moyen.
Résultat : le nom et le salaire des employés dont le salaire est strictement
supérieur au salaire moyen.
Salma MOULINE —- 2024/2025
Sous-requête avec plusieurs résultats
• Utilisée avec IN, ANY, ou ALL.
• Exemple avec IN : Employé (id, nom, salaire, dep-id)
Département (id, nom)
SELECT nom FROM employe
WHERE dep_id IN
(SELECT id FROM departement WHERE nom IN ('IT', 'Marketing'));
Sélectionne les nom des employés appartenant aux départements ‘IT’ et ‘Marketing’.
Salma MOULINE —- 2024/2025
Sous-requête avec plusieurs résultats
• Exemple avec ALL : Employé (id, nom, salaire, dep-id)
Département (id, nom)
SELECT nom FROM employe
WHERE salaire > ALL
(SELECT salaire FROM Employé WHERE dept-d = 10 );
Sélectionne les noms des employés dont le salaire est supérieur à tous les salaires
des employés du département 10.
Salma MOULINE —- 2024/2025
Sous-requête avec plusieurs résultats
• Exemple avec ANY : Employé (id, nom, salaire, dep-id)
Département (id, nom)
SELECT nom FROM employe
WHERE salaire > ANY
(SELECT salaire FROM Employé WHERE dept-d = 10 );
Sélectionne les noms des employés dont le salaire est supérieur à au moins un des
salaires des employés du département 10.
Salma MOULINE —- 2024/2025
Sous-requête corrélée
• Une sous-requête corrélée est une requête qui fait référence à une colonne de la requête
principale.
• Exemple : Employé (id, nom, salaire, dep-id)
Département (id, nom)
SELECT nom FROM employe E1
WHERE salaire > (SELECT AVG(salaire) FROM employe E2
WHERE E1dep_id = E2.dep_id);
➡ Donne le nom des employés dont le salaire est supérieur au salaire moyen des
employés du même département.
Salma MOULINE —- 2024/2025
Sous-requête dans la clause FROM
• Utilisation d'une sous-requête comme table dérivée dans la clause FROM.
• Exemple : Employé (id, nom, salaire, département)
Département (id, nom)
SELECT Dep_sal_moy.département, Dep_sal_moy.moyenne
FROM ( SELECT département, AVG(salaire) AS moyenne
FROM Employés
GROUP BY département
) AS Dep_sal_moy
WHERE moyenne > 10 000;
➡ Af che le nom et le salaire moyen, des départements dont le salaire moyen est supérieur à 10 000
Salma MOULINE —- 2024/2025
fi
Sous-requête avec EXISTS
• EXISTS véri e si une sous-requête renvoie des lignes.
• Exemple : Employé (id, nom, salaire, département)
Projet (id, nom, chef_prj)
SELECT nom FROM employe E
WHERE EXISTS (SELECT * FROM projet WHERE chef_prj = [Link]);
➡Donne le nom des employés qui sont chefs de projet.
On peut utiliser le NOT EXISTS Utilisé pour exprimer la division
Salma MOULINE —- 2024/2025
fi
Sous-requête avec ALL
• Exemple : Employé (id, nom, salaire, département)
SELECT nom FROM employe E
WHERE département <> ‘IT’ AND
salaire > ALL (SELECT salaire FROM employé
WHERE département = ‘IT’);
➡Donne le nom des employés qui ne font pas partie du département ‘IT’ mais dont le salaire
est supérieur à tout les salaires du département IT.
Utilisé pour exprimer la division
Salma MOULINE —- 2024/2025