La partie suivante de la requête SQL est-elle une requête normale ou une sous-requête corrélée ?
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
En outre, quelqu'un peut-il indiquer la différence entre les deux ?
L'exemple ci-dessus n'est pas une sous-requête co-liée. Il s'agit d'une table dérivée / Inline-View, c'est-à-dire d'une sous-requête dans la clause FROM.
Une sous-requête liée doit faire référence à sa table parente (requête principale). Par exemple, voir trouver le Nième salaire maximum par une Sous-requête Co-reliée :
SELECT Salary
FROM Employee E1
WHERE N-1 = (SELECT COUNT(*)
FROM Employee E2
WHERE E1.salary <E2.Salary)
Sous-requêtes co-liées et sous-requêtes imbriquées.
La différence technique entre une sous-requête normale et une sous-requête co-liée est la suivante :
1. Bouclage: Les sous-requêtes co-liées bouclent sous la requête principale, alors que les sous-requêtes imbriquées ne bouclent pas ; par conséquent, les sous-requêtes co-liées s'exécutent à chaque itération de la requête principale. Alors que dans le cas d'une requête imbriquée, la sous-requête s'exécute d'abord puis la requête externe s'exécute ensuite. Par conséquent, le nombre maximum d'exécutions est de NXM pour la sous-requête corrélée et de N+M pour la sous-requête.
2. Dépendance (Inner to Outer vs Outer to Inner) : Dans le cas d'une sous-requête corrélée, la requête interne dépend de la requête externe pour son traitement, alors que dans le cas d'une sous-requête normale, la requête externe dépend de la requête interne.
3.performance: L'utilisation de la sous-requête co-reliée réduit les performances, car elle effectue NXM itérations au lieu de N+M itérations. ¨ ; Exécution de la sous-requête co-reliée.
Pour plus d'informations avec des exemples :
Une sous-requête corrélée est une sous-requête qui utilise les valeurs de la requête externe. Dans ce cas, la requête interne doit être exécutée pour chaque ligne de la requête externe.
Voir l'exemple ici http://en.wikipedia.org/wiki/Correlated_subquery
La sous-requête simple n'utilise pas les valeurs de la requête externe et n'est calculée qu'une seule fois :
SELECT id, first_name
FROM student_details
WHERE id IN (SELECT student_id
FROM student_subjects
WHERE subject= 'Science');
Exemple de sous-requête connexe -
Requête pour trouver tous les employés dont le salaire est supérieur à la moyenne de leur département
SELECT employee_number, name
FROM employees emp
WHERE salary > (
SELECT AVG(salary)
FROM employees
WHERE department = emp.department);
Je pense que l'explication ci-dessous vous aidera... Différenciation entre les deux : Une "sous-requête corrélée" est une requête interne référencée par une requête principale (requête externe) de telle sorte que la requête interne est considérée comme étant excutée de manière répétée.
Une "sous-requête non corrélée" est une sous-requête indépendante de la requête externe et qui peut être exécutée seule sans dépendre de la requête principale externe.
Une "simple sous-requête" ne dépend pas de la requête externe,