Is het volgende stukje SQL Query een normale query of een 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 iemand ook het verschil tussen beide aangeven
Bovenstaand voorbeeld is geen Co-gerelateerde Sub-Query. Het is een Afgeleide Tabel / Inline-View omdat het een Sub-query is binnen FROM-clausule.
Een gecorreleerde Sub-query moet verwijzen naar zijn bovenliggende (hoofd Query) tabel in het. Bijvoorbeeld Zie vind de Nth max salaris door Samenhangende Sub-query:
SELECT Salary
FROM Employee E1
WHERE N-1 = (SELECT COUNT(*)
FROM Employee E2
WHERE E1.salary <E2.Salary)
Co-Gerelateerde Vs Geneste-SubQueries.
Technisch verschil tussen Normale Sub-query en Co-gerelateerde sub-query zijn:
1. Looping: Co-gerelateerde sub-query lus onder main-query; terwijl geneste niet; daarom co gerelateerd sub-query wordt uitgevoerd op elke iteratie van de belangrijkste query. Terwijl in het geval van geneste query; subquery wordt eerst uitgevoerd dan buitenste query wordt vervolgens uitgevoerd. Vandaar, het maximum aantal uitvoert zijn NXM voor gecorreleerde subquery en N + M voor subquery.
2. Afhankelijkheid (binnen naar buiten vs buiten naar binnen): In het geval van een gecorreleerde subquery, is de binnenste query afhankelijk van de buitenste query voor verwerking, terwijl in een normale subquery, de buitenste query afhankelijk is van de binnenste query.
3.Performance: Met behulp van Co-gerelateerde sub-query prestaties afneemt, omdat, het voert NXM iteraties in plaats van N + M iteraties. ¨ Co-gerelateerde Sub-query Execution.
Voor meer informatie met voorbeelden :
Een gecorreleerde Subquery is een subquery die gebruik maakt van waarden uit de buitenste query. In dit geval moet de binnenste query voor elke rij van de buitenste query worden uitgevoerd.
Zie voorbeeld hier http://en.wikipedia.org/wiki/Correlated_subquery
Eenvoudige subquery gebruikt geen waarden uit de buitenste query en wordt slechts eenmaal berekend:
SELECT id, first_name
FROM student_details
WHERE id IN (SELECT student_id
FROM student_subjects
WHERE subject= 'Science');
CoRelated Subquery Voorbeeld -
Query Om alle werknemers te vinden waarvan het salaris boven het gemiddelde van hun afdeling ligt
SELECT employee_number, name
FROM employees emp
WHERE salary > (
SELECT AVG(salary)
FROM employees
WHERE department = emp.department);
Ik denk dat onderstaande uitleg u zal helpen...
differentiatie tussen deze:
Correlated subquery
is een innerlijke query waarnaar wordt verwezen door de belangrijkste query (buitenste query) zodanig dat innerlijke query beschouwd als wordt herhaaldelijk geëxcuteerd.
niet-gerelateerde sub query
is een sub query die een onafhankelijk is van de buitenste query en het kan uitgevoerd op het's eigen zonder te vertrouwen op de belangrijkste buitenste query.
Eenvoudige sub query` is niet afhankelijk van de buitenste query,