MS SQL Server - Подзапросы

MS SQL Server

MS SQL Server - Подзапросы (subquery)

Подзапросы (subquery) позволяют включать команды SELECT в другие запросы. Если таблица принадлежит не внешнему запросу, а вложенному подзапросу, то столбцы этой таблицы могут использоваться только в подзапросе. Подзапросы не могут содержать секций ORDER BY, COMPUTE или FOR BROWSE. Они могут присутствовать в секциях FROM в качестве производных таблиц, а также в секциях WHERE и HAVING.

Если подзапрос находится в секции WHERE или HAVING, он может использоваться в сочетании с ключевыми словами EXIST, ANY, SOME, ALL или IN.

ВАЖНО!

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

SELECT title_id, ( SELECT SUM(royaltyper)
FROM titles_authors ta
WHERE ta.title_id = t.title_id)
FROM titles t

В этом примере коррелированный подзапрос является частью списка выборки.

UNION

Союз (union) позволяет связать данные двух и более итоговых наборов в один. В отличие от объединений, которые включают в итоговые наборы дополнительные столбцы, союзы связывают воедино данные, полученные от нескольких команд SELECT. Команда UNION имеет следующий синтаксис:

Команда_SELECT
UNION [ALL]
Команда_SELECT
[ ... ]

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

В каждой команде SELECT могут присутствовать секции GROUP BY или HAVING. Они относятся только к конкретной команде SELECT — вы не сможете применить их к союзу в целом.

Если вы используете секции ORDER BY или COMPUTE, они могут задаваться только в последней команде SELECT союза. Содержимое ORDER BY и COMPUTE относится ко всей конструкции UNION.

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

ВАЖНО!

Если в одной команде встречаются и UNION, и UNION ALL, для выбора удаляемых дубликатов можно воспользоваться скобками.


 

Добавить комментарий


Защитный код
Обновить