Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 8.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
384.51 Кб
Скачать

3.4. Сложные критерии отбора записей

При отборе можно использовать несколько операций, задавая тем самым слож­ные критерии отбора записей. Сложный критерий (логическое выражение) со­стоит из

1. Простых условий;

2. Логических операций:

  • and — логическое и;

  • or — логическое или;

  • not — логическое не;

  1. круглых скобок.

Замечание

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

Пример запроса со сложным критерием отбора:

SELECT Cards.*

FROM Store,Cards

WHERE (S_Quantity > 250) AND

(C_Date BETWEEN "21.5.2008" AND "27.5.2008")

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

С_Number C_Code С_Move C_Date

5 3 270 25.05.08

6 4 200 26.05.08

5 3 270 27.05.08

6 4 200 27.05.08

Отметим, что рассмотренные выше операции between и in также реализуют логические операции: between логическое и, a in логическое или.

3.5 Группирование записей

Записи набора данных могут быть сгруппированы по некоторому признаку. Группу образуют записи с одинаковыми значениями в полях, перечисленных в списке операнда group by. При группировании записей их проще анализировать и обрабатывать, например, с помощью статистических функций.

Группирование записей автоматически исключает повтор значений в полях, за­данных для группирования, т. к. записи с совпадающими значениями этих по­лей объединяются в одну группу.

Пример запроса с группированием записей:

SELECT C_Date, COUNT(C_Date)

FROM Cards

WHERE C_Date BETWEEN "01.06.2008" AND "03.06.2008"

GROUP BY C_Date

Для каждой даты из указанного периода выводится количество записей, в кото­рых она встречается. Если не выполнить группирование, то в набор данных по­падут все записи, а при использовании группирования все даты для получен­ного набора данных уникальны.

Функция count выводит для каждой группы (сформированной по полю даты) число записей в группе. Полученный набор данных может иметь следующий вид:

С_Date COUNT(С_Date)

01.06.08 20

02.06.08 17

03.06.08 8

В этом примере поле даты С_Date использовано в операторе SELECT трижды, в общем случае можно использовать различающиеся поля.

Совместно с операндом group by можно использовать операнд having, с по­мощью которого задаются дополнительные условия группирования записей.

Рассмотрим пример запроса:

SELECT C_Date, COUNT(C_Date)

FROM Cards

GROUP BY C_Date

HAVING.COUNT(C_Date) > 50

Здесь отбираются данные для дат, когда движение товара было интенсивным — общее число записей в соответствующей группе превышало 50. Так как не ука­зан ограничивающий период времени, то при отборе в набор данных будут учи­тываться записи таблицы Cards с любыми датами.