Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка и сопровождение БД в среде MS SQL Se...doc
Скачиваний:
316
Добавлен:
14.11.2019
Размер:
1.71 Mб
Скачать

Раздел into позволяет создать новую таблицу для хранения результатов запроса, структура которой будет определяться списком выбора, т.Е. Динамически при выполнении запроса.

Раздел FROM является обязательным в команде SELECT и определяет таблицы и представления для выборки данных. Если таблица одновременно является и источником данных, и получателем результатов, то ей необходимо задать псевдоним с помощью конструкции AS, что обеспечит правильную работу сервера. Для таблиц можно указывать уровни блокировок: HOLDLOCK, NOLOCK и т.д. В разделе FROM можно задавать связанные таблицы для формирования сложных запросов, например:

исходная таблица тип связи исходная таблица

ON условие поиска

или

исходная таблица CROSS JOIN исходная таблица.

При использовании ключевых слов CROSS JOIN или запятой происходит связывание каждой строки левой таблицы с каждой строкой правой таблицы, так что количество строк при выполнении запроса определяется как произведение количества строк первой таблицы на количество строк второй таблицы.

При использовании ключевых слов INNER JOIN или пробела выбираются пары строк из связанных таблиц, для которых имеются строки, удовлетворяющие критерию связывания в обеих таблицах. Строки из левой таблицы, для которых не имеется пары в связанной таблице, в результат не включаются. Также не включаются строки правой таблицы, для которых нет соответствующей строки в левой таблице.

При использовании ключевых слов LEFT [OUTER] JOIN в результат будут включены все строки левой таблицы, независимо от того, есть для них соответствующая строка в правой таблице или нет, при этом для соответствующих столбцов правой таблицы, включенных в запрос, при отсутствии соответствия будут заноситься значения NULL.

При использовании ключевых слов RIGHT [OUTER] JOIN в результат будут включены все строки правой таблицы, независимо от того, есть для них соответствующие строки в левой таблице. В столбцах левой таблицы, для тех строк, для которых нет соответствия, запишутся значения NULL.

При использовании ключевых слов FULL [OUTER] JOIN в результат будут включены все строки как правой, так и левой таблицы.

Логическое условие связывания двух таблиц, которое записывается после ключевого слово ON, должно быть логическим выражением, включающим любые операторы сравнения: =, <, >, <=, >=,! =, <>. В ряде случаев в запросах используются опции оптимизации: LOOP, HASH, MERGE, REMOTE. Если эти опции не заданы, то оптимизацию запросов осуществляет сервер.

С помощью раздела WHERE можно сузить количество обрабатываемых строк данных, написав одно или несколько логических условий:

WHERE условие поиска

или

имя колонки * = имя колонки -- LEFT OUTER JOIN

или

имя колонки * = имя колонки -- RIGHT OUTER JOIN.

Логическое условие может быть произвольным, в том числе и не связанным с данными. Оно может включать логические операторы NOT, AND и OR. В ряде случаев, в особенности для сложных запросов предпочтительнее использовать условия связывания * = (аналог LEFT OUTER JOIN) или = * (аналог RIGHT OUTER JOIN), которые выполняются гораздо эффективнее.

Раздел GROUP BY позволяет выполнить группировку строк таблиц по определенным критериям. Для каждой группы можно выполнить специальные функции агрегирования, которые будут применены ко всем строкам группы:

  • AVG (имя столбца) – среднее значение в группе;

  • SUM (имя столбца) – сумма значений группы;

  • MIN (имя столбца) – минимальное значение в группе;

  • MAX (имя столбца) – максимальное значение в группе;

  • COUNT (имя столбца) – число строк в группе с непустым значением;

  • COUNT (*) – число строк в группе, включая и пустые (NULL).

Синтаксис раздела следующий:

GROUP BY условие группировки

или

BY ALL, [WITH CUBE или ROLLUP] - супергруппировка.

В качестве условия группировки задается имя одного или нескольких столбцов таблицы. Именно эти столбцы должны быть включены в запрос. Наличие других столбцов не допускается. Если в запросе было определено условие, сужающее диапазон группировки выбираемых строк, то включение слова ALL обеспечит вывод всех групп, но функции агрегирования для дополнительных групп выполняться не будут.

Ключевое слово WITH CUBE инициирует суперагрегирование, когда в результат включаются строки, являющиеся результатом агрегирования уже агрегированных данных. В итоге получается многоуровневое агрегирование с итоговыми данными по всем уровням. Опция WITH ROLLUP позволяет устранить лишние строки при суперагрегировании.

Раздел HAVING задает условия поиска при определении групп с помощью раздела GROUP BY:

HAVING условие поиска

Этот раздел аналогичен разделу WHERE.

Раздел UNION позволяет выполнить объединение данных из нескольких таблиц, имеющих одинаковый список столбцов, порядок их следования и свойства, при этом по умолчанию дублирующие строки не включаются, если не задано ключевое слово ALL:

SELECT список столбцов FROM имя первой таблицы

UNION [ALL]

SELECT список столбцов FROM имя второй таблицы

и т.д.

Раздел ORDER BY используется, когда необходимо отсортировать данные в результирующем наборе:

ORDER BY имя столбца в запросе [ASC или DESC],

имя столбца в запросе [ASC или DESC].

Здесь ключевые слова ASC и DESC обеспечивают сортировку соответственно по возрастанию или убыванию значений в соответствующем столбце.

Раздел COMPUTE позволяет применять к выбираемым столбцам функции агрегирования:

COMPUTE функция агрегирования (имя столбца запроса)

BY имена для группировки.

Порядок использования столбцов в функциях агрегирования должен соответствовать порядку следования столбцов, указанному в разделе ORDER BY. Не допускается также использование ключевого слова DISTINCT.