Использование коррелированных подзапросов

Найдите всех сотрудников с окладом больше среднего в своем отделе.

Использование коррелированных подзапросов

В примере на рисунке определяются сотрудники с окладом больше среднего в своем отделе. В данном случае коррелированным подзапросом вычисляется средний оклад для каждого отдела.

Так как и внешним, и внутренним запросом используется таблица EMPLOYEES в предложении FROM, таблице EMPLOYEES во внешней инструкции SELECT присваивается для ясности псевдоним. Псевдоним делает всю инструкцию SELECT более понятной.

Без псевдонима запрос не работал бы надлежащим образом, поскольку внутренняя инструкция не смогла бы отличить столбец внутренней таблицы от столбца внешней таблицы.

Примеры коррелированных подзапросов

Выведите сведения о сотрудниках, хотя бы дважды сменивших должность.

Примеры коррелированных подзапросов

В примере на рисунке отображаются сведения о сотрудниках, которые хотя бы дважды сменили должность. Коррелированный подзапрос выполняется сервером Oracle следующим образом:

  1. Выбирается строка из таблицы, заданной во внешнем запросе. Это будет текущая строка- кандидат.

  2. Из этой строки-кандидата сохраняется значение столбца, упоминаемого в подзапросе. (В примере на рисунке столбцом, упоминаемым в подзапросе, является столбец E.EMPLOYEE_ID.)

  3. Выполняется подзапрос с его условием, ссылающимся на значение из строки-кандидата внешнего запроса. (В примере на рисунке групповая функция COUNT(*) вычисляется на основе значения столбца E.EMPLOYEE_ID, полученного на шаге 2.)

  4. Оценивается предложение WHERE внешнего запроса на основе результатов подзапроса, выполненного на шаге 3. Это позволяет определить, будет ли строка-кандидат выбираться в качестве выходных данных. (В примере количество смен сотрудником должностей, оцениваемое подзапросом, сравнивается со значением 2 в операторе WHERE внешнего запроса. Если условие выполняется, запись сотрудника выводится на экран.)

  5. Процедура повторяется для следующей строки-кандидата таблицы и так далее до тех пор, пока все строки в таблице не будут обработаны.

Корреляция устанавливается путем использования в подзапросе элемента из внешнего запроса.

В этом примере сравнивается значение EMPLOYEE_ID из таблицы в подзапросе со значением EMPLOYEE_ID из таблицы во внешнем запросе.

Далее: Выполнение обычного поиска с использованием условия REGEXP_LIKE

Статьи по теме
Комментарии
Написать

(обязательно)

(обязательно)

Это не спам (обязательно)