GROUP BY <спецификация группировки>.
Спецификация группировки записей используется при создании группировочных запросов и задается фразой вида
<спецификация группировки>::=
[ИД.] поле имя поля
[,[ИД.] полеK] ... имя K-го поля
Группирование записей инициирует перекомпоновку записей по группам, каждая из которых имеет одинаковое значение в полях, включенных в спецификации групировки.
33) SELECT Фам FROM тС
GROUP BY Фам
В результате этой команды происходит исключение записей-дубликатов.
34) SELECT Город
GROUP BY Город.
К группам данных можно применить агрегирующие SQL-функции. Для этого их нужно указать в списке полей вывода. Применение SQL-функций приводит к замене всех значений группы на единственное значение, определенной SQL-функцией (сумма, количество и т.п.). Группирование записей позволяет реализовать реляционную операцию подведения итогов.
35) SELECT Фам, Count(Код_с) AS Кол
GROUP BY Фам
В этой команде происходит группировка по полю Фам, которое включено в список полей вывода.
36) SELECT Город, COUNT(Код_с)
GROUP BY Город
Надо учитывать, что опция GROUP BY не предполагает упорядочение. Поэтому рекомендуется одновременно с ней применять и опцию ORDER BY.
37) SELECT Город, COUNT(Код_с)
GROUP BY Город
ORDER BY Город
Рассмотрим опцию отбора групп записей:
HAVING <спецификация выбора групп>.
В результат попадают только те группы, которые удовлетворяют заданной спецификации выбора групп. Ее синтаксис подобен синтаксису спецификации выбора записей:
<спецификация выбора групп>::=
[NOT] HAVING_усл [[AND|OR][NOT] HAVING_усл2]...
Синтаксис HAVING_усл почти не отличается от синтаксиса WHERE_усл. Только наряду со значениями в этих условиях могут использоваться SQL-функции.
HAVING_усл::=
знач { = | < | < | <= | | = }
{ знач | (подзапрос) | SQL_функция }
{знач_1 | SQL_функция_1} [NOT] BETWEEN
{знач_2 | SQL_функция_2} AND {знач_3 | SQL_функция_3}
{знач | SQL_функция} [NOT] IN { ( конст [,конст]... ) | (подзапрос) }
{знач | SQL_функция} IS [NOT] NULL
[табл.] поле [NOT] LIKE 'строка_символов' [ESCAPE 'символ']
EXISTS (подзапрос)
Рассмотрим пример с опцией HAVING.
38) SELECT *
GROUP BY Город
HAVING COUNT (*) < 5
Мы рассмотрели команды с одним ИД – тС.
В общем виде в качестве источника запроса могут использоваться несколько ИД. Причем, в качестве ИД могут использоваться не только базовые таблицы РБД, хранящиеся в физической памяти машины, но и результаты выполнения ранее созданных запросов, которые в основном представляются в виде виртуальных (временных, рабочих) таблиц. Некоторые СУБД дают возможность создавать представления БД или курсоры, которые фактически являются хранимыми в РБД запросами с именованными полями. С их помощью создаются виртуальные таблицы, позволяющие пользователям иметь свой взгляд на данные без увеличения их объема в БД.
В списке источников команды SELECT должны быть перечислены все ИД, из которых берутся поля для формирования запроса:
Список ИД ::={таблица | запрос | представление} [псевдоним]
[,{таблица2 | запрос2 | представление2} [псевдоним2]] ...
где псевдоним служит для временного (на момент выполнения запроса) переименования и (или) создания рабочей копии ИД.
При включении в запрос полей нескольких ИД небходимо указывать полные имена полей в виде <имя ИД>. <имя поля>, например, тС.Код_с.
При включении в запрос нескольких ИД можно нестрого утверждать, что опция FROM соответствует их произведению. Следовательно, можно сделать вывод, что команда SELECT языка SQL реализует значительную часть операций РА. При этом можно определить следующее соответствие опций команды SELECT и операций РА:
– SELECT ↔ проекция и расширение;
– FROM ↔ произведение;
– WHERE ↔ ограничение.
Иными словами, совместная инструкция SELECT-FROM-WHERE представляет собой проекцию выборки произведения.
В общем случае выборка может содержать объединение нескольких других ранее созданных выборок. Стандарт SQL дает следующую расширенную формулировку:
Оператор SELECT ::=
подзапрос [UNION объединить[ALL] подзапрос] ...В качестве подзапросов могут участвовать объекты, перечисленные в списке ИД. Команда допускает общую опцию сортировки ORDER BY.Дата добавления: 2015-12-16; просмотров: 1623;