¿Es la siguiente pieza de consulta SQL una consulta normal o una subconsulta relacionada?
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
Además, ¿puede alguien indicar la diferencia entre ambas
El ejemplo anterior no es una subconsulta relacionada. Se trata de una tabla derivada/vista en línea, es decir, una subconsulta dentro de la cláusula FROM.
Una Sub-Consulta Corelada debe referirse a su tabla padre (consulta principal). Por ejemplo, busque el salario máximo Nth por Co-query:
SELECT Salary
FROM Employee E1
WHERE N-1 = (SELECT COUNT(*)
FROM Employee E2
WHERE E1.salary <E2.Salary)
**Co-Relación vs. Sub-Consultas Anidadas.
La diferencia técnica entre la subconsulta normal y la subconsulta co-relacionada son:
1. Bucle: Las subconsultas relacionadas con la consulta principal son un bucle, mientras que las anidadas no; por lo tanto, las subconsultas relacionadas con la consulta se ejecutan en cada iteración de la consulta principal. Mientras que en el caso de la consulta anidada, la subconsulta se ejecuta primero y luego la consulta externa. Por lo tanto, el número máximo de ejecuciones es NXM para la subconsulta correlacionada y N+M para la subconsulta.
2. Dependencia (interna a externa vs. externa a interna): En el caso de la subconsulta correlacionada, la consulta interna depende de la externa para su procesamiento, mientras que en la subconsulta normal, la consulta externa depende de la interna.
**3. Rendimiento Utilizando la subconsulta co-relacionada el rendimiento disminuye, ya que, realiza NXM iteraciones en lugar de N+M iteraciones. ¨ Ejecución de la subconsulta co-relacionada.
Para más información con ejemplos :
La subconsulta relacionada es una subconsulta que utiliza valores de la consulta externa. En este caso, la consulta interna debe ejecutarse para cada fila de la consulta externa.
Vea el ejemplo aquí http://en.wikipedia.org/wiki/Correlated_subquery
La subconsulta simple no utiliza valores de la consulta externa y se calcula sólo una vez:
SELECT id, first_name
FROM student_details
WHERE id IN (SELECT student_id
FROM student_subjects
WHERE subject= 'Science');
Ejemplo de subconsulta relacionada -
Consulta para encontrar todos los empleados cuyo salario es superior a la media de su departamento
SELECT employee_number, name
FROM employees emp
WHERE salary > (
SELECT AVG(salary)
FROM employees
WHERE department = emp.department);
Creo que la siguiente explicación le ayudará... diferenciación entre ellas: La "subconsulta relacionada" es una consulta interna referenciada por la consulta principal (consulta externa) de tal manera que la consulta interna se considera que se ejecuta repetidamente.
La subconsulta no relacionada es una subconsulta que es independiente de la consulta externa y puede ejecutarse por sí misma sin depender de la consulta externa principal.
La "subconsulta simple" no depende de la consulta externa,