Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Différence entre sous-requête et sous-requête corrélée

L'exemple ci-dessus n'est pas une sous-requête co-liée. Il s'agit d'une table dérivée / d'une vue en ligne depuis, c'est-à-dire une sous-requête dans la clause FROM.

Une sous-requête corrélée doit faire référence à sa table parent (requête principale). Par exemple Voir trouver le Nième salaire max par sous-requête co-liée :

SELECT Salary 
FROM Employee E1
WHERE N-1 = (SELECT COUNT(*)
             FROM Employee E2
             WHERE E1.salary <E2.Salary) 

Requêtes co-liées vs sous-requêtes imbriquées.

Les différences techniques entre la sous-requête normale et la sous-requête co-liée sont :

1. Boucle : Boucle de sous-requête co-liée sous la requête principale ; considérant que non imbriqué; par conséquent, la sous-requête co-liée s'exécute à chaque itération de la requête principale. Alors qu'en cas de requête imbriquée ; la sous-requête s'exécute en premier, puis la requête externe s'exécute ensuite. Par conséquent, le nombre maximal de non. des exécutions sont NXM pour les sous-requêtes corrélées et N+M pour les sous-requêtes.

2. Dépendance (intérieur vers extérieur vs extérieur vers intérieur) : Dans le cas d'une sous-requête co-liée, la requête interne dépend de la requête externe pour le traitement, tandis que dans une sous-requête normale, la requête externe dépend de la requête interne.

3.Performances : L'utilisation de la sous-requête co-liée diminue les performances, car elle effectue des itérations NXM au lieu d'itérations N + M. ¨ Exécution de sous-requêtes co-liées.

Pour plus d'informations avec des exemples :

http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-Sql-Sub-Queries-Nested-Co-related.html