русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Вложенные запросы.


Дата добавления: 2013-12-23; просмотров: 1636; Нарушение авторских прав


Предложение HAVING.

Может задавать условие поиска для групп (как для отдельных строк SELECT)

 

HAVING поле GROUP BY

Здесь сравниваются атрибуты групп

 

Пример. Определить среднегодовой оклад в отделе, где насчитывается более двух сотрудников:

SELECT Должность, COUNT(*), AVG(Оклад)*12

FROM Сотрудники

GROUP BY Должность

HAVING COUNT(*)>2

 

В данном запросе могут присутствовать как WHERE так и HAVING. Сначала применяется WHERE. Из оставшихся строк формируется группа в соответствии с GROUP BY. К полученным группам применяется предложение HAVING.

 

Пример. Составить список отделов, в которых работают по крайней мере два инженера:

SELECT Отдел

FROM Сотрудники

WHERE Должность = 'Инженер'

GROUP BY Отдел

HAVING COUNT(*) > 2

 

Предложение HAVING может сравнивать различные атрибуты групп.

 

Пример. Составить список отделов, средняя премия в которых превышает 85% оклада:

SELECT Отдел, AVG(Оклад), AVG(Премия), AVG(Оклад) + 0,25

FROM Сотрудники

GROUP BY Отдел

HAVING AVG(Премия)> 0.25*AVG(Оклад)

 

Предложение HAVING может сравнивать атрибуты разных групп, для этого необходимо использовать подзапросы.

 

Пример. Получить список должностей, средний оклад которых больше среднего размера оклада заведующего:

SELECT Должность, AVG(Оклад)

FROM Сотрудники

GROUP BY Должность

HAVING AVG(Оклад) > (SELECT AVG(Оклад)

FROM Сотрудники

WHERE Должность = ‘Заведующий’)

 

 

Подзапрос – это дополнительный метод манипулирования с несколькими таблицами. Это оператор SELECT, вложенный:

в предложение WHERE, HAVING или SELECT другого оператора SELECT;

в оператор INSERT, UPDATE или DELETE

в другой подзапрос.

Именно возможность вложения операторов SQL друг в друга является причиной, по которой SQL первоначально был назван Structured Query Language. Термин подзапрос часто используется для ссылки на всю совокупность операторов, которая включает один или несколько подзапросов, а также на отдельное вложение. Каждый включающий оператор – следующий по старшинству уровень в подзапросе – представляет собой внешний уровень для внутреннего подзапроса.



 

Упрощенный синтаксис подзапроса.

 

Условия поиска, относящиеся к другому запросу, также могут встречаться в предложении WHERE внешнего запроса – до или после внутреннего запроса.

SELECT [DISTINCT]

<Список полей> или *

FROM <Список таблиц> Начало внешнего оператора SELECT

WHERE

{выражение { [NOT] IN | оператор сравнения [ANY | ALL] } | [NOT] EXISTS}

( SELECT [DISTINCT] список выбора подзапроса Подзапрос

FROM <Список таблиц> заключенный

WHERE условия ) в скобки.

 

[GROUP BY <Список полей для группирования>]

[HAVING <Условие группирования>]

[ORDER BY <Список полей для сортировки>]

 

Как работает подзапрос?

Подзапросы возвращают результаты внутреннего запроса во внешнее предложение и имеют две основные формы: некоррелированную и коррелированную. Первая реализуется (концептуально) “изнутри наружу”, т.е. внешний запрос выполняет то или иное действие, основываясь на результатах выполнения внутреннего запроса. Вторую форму подзапроса можно представить так: внешний оператор SQL предоставляет значения для внутреннего подзапроса, которые будут использоваться при его выполнении. Затем результаты выполнения подзапроса возвращаются на внешний запрос.

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

Как коррелированные, так и некоррелированные запросы бывают трех типов, в зависимости от элементов в предложении WHERE внешнего запроса.

Подзапросы, которые не возвращают ни одного или возвращают несколько элементов (начинаются с IN или с оператора сравнения, содержат ключевые слова ANY или ALL).

Подзапросы, которые возвращают единственное значение (начинаются с простого оператора сравнения).

Подзапросы, которые представляют собой тест на осуществление (начинаются с EXISTS).

Пример. Найти всех сотрудников, у которых должность как у Реброва, а именно заведующий (некоррелированный подзапрос):

SELECT Фамилия, Должность

FROM Сотрудники

WHERE Должность IN ( SELECT Должность

FROM Сотрудники

WHERE Фамилия = ‘Ребров’)

 



<== предыдущая лекция | следующая лекция ==>
Групповые функции. | Подзапросы, возвращающие набор значений.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.