Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные лаботы ОИС.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
3.38 Mб
Скачать

2.1.4 Группировка записей group by

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

Синтаксис данной части следующий:

[GROUP BY ВыражениеГруппировки, [...n]]

Например, чтобы определить количество групп, у которых читает преподаватель, необходимо сгруппировать записи с одинаковым именем преподавателя «Преподаватель» и подсчитать количество записей в каждой группе:

SELECT Преподаватель, count(Группа) AS [Количество групп]

FROM TimeTable

GROUP BY Преподаватель

При использовании GROUP BY для каждой определенной группы значений выводится только одна запись в итоговом наборе данных.

При группировке записей допускается также использование раздела WHERE, в этом случае группируются записи, удовлетворяющие этому условию.

2.1.5 Условие на группируемые поля having

Раздел WHERE позволяет определить, какие записи должны подвергнуться группировке, а раздел HAVING – какие группы должны быть выведены в итоговый набор данных. Ключевое слово HAVING можно использовать только в разделе GROUP BY.

Так с помощью этого раздела можно в итоговый набор данных поместить только тех преподавателей, у которых более 2 групп прослушивают курс лекций:

SELECT Преподаватель, count(Группа) AS [Количество групп]

FROM TimeTable

GROUP BY Преподаватель

HAVING sum(Группа) >= 2

Обработка элементов оператора SELECT выполняется в следующей последовательности:

  • FROM – определяются имена используемых таблиц;

  • WHERE – выполняется фильтрация строк объекта в соответствии с заданными условиями;

  • GROUP BY – образуются группы строк, имеющих одно и то же значение в указанном столбце;

  • HAVING – фильтруются группы строк объекта в соответствии с указанным условием;

  • SELECT – устанавливается, какие столбцы должны присутствовать в выходных данных;

  • ORDER BY – определяется упорядоченность результатов выполнения операторов.

Порядок предложений и фраз в операторе SELECT не может быть изменен. Только два предложения SELECT и FROM являются обязательными, все остальные могут быть опущены. SELECT – закрытая операция: результат запроса к таблице представляет собой другую таблицу.

Для увеличения производительности, то есть для быстрого выполнения запросов, следует помнить некоторые правила составления строк запросов:

  • Избегать NOT - команды отрицания выполняются в несколько этапов, что увеличивает нагрузку на сервер.

  • Избегать LIKE - этот оператор сравнения применяет более мягкие шаблоны сравнения, чем оператор =, что увеличивает необходимое число этапов фильтрации.

  • Применять точные шаблоны поиска - применение подстановочных символов увеличивает время выполнения запроса, так как для проверки всех вариантов подстановки требуется дополнительные ресурсы сервера.

  • Избегать ORDER - команда сортировки требует упорядочивания строк таблицы вывода, что задерживает получение результата.

2.1.6 Использование функций преобразования различных типов данных

В реализациях языка SQL может быть выполнено неявное преобразование типов. Так, например, в SQL Server и Sybase ASE.Transact-SQL при сравнении или комбинировании значений типов smallint и int, данные типа smallint неявно преобразуются к типу int. Подробно о явном и неявном преобразовании типов в SQL Server можно прочитать в BOL.

В случае, если система не может выполнить неявное преобразование одного типа данных к другому, или необходимо выполнить подобное преобразование для каких-то целей следует использовать специальные функции. Чаще всего в сообщении об ошибке преобразования (если была попытка выполнить неявное преобразование и она не удалась), указывается функция CONVERT. Однако эта функция не стандартизована, поэтому в целях переносимости рекомендуется использовать стандартное выражение CAST.

Синтаксис выражения CAST очень простой

CAST(<выражение> AS <тип данных>)

Следует иметь в виду, во-первых, что не любые преобразования типов возможны (стандарт содержит таблицу допустимых преобразований типов данных). Во-вторых, результат функции CAST для значения выражения, равного NULL, тоже будет NULL. В-третьих, функцию CAST, при использовании ее для преобразования результатов агрегатной функции, нужно применить и к аргументу агрегатной функции.

Аналогичные преобразования типа можно выполнить с помощью функции SQL Server CONVERT:

CONVERT (<тип_данных[(<длина>)]>, <выражение> [, <стиль>])

Основное отличие функции CONVERT от функции CAST состоит в том, что первая позволяет форматировать данные (например, темпоральные данные типа datetime) при преобразовании их к символьному типу и указывать формат при обратном преобразовании. Стиль соответствуют различным типам форматов.

SELECT CONVERT(char(25), CONVERT(datetime,'20030722'));

Здесь мы преобразуем строковое представление даты к типу datetime, после чего выполняем обратное преобразование, чтобы продемонстрировать результат форматирования. Поскольку значение аргумента стиль не задано используется значение по умолчанию (0 или 100). В результате получим:

Jul 22 2003 12:00AM

Ниже приведены некоторые другие значения аргумента стиль и результат, полученный на приведенном выше примере. Заметим, что увеличение значения стиль на 100 приводит к четырехзначному отображению года.

1

07/22/03

3

22/07/03

11

03/07/22

121

2003-07-22 00:00:00.000

Перечень всех возможных значений аргумента стиль можно посмотреть в BOL.