Разница между подзапросом и коррелированным подзапросом
является ли следующий фрагмент SQL-запроса обычным запросом или коррелированным подзапросом ??
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
кроме того, может ли кто-то указать разницу между обоими
7 ответов
коррелированный подзапрос-это подзапрос, который использует значения из внешнего запроса. В этом случае внутренний запрос должен выполняться для каждой строки внешнего запроса.
см. пример здесь http://en.wikipedia.org/wiki/Correlated_subquery
простой подзапрос не использует значения из внешнего запроса и вычисляется только один раз:
SELECT id, first_name
FROM student_details
WHERE id IN (SELECT student_id
FROM student_subjects
WHERE subject= 'Science');
Пример Подзапроса CoRelated -
запрос чтобы найти всех сотрудников, чья зарплата у них выше средней по отделу
SELECT employee_number, name
FROM employees emp
WHERE salary > (
SELECT AVG(salary)
FROM employees
WHERE department = emp.department);
приведенный выше пример не является со-связанным подзапросом. Это производная таблица / Inline-View с i.e, подзапрос внутри предложения FROM.
Corelated подзапрос должен ссылаться на свою родительскую (основной запрос) таблицу в нем. Например, см. поиск N-й максимальной зарплаты По со-связанному Подзапросу:
SELECT Salary
FROM Employee E1
WHERE N-1 = (SELECT COUNT(*)
FROM Employee E2
WHERE E1.salary <E2.Salary)
Co-Related Vs Вложенные Подзапросы.
техническая разница между обычным подзапросом и связанным с ним подзапросом:
1. Петля: Co-связанный цикл подзапроса в main-query; тогда как вложенный нет; поэтому co-связанный подзапрос выполняется на каждой итерации основного запроса. В то время как в случае вложенного запроса; подзапрос выполняется сначала, затем внешний запрос выполняется далее. Следовательно, максимального нет. из исполнений nxm для коррелированного подзапроса и N+M для подзапроса.
2. Зависимость (внутренняя к внешней vs внешняя к внутренней): В случае совместного подзапроса внутренний запрос зависит от внешнего запроса для обработки, тогда как в обычном подзапросе внешний запрос зависит от внутреннего запроса.
3.Производительность: Использование совместного подзапроса снижает производительность, так как он выполняет итерации NXM вместо N+M итераций. Совместное выполнение подзапросов.
для получения дополнительной информации с примерами:
подзапрос-это оператор select, внедренный в предложение другого оператора select.
EX:
select ename, sal
from emp where sal > (select sal
from emp where ename ='FORD');
коррелированный подзапрос-это подзапрос, который вычисляется один раз для каждой строки, обрабатываемой внешнего запроса или запроса. Выполните внутренний запрос на основе значения, полученного внешним запросом, все значения, возвращенные основным запросом, совпадают. Внутренний запрос управляется внешним Запрос.
Ex:
select empno,sal,deptid
from emp e
where sal=(select avg(sal)
from emp where deptid=e.deptid);
разница
внутренний запрос выполняется первым и находит значение внешний запрос выполняется один раз, используя значение из внутренний запрос (подзапрос)
Fetch по внешнему запросу, выполнить внутренний запрос, используя значение внешнего запроса, использовать значения, полученные из внутреннего запроса, чтобы квалифицировать или дисквалифицировать внешний запрос (коррелированный)
для получения дополнительной информации : http://www.oraclegeneration.com/2014/01/sql-interview-questions.html
коррелированные подзапросы: вычисляется для каждой строки, обработанной основным запросом. Выполните внутренний запрос на основе значения, полученного внешним запросом. Продолжается до тех пор, пока не будут сопоставлены все значения, возвращаемые основным запросом. Внутренний запрос управляется внешним запросом
Ex:
SELECT empno,fname,sal,deptid FROM emp e WHERE sal=(SELECT AVG(sal) FROM emp WHERE deptid=e.deptid)
коррелированный подзапрос специально вычисляет AVG(sal)
для каждого отдела.
подзапрос: Сначала выполняется, выполняется один раз, возвращает значения используется основным запросом. Внешний запрос управляется внутренним запросом
когда дело доходит до подзапроса и совместного запроса, оба имеют внутренний запрос и внешний запрос, единственное различие заключается в подзапросе, внутренний запрос не зависит от внешнего запроса, тогда как в совместном внутреннем запросе зависит от внешнего.
Я думаю, что ниже объяснение поможет вам..
дифференциация между ними:
Correlated subquery
- Это внутренний запрос, на который ссылается основной запрос (внешний запрос), так что внутренний запрос считается многократно отмененным.
non-correlated subquery
- это суб-запрос, независимый от внешнего запроса, и он может выполняться самостоятельно, не полагаясь на основной внешний запрос.
plain subquery
не зависит от внешнего запроса,
в SQL-запрос, если внутренний запрос выполняется для каждой строки внешнего запроса. Если внутренний запрос выполняется один раз и результат потребляется внешним запросом, то он вызывается как не связанный запрос.