Используя предложение WITH, напишите запрос для отображения названий отделов и совокупного оклада для отделов, совокупный оклад в которых больше среднего оклада по отделам.
Задача, демонстрируемая на рисунке, потребует следующих промежуточных вычислений:
- Расчет совокупного оклада для каждого отдела и сохранение результата с помощью предложения WITH.
- Расчет среднего оклада по отделам и сохранение результата с помощью предложения
WITH. - Сравнение совокупного оклада, рассчитанного на первом шаге, со средним окладом, рассчитанным на втором шаге. Если совокупный оклад для конкретного отдела больше среднего оклада по отделам, тогда название этого отдела и совокупный оклад для этого отдела выводятся на экран.
Решение этой задачи показано на следующей странице.
Программный код SQL, показанный на рисунке, представляет собой пример ситуации, в которой скорость выполнения и написания SQL можно повысить более простым путем с помощью предложения WITH. Запросом создаются имена запросов DEPT_COSTS и AVG_COST, а затем они вставляются в тело главного запроса. Внутри запроса предложение WITH раскладывается как встроенное представление или временная таблица.
Оптимизатором выбирается подходящее решение в зависимости от достоинств или недостатков временного хранения результатов предложения WITH.
Программным кодом SQL, показанным на рисунке, генерируются следующие выходные данные:
Примечания к использованию предложения WITH
- Используется только с инструкциями
SELECT. - Имя запроса отображается для всех блоков запроса элемента
WITH(включая блоки их подзапросов), определенных после него и самого блока главного запроса (включая блоки его подзапросов). - Когда имя запроса совпадает с именем существующей таблицы, синтаксический анализатор производит поиск изнутри наружу, а имя блока запроса имеет приоритет над именем таблицы.
- Предложение
WITHможет содержать более одного запроса. В этом случае каждый запрос отделяется запятой.
Далее: Примеры регулярных выражений и проверочных ограничений