|
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, для выбора удаляемых дубликатов можно воспользоваться скобками.
|