Er følgende del av SQL Query en normal spørring eller en 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 noen også oppgi forskjellen mellom de to?
Eksemplet over er ikke Co-relatert underspørring. Det er Derived Table/Inline-View siden det er en underspørring i FROM-setningen.
En Corelated Sub-spørring bør referere til sin overordnede (hovedspørring) tabell i den. Se for eksempel Finn den n-te maksimallønnen etter Co-relatert underspørring:
SELECT Salary
FROM Employee E1
WHERE N-1 = (SELECT COUNT(*)
FROM Employee E2
WHERE E1.salary <E2.Salary)
Co-Related Vs Nested-SubQueries..
Den tekniske forskjellen mellom Normal underspørring og Co-relatert underspørring er:
1. Sløyfe: Co-relatert under-spørring løkke under hoved-spørring; mens nestet ikke; derfor co-relatert under-spørring utføres på hver iterasjon av hoved-spørring. Mens i tilfelle av Nested-query; underspørring utføres først, deretter utføres den ytre spørringen. Maksimalt antall kjøringer er derfor NXM for korrelerte underforespørsler og N+M for underforespørsler.
2. Avhengighet (indre til ytre vs. ytre til indre): I tilfelle av co-relatert underspørring avhenger indre spørring av ytre spørring for behandling, mens i normal underspørring er ytre spørring avhengig av indre spørring.
For mer informasjon med eksempler:
Korrelert underspørring er en underspørring som bruker verdier fra den ytre spørringen. I dette tilfellet må den indre spørringen utføres for hver rad i den ytre spørringen.
Se eksempel her http://en.wikipedia.org/wiki/Correlated_subquery
Enkel underforespørsel bruker ikke verdier fra den ytre spørringen og beregnes bare én gang:
SELECT id, first_name
FROM student_details
WHERE id IN (SELECT student_id
FROM student_subjects
WHERE subject= 'Science');
Eksempel på relatert delspørring -
Query For å finne alle ansatte med lønn over gjennomsnittet for deres avdeling
SELECT employee_number, name
FROM employees emp
WHERE salary > (
SELECT AVG(salary)
FROM employees
WHERE department = emp.department);
Jeg tror forklaringen nedenfor vil hjelpe deg...
. differensiering mellom disse:
Korrelert underspørring
er en indre spørring referert til av hovedspørring (ytre spørring) slik at den indre spørringen betraktes som gjentatte ganger.
Ikke-korrelert underspørring er en underspørring som er uavhengig av den ytre spørringen, og den kan utføres på egen hånd uten å stole på den ytre hovedspørringen.
plain subquery
er ikke avhengig av den ytre spørringen,