logo

Sous-requêtes corrélées SQL

En SQL, une sous-requête corrélée est une sous-requête qui fait référence à une colonne de la requête externe. La sous-requête est exécutée de manière répétée pour chaque ligne de la requête externe, en utilisant les valeurs de la ligne actuelle pour effectuer la sous-requête. Le résultat de la sous-requête est ensuite utilisé dans l'évaluation de la requête externe.

Les sous-requêtes corrélées sont utilisées pour le traitement ligne par ligne. Chaque sous-requête est exécutée une fois pour chaque ligne de la requête externe.



Une sous-requête corrélée est évaluée une fois pour chaque ligne traitée par l'instruction parent. L'instruction parent peut être un SÉLECTIONNER , MISE À JOUR , ou SUPPRIMER déclaration.

Syntaxe:

SELECT colonne1, colonne2,….

DE table1 externe



OÙ opérateur colonne1

(SELECT colonne1, colonne2

DE la table2



OÙ expr1 =

externe.expr2);

Une sous-requête corrélée est un moyen de lire chaque ligne d'un tableau et de comparer les valeurs de chaque ligne avec les données associées. Il est utilisé chaque fois qu'une sous-requête doit renvoyer un résultat ou un ensemble de résultats différent pour chaque ligne candidate prise en compte par la requête principale. En d'autres termes, vous pouvez utiliser une sous-requête corrélée pour répondre à une question en plusieurs parties dont la réponse dépend de la valeur de chaque ligne traitée par l'instruction parent.

Sous-requêtes imbriquées et sous-requêtes corrélées

Avec une sous-requête imbriquée normale, la requête interne SÉLECTIONNER La requête s'exécute en premier et s'exécute une fois, renvoyant les valeurs à utiliser par la requête principale. Toutefois, une sous-requête corrélée s'exécute une fois pour chaque ligne candidate prise en compte par la requête externe. En d’autres termes, la requête interne est pilotée par la requête externe.

NOTE: Vous pouvez également utiliser le N'IMPORTE LEQUEL et TOUS opérateur dans une sous-requête corrélée. EXEMPLE de sous-requêtes corrélées : Retrouvez tous les salariés qui gagnent plus que le salaire moyen de leur service.

Requête:

SELECT last_name, salary, department_id  FROM employees outer  WHERE salary>(SELECT AVG (salaire) FROM employés WHERE Department_id = groupe external.department_id par Department_id );>

Une autre utilisation de la corrélation est dans MISE À JOUR et SUPPRIMER

MISE À JOUR CORRÉLÉE

UPDATE table1 alias1  SET column = (SELECT expression   FROM table2 alias2  WHERE alias1.column =  alias2.column);>

Utilisez une sous-requête corrélée pour mettre à jour les lignes d'une table en fonction des lignes d'une autre table.

SUPPRESSION CORRÉLÉE

DELETE FROM table1 alias1  WHERE column1 operator  (SELECT expression  FROM table2 alias2  WHERE alias1.column = alias2.column);>

Utilisez une sous-requête corrélée pour supprimer des lignes d'une table en fonction des lignes d'une autre table.

scan.suivant java

Utilisation de l'opérateur EXISTS

L'opérateur EXISTS teste l'existence de lignes dans l'ensemble de résultats de la sous-requête. Si une valeur de ligne de sous-requête est trouvée, la condition est signalée VRAI et la recherche ne continue pas dans la requête interne, et si elle n'est pas trouvée alors la condition est signalée FAUX et la recherche continue dans la requête interne.
EXEMPLE d'utilisation de l'opérateur EXIST :
Recherchez les employés dont au moins une personne relève.

Requête:

SELECT employee_id, last_name, job_id, department_id FROM employees outer WHERE EXISTS ( SELECT ’X’ FROM employees WHERE manager_id = outer.employee_id);>

SORTIR :

EXEMPLE d'utilisation de l'opérateur NOT EXIST
Recherchez tous les départements qui n’ont aucun employé.

Requête:

SELECT department_id, department_name FROM departments d WHERE NOT EXISTS (SELECT ’X’ FROM employees WHERE department_id = d.department_id);>

SORTIR :

Foire aux questions sur les sous-requêtes corrélées SQL – FAQ

Quelle est la différence entre les sous-requêtes corrélées et les sous-requêtes classiques ?

Les sous-requêtes régulières (non corrélées) sont indépendantes de la requête externe et ne sont évaluées qu'une seule fois avant l'exécution de la requête principale. En revanche, les sous-requêtes corrélées dépendent de la requête externe et sont exécutées pour chaque ligne de la requête principale.

Quand dois-je utiliser des sous-requêtes corrélées ?

Les sous-requêtes corrélées sont utiles lorsque vous devez filtrer le résultat de la requête externe en fonction d'une condition qui nécessite de référencer les valeurs de la requête externe elle-même. Ils sont couramment utilisés dans les scénarios où la condition repose sur les données des tables associées.