Verschil tussen Subquery en gecorreleerde Subquery

Is het volgende stukje SQL Query een normale query of een Correlated Subquery ??

SELECT UserID,
       FirstName,
       LastName,
       DOB,
       GFName,
       GLName,
       LoginName,
       LoginEffectiveDate,
       LoginExpiryDate,
       Password,
       Email,
       ReportingTo,
       Mobile,
       CommunicationPreference,
       IsActive
FROM   (SELECT row_number() OVER (ORDER BY FirstName) AS Row,
               UserID,
               FirstName,
               LastName,
               DOB,
               GFName,
               GLName,
               LoginName,
               LoginEffectiveDate,
               LoginExpiryDate,
               Password,
               Email,
               ReportingTo,
               Mobile,
               CommunicationPreference,
               IsActive
        FROM   DivakarUserRegistration)  T

Kan iemand ook het verschil tussen beide aangeven

Bovenstaand voorbeeld is geen Co-gerelateerde Sub-Query. Het is een Afgeleide Tabel / Inline-View omdat het een Sub-query is binnen FROM-clausule.

Een gecorreleerde Sub-query moet verwijzen naar zijn bovenliggende (hoofd Query) tabel in het. Bijvoorbeeld Zie vind de Nth max salaris door Samenhangende Sub-query:


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

Een gecorreleerde Subquery is een subquery die gebruik maakt van waarden uit de buitenste query. In dit geval moet de binnenste query voor elke rij van de buitenste query worden uitgevoerd.

Zie voorbeeld hier http://en.wikipedia.org/wiki/Correlated_subquery

Eenvoudige subquery gebruikt geen waarden uit de buitenste query en wordt slechts eenmaal berekend:

SELECT id, first_name 
FROM student_details 
WHERE id IN (SELECT student_id
FROM student_subjects 
WHERE subject= 'Science'); 

CoRelated Subquery Voorbeeld -

Query Om alle werknemers te vinden waarvan het salaris boven het gemiddelde van hun afdeling ligt

 SELECT employee_number, name
       FROM employees emp
       WHERE salary > (
         SELECT AVG(salary)
           FROM employees
           WHERE department = emp.department);
Commentaren (7)

Ik denk dat onderstaande uitleg u zal helpen... differentiatie tussen deze: Correlated subquery is een innerlijke query waarnaar wordt verwezen door de belangrijkste query (buitenste query) zodanig dat innerlijke query beschouwd als wordt herhaaldelijk geëxcuteerd.

niet-gerelateerde sub query is een sub query die een onafhankelijk is van de buitenste query en het kan uitgevoerd op het's eigen zonder te vertrouwen op de belangrijkste buitenste query.

Eenvoudige sub query` is niet afhankelijk van de buitenste query,

Commentaren (1)