
- •1. Основные сведения о языке sql
- •2. Определение данных
- •2.1. Создание и удаление таблицы
- •2.2. Изменение состава полей таблицы
- •2.3. Создание и удаление индекса
- •IndName on Personnel.Db (Name)
- •IndNamePosition on Personnel.Db (Name, Position)
- •3. Отбор данных из таблиц
- •3.1. Описание оператора select
- •3.2. Управление полями
- •3.3. Простое условие отбора записей
- •3.4. Сложные критерии отбора записей
- •3.5 Группирование записей
- •3.6. Сортировка записей
- •Var s: string;
- •3.7. Соединение таблиц
- •4. Модификация записей
- •4.1. Редактирование записей
- •4.2. Вставка записей
- •Insert into Store
- •Values ("Торшер", 499.9, 10);
- •Insert into CardsArchives
- •4.3. Удаление записей
- •5. Статический и динамический запросы
- •Var str: string;
3.4. Сложные критерии отбора записей
При отборе можно использовать несколько операций, задавая тем самым сложные критерии отбора записей. Сложный критерий (логическое выражение) состоит из
1. Простых условий;
2. Логических операций:
and — логическое и;
or — логическое или;
not — логическое не;
круглых скобок.
Замечание
В языке 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 с любыми датами.