-
Notifications
You must be signed in to change notification settings - Fork 2
13. Табличные выражения Transact SQL
Табличное выражение предоставляет некую таблицу. Табличное выражение содержит предложение FROM, за которым необязательно следуют предложения WHERE, GROUP BY и HAVING.
GROUP BY
используется для группировки вместе тех строк таблицы, которые имеют те же самые значения во всех перечисленных колонках. Порядок, в котором перечисляются колоки значения не имеет. Эффект группировки состоит в комбинировании каждого списка строк, имеющих общие значения колонок в одну сгруппированную строку, которая представляет все строки в данной группе. Это осуществляется исключением избыточности в выводе и/или подсчётом агрегатов, которые применяются к группам.
Группировка без агрегирующих выражений эффективно подсчитывает список отдельных значений в колонке. Это же может быть достигнуто, используя предложение DISTINCT
.
Если таблица была сгруппирована с помощью предложения GROUP BY
, но интерес представляют только определённые группы, можно использовать предложение HAVING
, которое очень похоже на предложение WHERE
, но только для удаления групп из результата.
FROM создаёт таблицу из одной или более других таблиц, которые задаются списком разделённых запятыми ссылок на таблицы:
FROM ссылка_на_таблицу [, ссылка_на_таблицу [, ...]]
Соединённая таблица — это таблица, производная от двух других (реальных или в свою очередь производных) таблиц, полученая в соответствии с правилами определённого типа соединения. Доступные типы соединения: inner
(внутреннее), outer
(внешнее) и cross
(перекрёсное).
Слова INNER
и OUTER
являются необязательными во всех формах. INNER
применяется по умолчанию; LEFT
, RIGHT
и FULL
неявно указывают на внешнее (outer) соединение.
Условие соединения задаётся в предложениях ON
или USING
, или неявно, с помощью слова NATURAL.
Предложение ON является наиболее обычным способом задать условие соединения: в нём указывается логическое выражение того же типа, что используется в предложении WHERE. Пара строк из T1 и T2 считается совпавшей, если для неё, выражение, заданное в ON принимает значение истина.
USING имеет более краткую форму: в ней указывается разделённый запятыми список имён колонок, которые должны быть общими в соединяемых таблицах и условия соединения, задавая равенство каждой из этих пар колонок.
NATURAL — это краткая форма USING: она формирует список USING, содержащий все имена колонок, которые есть в обеих входных таблицах. Как и с USING, эти колонки появляются в выходной таблице только один раз. Если общих колонок нет, NATURAL ведёт себя как CROSS JOIN.
В сложных ссылках на таблицы, для дальнейших ссылок в остальной части запроса, могут быть использованы временные имена. Они называются псевдонимами таблиц.
FROM ссылка_на_таблицу AS псевдоним
Ключевое слово AS является необязательным. Псевдоним может быть любым идентификатором. Псевдоним даёт новое имя ссылающееся на ту же таблицу в текущем запросе — поэтому где-либо ещё в текущем запросе не разрешается ссылаться на таблицу по первоначальному имени. Псевдноним также требуется, если ссылка на таблицу является подзапросом.