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

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.