История развития баз данных. Основные понятия и определения. Архитектура базы данных. Физическая и логическая независимость, страница 12

Шаблон представляет собой текстовую строку с возможным использованием метасимвола (например, «*» - произвольная последовательность символов).

Пример:

SELECT * FROM студент

WHERE sgrp LIKE («*3»);

Результат:

snum

sname

sgrp

spdp

004

С-4

Г-3

Поля таблицы могут содержать значение NULL, т.е. значение не задано. Такие поля не равны ни каким другим, в том числе NULL-значениям. Результатом сравнения NULL-значения с другим значением есть неизвестность. Обычные операции сравнения не могут быть использованы для сравнения со значением NULL. И, в таком случае, должен быть использован оператор ISNULLв формате:

имя_поля ISNULL;

Пример:

SELECT * FROM студент

WHERE spdp ISNULL;

Результат:

snum

sname

sgrp

spdp

004

С-4

Г-3

Некоторые системы, в том числе Microsoft Access, логическое выражение имя_поля = NULL автоматически преобразовывает имя_поля ISNULL.

2. Суммирование данных с помощью функций агрегирования (групповых функций).

Функции агрегирования предназначены для расчёта значений по группам строк таблицы. Стандарт SQL определяет следующие функции агрегирования:

  1. COUNT – определяет количество строки или количество непустых значений поля.
  2. SUM – сумма значений поля.
  3. AVG – среднее значение поля.
  4. MIN – минимальное значение поля.
  5. MAX – максимальное значение поля.

Как видно, таких функций меньше, чем обеспечивает, к примеру, Microsoft Access. В функции агрегирования указываются вместо имён полей в операторе SELECT, а имена полей задаются как параметры функций. Для SUM и AVG поля-параметры должны быть числовыми, а для COUNT, MIN и MAX – как числовые, так и символьные поля-параметры.

Пример:

Получить среднюю оценку студента с кодом 003.

SELECT AVG (ocen)

FROM оценка

WHERE snum = «003»;

Результат:

AVG (ocen)

3

В функции COUNT могут быть использованы специальные атрибуты.

CONT (*) – количество строк в таблице.

Пример 1:

SELECT COUNT (*) FROM студент;

Результат: 4

Пример 2:

SELECT COUNT (spdp) FROM студент;

Результат: 3

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

COUNT (DISTINCT имя_поля);

Пример:

SELECT COUNT (DISTINCT opnum);

Результат: 2

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

Пример 1:

Получить суммарный бал студента:

SELECT osnum, SUM (ocen);

FROM оценкаGROUPP BY osnum;

Результат:

osnum

SUM (ocen)

001

10

002

4

003

9

Пример 2:

Получить средний бал студента у преподавателя:

SELECT opnum, osnum, AVG (ocen)

FROM оценкаGROUP BY opnum, osnum;

Результат:

opnum

osnum

AVG (ocen)

001

001

5

001

002

4

001

003

3

003

001

5

003

3

При использовании GROUPBY может потребоваться наложить условие на включение записей по группам в результирующую таблицу.

Пример:

Получить сведения о студентах, у которых средний бал не ниже 4-ёх:

SELECT osnum, AVG (ocen)

FROM оценка

WHERE AVG(ocen) >= 4;

GROUP BY osnum;

Запрос такого вида является некорректным, т.к. применять функции агрегирования в предложении WHERE нельзя, т.к. каждое условие проверяется для каждой строки, а не для группы строк. В данном случае следует применить предложение HAVING:

SELECT osnum, AVG (ocen)