La requête SQL suivante 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
Aussi, quelqu'un peut-il faire la différence entre les deux
La 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 est calculée 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 CoRelated -
Requête pour trouver tous les employés dont le salaire est supérieur à la moyenne pour leur département
SELECT employee_number, name
FROM employees emp
WHERE salary > (
SELECT AVG(salary)
FROM employees
WHERE department = emp.department);
L'exemple ci-dessus n'est pas une sous-requête liée à la corrélation. C’est une table dérivée/vue en ligne puisque c’est-à-dire une sous-requête dans la clause FROM.
Une sous-requête corrélée doit faire référence à sa table parent (requête principale). Voir, par exemple, Trouver le salaire Nth max par requête secondaire:
SELECT Salary
FROM Employee E1
WHERE N-1 = (SELECT COUNT(*)
FROM Employee E2
WHERE E1.salary <E2.Salary)
Co-Related Vs Nested-SubQueries.
Les différences techniques entre les sous-requêtes normales et les sous-requêtes associées sont les suivantes:
1. Boucle: Boucle de sous-requête co-liée sous la requête principale; alors niché pas; par conséquent, une sous-requête corrélée est exécutée à chaque itération de la requête principale. Attendu que dans le cas d'une requête imbriquée; la sous-requête s'exécute en premier, puis la requête externe est exécutée ensuite. Par conséquent, le maximum non. des exécutions sont NXM pour la sous-requête corrélée et N + M pour la sous-requête.
2. Dépendance (intérieure à extérieure vs extérieure à intérieure): Dans le cas d'une sous-requête liée, la requête interne dépend de la requête externe pour le traitement, tandis que dans la sous-requête normale, la requête externe dépend de la requête interne.
3.Performance: L'utilisation des performances des sous-requêtes associées aux co-reliées diminue car elle effectue des itérations NXM au lieu d'itérations N + M. ¨ Exécution d'une sous-requête associée.
Pour plus d'informations avec des exemples:
Une sous-requête est une instruction select intégrée à la clause d'une autre instruction select.
EX:
select ename, sal
from emp where sal > (select sal
from emp where ename ='FORD');
Une sous-requête corrélée est une sous-requête qui est évaluée une fois pour chaque ligne traitée par la requête externe ou la requête principale. Exécutez la requête interne en fonction de la valeur extraite par la requête externe. Toutes les valeurs renvoyées par la requête principale sont mises en correspondance. La requête INNER est pilotée par la requête OUTER.
Ex:
select empno,sal,deptid
from emp e
where sal=(select avg(sal)
from emp where deptid=e.deptid);
DIFFÉRENCE
La requête interne s'exécute en premier et trouve une valeur, la requête externe s'exécute une fois à l'aide de la valeur de la requête interne (sous-requête)
Récupération par la requête externe, exécution de la requête interne à l'aide de la valeur de la requête externe, utilisation des valeurs résultant de la requête interne pour qualifier ou disqualifier la requête externe (corrélée)
Pour plus d'informations:http://www.oraclegeneration.com/2014/01/sql-interview-questions.html
en ce qui concerne les sous-requêtes et les requêtes associées, les requêtes internes et externes, la seule différence est que, dans la sous-requête, la requête interne ne dépend pas de la requête externe, alors que dans la requête interne, la corrélation est externe.
Je pense que l'explication ci-dessous vous aidera ... différenciation entre ceux-ci: Correlated subquery
est une requête interne référencée par la requête principale (requête externe) telle que la requête interne est considérée comme ayant été exécutée à plusieurs reprises.
non-correlated subquery
est une sous-requête indépendante de la requête externe et peut être exécutée seule sans recourir à la requête externe principale.
plain subquery
ne dépend pas de la requête externe,
Dans une requête SQL, si la requête interne s'exécute pour chaque ligne de la requête externe. Si la requête interne est exécutée une fois et que le résultat est consommé par la requête externe, il est alors appelé requête non liée.