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

2.1.2 Аналитическая выборка данных

Аналитическая выборка данных из базы данных опирается на возможности Transact-SQL создавать запросы, неразрывно связанных с агрегатными функциями:

  • Avg ([all | distinct] выражение) – среднее арифметическое всех значений.

  • Count ([all | distinct] выражение | *) – количество значений в списке, отличных от NULL. При использовании символа * подсчитывается количество значений, включая значения NULL или повторяющиеся значения.

  • Sum ([all | distinct] выражение) – сумма всех значений списка.

  • Max ([all | distinct] выражение) –максимальное значение.

  • Min ([all | distinct] выражение) – минимальное значение.

Ключевое слово all предписывает выполнять агрегирование всех записей в результирующем наборе данных, distinct – агрегирование только уникальных записей. По умолчанию используется all.

Например, вычисление среднего возраста студента осуществляется с помощью следующего запроса:

SELECT AVG(Возраст) FROM Студент

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

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

2.1.3 Условие отбора where

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

Условие может включать выражения, образованные с помощью операторов сравнения или логических операторов. Условия могут также объединяться и с помощью логических операндов AND, OR и NOT.

Наиболее распространенным условием поиска в языке SQL является сравнение, которое реализуется следующей конструкцией:

<значение> <операция_сравнения> <значение1>.

В качестве операторов сравнения используются такие арифметические действия, как «=», «<», «>», «<=», «>=». При этом выбираются те экземпляры, для которых истинно значение выражения (условия).

Например:

SELECT *

FROM TimeTable

WHERE Группа = 1121

Код занятий

Предмет

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

Группа

Время

SC001

Теоретическая механика

Ландау Лев

1121

25.01.2013 08:30

SC003

Электростатика

Кулон Шарль-Огюстен

1121

01.12.2011 17:00

SC007

Электростатика

Рентген Вильгельм-Конрад

1121

01.09.2011 17:00

Для выполнения запросов, условие которых будет содержать текстовые данные, существует правило написания предикатов. Так, чтобы выполнить запрос на текстовое поле, необходимо искомое значение заключить в апострофы или кавычки:

SELECT *

FROM TimeTable

WHERE Преподаватель = ' Ландау Лев '

Код занятий

Предмет

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

Группа

Время

SC001

Теоретическая механика

Ландау Лев

1121

25.01.2013 08:30

SC006

Теоретическая механика

Ландау Лев

1322

01.12.2011 10:20

Также для поиска по нескольким условиям используются булевы операторы, такие как AND, OR.

SELECT *

FROM TimeTable

WHERE Группа = 1121 AND Преподаватель = 'Рентген Вильгельм-Конрад'

Код занятий

Предмет

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

Группа

Время

SC007

Электростатика

Рентген Вильгельм-Конрад

1121

01.12.2011 17:00

SELECT *

FROM TimeTable

WHERE Группа = 1121 AND Преподаватель = ' Рентген Вильгельм-Конрад'

Код занятий

Предмет

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

Группа

Время

SC001

Теоретическая механика

Ландау Лев

1121

25.01.2013 08:30

SC005

Электростатика

Рентген Вильгельм-Конрад

1122

13.12.2013 15:00

SC007

Электростатика

Рентген Вильгельм-Конрад

1121

01.12.2011 17:00

Для поиска по шаблону символьных строк используется логический оператор LIKE, который чаще всего используется в ситуациях, когда неизвестно точное совпадение.

Например, запрос

SELECT *

FROM TimeTable

WHERE Предмет like 'Теоретическая механика

Код занятий

Предмет

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

Группа

Время

SC001

Теоретическая механика

Ландау Лев

1121

25.01.2013 08:30

SC006

Теоретическая механика

Ландау Лев

1322

01.12.2011 10:20

В шаблоне могут использоваться следующие универсальные символы:

  • % – подразумевает любую строку, состоящую из 0 и более символов;

  • _ – ровно один символ;

  • [ ] – любой символ из заданного множества (например, [adfh]) или диапазона (например, [0-9]),

В случае, если неизвестно слово целиком, при выполнении запроса можно воспользоваться следующей конструкцией:

SELECT *

FROM TimeTable

WHERE Предмет like '%тро%'

Код занятий

Предмет

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

Группа

Время

SC002

Астрономия

Хокинг Стив

1123

16.12.2001 10:00

SC003

Электростатика

Кулон Шарль-Огюстен

1121

01.12.2011 17:00

SC005

Электростатика

Рентген Вильгельм-Конрад

1122

13.12.2013 15:00

SC007

Электростатика

Рентген Вильгельм-Конрад

1121

01.12.2011 17:00

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

Например:

SELECT *

FROM TimeTable

WHERE Предмет like '[Н-Т]%'

Код занятий

Предмет

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

Группа

Время

SC001

Теоретическая механика

Ландау Лев

1121

25.01.2013 08:30

SC004

Небесная механика

Хокинг Стив

1322

08.10.2013 12:00

SC006

Теоретическая механика

Ландау Лев

1322

01.12.2011 10:20

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

SELECT *

FROM TimeTable

WHERE Предмет like '[^Н-Т]%'

Код занятий

Предмет

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

Группа

Время

SC002

Астрономия

Хокинг Стив

1123

16.12.2001 10:00

SC003

Электростатика

Кулон Шарль-Огюстен

1121

01.12.2011 17:00

SC005

Электростатика

Рентген Вильгельм-Конрад

1122

13.12.2013 15:00

SC007

Электростатика

Рентген Вильгельм-Конрад

1121

01.12.2011 17:00

Для нахождения значений, находящихся в некотором заданном интервале можно воспользоваться следующим предикатом:

SELECT *

FROM TimeTable

WHERE Группа BETWEEN 1121 AND 1322

Код занятий

Предмет

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

Группа

Время

SC001

Теоретическая механика

Ландау Лев

1121

25.01.2013 08:30

SC002

Астрономия

Хокинг Стив

1123

16.12.2001 10:00

SC003

Электростатика

Кулон Шарль-Огюстен

1121

01.12.2011 17:00

SC004

Небесная механика

Хокинг Стив

1322

08.10.2013 12:00

SC005

Электростатика

Рентген Вильгельм-Конрад

1122

13.12.2013 15:00

SC006

Теоретическая механика

Ландау Лев

1322

01.12.2011 10:20

SC007

Электростатика

Рентген Вильгельм-Конрад

1121

01.12.2011 17:00

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

SELECT *

FROM TimeTable

WHERE Группа IN (1121,1322)

Код занятий

Предмет

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

Группа

Время

SC001

Теоретическая механика

Ландау Лев

1121

25.01.2013 08:30

SC003

Электростатика

Кулон Шарль-Огюстен

1121

01.12.2011 17:00

SC004

Небесная механика

Хокинг Стив

1322

08.10.2013 12:00

SC007

Электростатика

Рентген Вильгельм-Конрад

1121

01.12.2011 17:00

Однако в список значений нельзя включать неопределенное значение NULL, для работы с такими значениями используется функция выборки IS NULL.

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