Diferença entre Subquery e Correlated Subquery

A seguinte peça de SQL Query é uma consulta normal ou uma Subconsulta Correlata ??

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

Além disso, alguém pode afirmar a diferença entre os dois

O exemplo acima não é Sub-Pergunta co-relacionada. É uma Tabela Derivada / Inline-View uma vez que, isto é, uma Subconsulta dentro da Cláusula FROM.

Uma Subconsulta Correlata deve consultar a sua tabela pai(consulta principal) na mesma. Por exemplo Veja o Nth max salary by Co-related Sub-query:


SELECT Salary 
FROM Employee E1
WHERE N-1 = (SELECT COUNT(*)
             FROM Employee E2
             WHERE E1.salary 
Comentários (4)
Solução

A Subconsulta relacionada é uma subconsulta que utiliza valores da consulta externa. Neste caso, a consulta interna tem de ser executada para cada linha da consulta externa.

Veja o exemplo aqui http://en.wikipedia.org/wiki/Correlated_subquery

A subconsulta simples não'não usa valores da consulta externa e está sendo calculada apenas uma vez:

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

**Exemplo de Subconsultas relacionadas -***

Consulta Para encontrar todos os funcionários cujo salário esteja acima da média para o seu departamento

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

Acho que as explicações abaixo vão ajudar-te... a diferenciação entre eles: "Subconsulta relacionada a uma subconsulta" é uma consulta interna referenciada pela consulta principal (consulta externa) de tal forma que a consulta interna é considerada como sendo excutada repetidamente.

A "subconsulta não-correlacionada" é uma subconsulta que é independente da consulta externa e pode ser executada sobre ela's próprios sem depender da consulta externa principal.

A "subconsulta de planície" não depende da consulta externa,

Comentários (1)