Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Differenza tra subquery e subquery correlata

L'esempio sopra non è una sottoquery correlata. È tabella derivata / vista in linea poiché, ad esempio, una sottoquery all'interno della clausola FROM.

Una sottoquery correlata dovrebbe fare riferimento alla sua tabella padre (query principale). Ad esempio, vedere trovare l'ennesimo stipendio massimo per sottoquery correlata:

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

Query correlate e sottoquery nidificate.

Le differenze tecniche tra la sottoquery normale e la sottoquery correlata sono:

1. Ciclo: Ciclo di sottoquery correlato sotto la query principale; mentre nidificato non; pertanto la sottoquery correlata viene eseguita su ogni iterazione della query principale. considerando che in caso di Nested-query; la sottoquery viene eseguita prima, quindi la query esterna viene eseguita successivamente. Quindi, il massimo n. delle esecuzioni sono NXM per le sottoquery correlate e N+M per le sottoquery.

2. Dipendenza (da interno a esterno vs esterno a interno): Nel caso di sottoquery correlate, la query interna dipende dalla query esterna per l'elaborazione mentre nella normale sottoquery, la query esterna dipende dalla query interna.

3.Prestazioni: L'uso di sottoquery correlate alle prestazioni diminuisce, poiché esegue iterazioni NXM anziché N+M iterazioni. ¨ Esecuzione di sottoquery correlata.

Per ulteriori informazioni con esempi:

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