Предикат OVERLAPS (перекрывает) используется для определения, перекрываются ли два интервала времени. Интервал времени можно задать двумя способами: в виде начального и конечного моментов или в виде начального момента и длительности. Примеры задания интервала времени:
· (TIME '12:25:30', TIME '14:30:00') —интервал, заданный начальным и конечным моментами;
· (TIME '12:45:00', INTERVAL '2' HOUR)—интервал, заданный начальным моментом и длительностью в часах.
Выражение с предикатом OVERLAPS можно записать, например, так:
(TIME '12:25:30', TIME '14:30:00') OVERLAPS (TIME 42:45:00', INTERVAL '2' HOUR)
Поскольку временные интервалы в данном примере пересекаются, то предикат OVERLAPS возвращает значение true.
Предикат MATCH применяется для проверки сохранения ссылочной целостности при модификации данных, т. е. при добавлении, изменении и удалении записей.
Предикат SIMILAR (подобный) применяется для проверки частичного соответствия символьных строк. Эту же задачу можно ре шить и с помощью предиката LIKE, однако в ряде случаев SIMILAR более эффективен.
Предположим, что в некоторой таблице имеется столбец ОС, содержащий названия операционных систем. Нужно выбрать записи, соответствующие Windows NT, Windows XP и Windows 98. Тогда в выражении запроса можно использовать такой оператор WHERE:
WHERE ОС SIMILAR TO '(Windows (NT|XP|98))';
Оператор GROUP BY (группировать по) служит для группировки записей по значениям одного или нескольких столбцов. Если в SQL-выражении используется оператор WHERE, задающий фильтр записей, то оператор GROUP BY находится и выполняется после него. Для определения, какие записи должны войти в группы, служит оператор HAVING, используемый совместно с GROUP BY. Если оператор HAVING не применяется, то группировке подлежат все записи, отфильтрованные оператором WHERE. Если WHERE не используется, то группируются все записи исходной таблицы.
Допустим, что на основе таблицы о клиентах требуется сгруппировать данные о суммах заказов клиентов по регионам. Для этого можно воспользоваться следующим SQL-выражением:
SELECT Регион, Сумма_заказа FROM Клиенты GROUP BY Регион;
На рис. 4 показана результатная таблица на фоне исходной таблицы Клиенты. Обратите внимание, что записи с одинаковыми названиями регионов расположены рядом друг с другом (в одной группе).
Рис. 4. Результат запроса сумм заказов с группировкой по регионам
Рис. 5. Результат запроса итоговых сумм заказов по регионам
Чтобы получить таблицу, в которой суммы заказов подытожены по регионам, потребуется использовать итоговую функцию SUM () и группировку по регионам:
SELECT Регион, SUM(Сумма_заказа) FROM Клиенты
GROUP BY Регион;
Здесь в выражении SELECT указаны обычный столбец таблицы Клиенты и итоговая функция SUM(), вычисляющая сумму значений столбца Сумма_заказа. Поскольку группировка задана по столбцу "Регион, то функция SUM (Сумма_заказа) вычисляет Суммы значений столбца Сумма_заказа для каждого значения столбца Регион. На рис. 5 показана результатная таблица на фоне исходной таблицы Клиенты. Обратите внимание, что в этой таблице названия регионов не повторяются.
Оператор GROUP BY собирает записи в группы и упорядочивает (сортирует) группы по алфавиту (точнее, по ASCII-кодам символов). Это обстоятельство следует иметь в виду перед тем, как принять решение об использовании оператора сортировки ORDER BY.