Forskjellen mellom underspørring og korrelert underspørring

Er følgende del av SQL Query en normal spørring eller en 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 noen også oppgi forskjellen mellom de to?

Eksemplet over er ikke Co-relatert underspørring. Det er Derived Table/Inline-View siden det er en underspørring i FROM-setningen.

En Corelated Sub-spørring bør referere til sin overordnede (hovedspørring) tabell i den. Se for eksempel Finn den n-te maksimallønnen etter Co-relatert underspørring:


SELECT Salary 
FROM Employee E1
WHERE N-1 = (SELECT COUNT(*)
             FROM Employee E2
             WHERE E1.salary 
Kommentarer (4)
Løsning

Korrelert underspørring er en underspørring som bruker verdier fra den ytre spørringen. I dette tilfellet må den indre spørringen utføres for hver rad i den ytre spørringen.

Se eksempel her http://en.wikipedia.org/wiki/Correlated_subquery

Enkel underforespørsel bruker ikke verdier fra den ytre spørringen og beregnes bare én gang:

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

Eksempel på relatert delspørring -

Query For å finne alle ansatte med lønn over gjennomsnittet for deres avdeling

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

Jeg tror forklaringen nedenfor vil hjelpe deg... . differensiering mellom disse: Korrelert underspørring er en indre spørring referert til av hovedspørring (ytre spørring) slik at den indre spørringen betraktes som gjentatte ganger.

Ikke-korrelert underspørring er en underspørring som er uavhengig av den ytre spørringen, og den kan utføres på egen hånd uten å stole på den ytre hovedspørringen.

plain subquery er ikke avhengig av den ytre spørringen,

Kommentarer (1)