Sous-requête Corrélée SQL
Résumé : dans ce tutoriel, vous découvrirez la sous-requête corrélée SQL qui est une sous-requête qui utilise des valeurs de la requête externe.
Introduction à la sous-requête corrélée SQL
Commençons par un exemple.
Voir la table employees
suivante dans l’exemple de base de données :
La requête suivante trouve les employés dont le salaire est supérieur au salaire moyen de tous les employés :
SELECT employee_id, first_name, last_name, salaryFROM employeesWHERE salary > (SELECT AVG(salary) FROM employees);
Dans cet exemple, la sous-requête est utilisée dans la clause WHERE
. Vous pouvez voir certains points de cette requête:
Tout d’abord, vous pouvez exécuter la sous-requête qui renvoie le salaire moyen de tous les employés de manière indépendante.
SELECT AVG(salary)FROM employees;
Deuxièmement, le système de base de données ne doit évaluer la sous-requête qu’une seule fois.
Troisièmement, la requête externe utilise le résultat renvoyé par la sous-requête. La requête externe dépend de la sous-requête pour sa valeur. Cependant, la sous-requête ne dépend pas de la requête externe. Parfois, nous appelons cette sous-requête est une sous-requête simple.
Contrairement à une sous-requête simple, une sous-requête corrélée est une sous-requête qui utilise les valeurs de la requête externe. En outre, une sous-requête corrélée peut être évaluée une fois pour chaque ligne sélectionnée par la requête externe. Pour cette raison, une requête qui utilise une sous-requête corrélée peut être lente.
Une sous-requête corrélée est également appelée sous-requête répétitive ou sous-requête synchronisée.
Exemples de sous-requêtes corrélées SQL
Voyons quelques exemples supplémentaires des sous-requêtes corrélées pour mieux les comprendre.
Sous-requête corrélée SQL dans l’exemple de clause WHERE
La requête suivante trouve tous les employés dont le salaire est supérieur au salaire moyen des employés de leurs départements :
SELECT employee_id, first_name, last_name, salary, department_idFROM employees eWHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = e.department_id)ORDER BY department_id , first_name , last_name;
Voici la sortie:
Dans cet exemple, la requête externe est :
SELECT employee_id, first_name, last_name, salary, department_idFROM employees eWHERE salary >...
et la requête corrélée la sous-requête est :
SELECT AVG( list_price )FROM productsWHERE category_id = p.category_id
Pour chaque employé, le système de base de données doit exécuter la sous-requête corrélée une fois pour calculer le salaire moyen des employés dans le département de l’employé actuel.
Sous-requête corrélée SQL dans l’exemple de clause SELECT
La requête suivante renvoie les employés et le salaire moyen de tous les employés de leurs départements :
SELECT employee_id, first_name, last_name, department_name, salary, (SELECT ROUND(AVG(salary),0) FROM employees WHERE department_id = e.department_id) avg_salary_in_departmentFROM employees e INNER JOIN departments d ON d.department_id = e.department_idORDER BY department_name, first_name, last_name;
La sortie est :
Pour chaque employé, le système de base de données doit exécuter la sous-requête corrélée une fois pour calculer le salaire moyen par le département de l’employé.
Sous-requête corrélée SQL avec l’exemple de l’opérateur EXISTS
Nous utilisons souvent une sous-requête corrélée avec l’opérateur EXISTS
. Par exemple, la requête suivante renvoie tous les employés qui n’ont pas de personnes à charge :
SELECT employee_id, first_name, last_nameFROM employees eWHERE NOT EXISTS( SELECT * FROM dependents d WHERE d.employee_id = e.employee_id)ORDER BY first_name , last_name;
L’image suivante montre la sortie :
Dans ce tutoriel, vous avez appris la sous-requête corrélée SQL et comment l’appliquer pour former une requête complexe.
- Ce tutoriel a-t-il été utile?
- Ouinon
Leave a Reply