Является ли следующий фрагмент 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
Также, может ли кто-нибудь объяснить разницу между этими двумя типами запросов?
Приведенный выше пример не является связанным подзапросом. Это производная таблица / инлайн-представление, т.к. т.е. подзапрос внутри пункта FROM.
Сопряженный подзапрос должен ссылаться на свою родительскую (основной запрос) таблицу. Например, найдите N-ую максимальную зарплату с помощью связанного подзапроса:
SELECT Salary
FROM Employee E1
WHERE N-1 = (SELECT COUNT(*)
FROM Employee E2
WHERE E1.salary <E2.Salary)
*Связанные и вложенные подзапросы.
Технические различия между обычным подзапросом и связанным подзапросом следующие:
1. Циклирование:. Связанный подзапрос зацикливается на основном запросе, а вложенный - нет; поэтому связанный подзапрос выполняется на каждой итерации основного запроса. Тогда как в случае вложенного запроса сначала выполняется подзапрос, а затем внешний запрос. Следовательно, максимальное количество выполнений составляет NXM для коррелированного подзапроса и N+M для подзапроса.
2. Зависимость (Внутренний к внешнему и внешний к внутреннему):. В случае связанного подзапроса внутренний запрос зависит от внешнего запроса для обработки, в то время как в обычном подзапросе внешний запрос зависит от внутреннего.
3.Производительность: При использовании связанного подзапроса производительность снижается, так как выполняется NXM итераций вместо N+M итераций. ¨ Выполнение связанного подзапроса.
Для получения дополнительной информации с примерами :
Коррелированный подзапрос - это подзапрос, который использует значения из внешнего запроса. В этом случае внутренний запрос должен быть выполнен для каждой строки внешнего запроса.
Смотрите пример здесь 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');
Пример подзапроса -
Запрос для поиска всех сотрудников, чья зарплата выше средней для их отдела
SELECT employee_number, name
FROM employees emp
WHERE salary > (
SELECT AVG(salary)
FROM employees
WHERE department = emp.department);
Коррелированные подзапросы: вычисляется для каждой строки обрабатываются основного запроса. Выполнить внутренний запрос, основанный на ценности, полученные от внешнего запроса. Продолжается, пока все значения, возвращаемые основного запроса совпадают. Внутренний запрос управляется внешним запросом
Экс:
В программе Select empno,имени,Сэл,deptid от ЭМП Е, где Сэл=(выбрать AVG(АЛГ) от Эми, где deptid=е.deptid)`
Коррелированный подзапрос специально вычисляет СР(Сэл)
для каждого отдела.
Подзапрос: сначала выполняется,после выполнения возвращает значения, которые будут использоваться в основной запрос. Внешнего запроса определяется внутренним запросом
Подзапрос-это оператор SELECT, который встроен в положение другого оператора SELECT.
Экс:
select ename, sal
from emp where sal > (select sal
from emp where ename ='FORD');
Коррелированный подзапрос-это подзапрос, который вычисляется один раз для каждой строки, обрабатываемой внешнего запроса или запроса. Выполнить внутренний запрос, основанный на ценности, полученные от внешнего запроса все значения, возвращаемые основного запроса совпадают. Внутренний запрос управляется внешним запросом.
Экс:
select empno,sal,deptid
from emp e
where sal=(select avg(sal)
from emp where deptid=e.deptid);
Разница
Внутренний запрос выполняется первым и находит значение, то внешний запрос выполняется один раз, используя значение из внутренний запрос (подзапрос)
Извлечение внешнего запроса, выполнить внутренний запрос, используя значения из внешнего запроса, использовать значения, в результате чего из внутреннего запроса, чтобы квалифицировать или дисквалифицировать внешний запрос (коррелируют)
Дополнительные сведения : http://www.oraclegeneration.com/2014/01/sql-interview-questions.html
когда дело доходит до подзапрос и сопутствующие запросе есть вложенный запрос и внешнего запроса, разница только в подзапросе внутренний запрос не'т зависит от внешнего запроса, а в CO-обзоры вложенный запрос зависит от внешнего.
Думаю, нижеприведенное объяснение поможет вам.
различие между ними:
Коррелированный подзапрос
- это внутренний запрос, на который ссылается основной запрос (внешний запрос) так, что внутренний запрос считается многократно вычисленным.
некоррелированный подзапрос
- это подзапрос, который является независимым от внешнего запроса и может выполняться самостоятельно, не опираясь на основной внешний запрос.
Простой подзапрос" не зависит от внешнего запроса,
В SQL-запрос, если внутренний запрос выполняется для каждой строки внешнего запроса. Если внутренний запрос выполняется за один раз, а результат потребляется внешнего запроса, то это называется не связанное запроса.