КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Разрешение коллизии имен. Квалифицированные имена и алиасы.
Синтаксис SQL не запрещает называть поля разных таблиц одним и тем же именем, что приводит к конфликту имен при формировании запроса из таких таблиц.
Квалифицированное (полное) имя à Имя таблицы. Имя поля
Замечание. Некоторые СУБД способны одновременно манипулировать с таблицами из разных БД – снова, возможно, одноименными, что приводит к необходимости дальнейшего уточнения имен, например
Имя БД! Имя таблицы. Имя поля (синтаксис FoxPro)
Применение полных имен не спасает от коллизии в случае, когда команда SELECT ссылается на одну базовую таблицу несколько раз (например, при выборке из декартовой степени (двух копий) одной таблицы или – см. далее, в случае вложенных запросов, т.е. использования одной выборки в предикатах другой выборки). В таких случаях необходимо использовать псевдонимы/алиасы таблиц; последние задают временные имена (копий) таблицы, действительные только на момент выполнения данной выборки;
Группировка и групповые вычисления. Опции Group By и Having
Синтаксис GROUP BY List
где List – список (перечисление) полей группировки. При этом поля из списка могут быть заданы явно или числовой ссылкой на номер поля в списке выбора (в некоторых версиях также – выражением символьного типа) .
Cписок выборки при этом может состоять лишь из обращений к функциям, выдающим одно значение для каждой группы (групповым функциям) - по определению, таковыми являются значения полей группировки, а также следующие агрегатные (т.е. групповые) функции:
- COUNT(Выражение) - количество значений заданного выражения в группе, не равных NULL; - COUNT(*) - число строк в группе; - MIN(Выражение) - минимальное значение данного выражения по группе; - MAX(Выражение) - максимальное значение данного выражения по группе; - SUM(Числовое_выражение) - сумма значений заданного выражения по группе; - AVG(Числовое_выражение), - среднее значение заданного выражения по группе;
Семантика – 1) производиться разбиение базовой таблицы (декартово произведение базовых таблиц) на группы – классы эквивалентности, для которых поля из заданного списка принимают одинаковые значения. R1,R2 принадлежат одной группе g » R1 »list R2 » R1(List)=R2(List)
3) Для каждой группы вычисляются значения заданных списком выборки функций над группами
Select F1(List), …, Fn(List) from T group by List = { <F1(g), …, Fn(g)>: g Î T/»list }
Примечание. Использование агрегатных функций возможно и без явного применения опции GROUP BY - в этом случае группой считается вся базовая таблица (декартово произведение базовых таблиц, если их несколько)
Опция HAVING Условие_на_группу
по семантике схожа (и часто путается ) с опцией WHERE, но, в отличие от последней, фильтрует не одиночные записи, а группы. Используется только совместно с GROUP BY. Очевидно, задаваемое условие на группу должно ссылаться только на групповые функции. Как правило, это условие является проверкой значений некоторых агрегатных функций - для проверки значений полей списка группировки эффективнее использовать опцию WHERE.
|