В языке SQL условия отбора записей из таблицы задаются ключевым словом WHERE. Условие может быть «простое» или «комплексное». Комплексное условие состоит из нескольких простых, объединенных логическими операторами.
При формировании условий используются следующих основные правила:
Правило 1. Для формирования простого условия можно использовать набор операторов, который показан в таблице4 ниже:
Таблица 4
Операторы, применяемые в построении комплексных запросов
=
Равно
>
Больше
>=
Больше или равно
<
Меньше
<=
Меньше или равно
<>
Не равно
Пример запроса с простым условием: отобрать все товары (т.е. строки из таблицы price), которые имеют цену больше или равную (>=) 3000.
SELECT pnun AS номер , pname AS наименование, price AS цена FROM price WHERE price>=3000;
Результат выполнения этого запроса показан на рис. 13.
Рис. 13.Результат выполнения запроса с условием (price>=3000).
Правило 2. Для логического соединения простых условий и создания сложного условия используются логические операторы :
Таблица 4.
Логические операторы, применяемые для построения комплексных условий.
OR
Логическое «ИЛИ»
AND
Логическое «И»
NOT
Не равно (логическое отрицание)
Дополним условие предыдущего запроса дополнительным ограничением по дате регистрации продукта в прайсе (например, pdate>#12/14/2005#;).
Иначе говоря, надо отобрать все строки с товарами, которые имеют цену больше или равную (>=) 3000 и зарегистрированы позднее (>) 12/14/2005. (дата в условиях выделяется символом «решетка» - #...#)
На языке SQL запрос выглядит следующим образом:
SELECT price.pnun AS номер, price.pname AS наименование, price.price AS цена, price.pdate
FROM price
WHERE price>=3000 AND pdate>#12/14/2005#;
Результат запроса со сложным условием представлен на Рис. 14 ниже.
Рис.14. Выполнение запроса с условием (price>=3000 AND pdate>#12/14/2005#)
Рассмотрите этот запрос в режиме QBE (см. рис.15 ниже). В конструкторе запросов можно заменить, что условие AND формируется соседними столбцами. Оно указывает, что отбираются записи, которые удовлетворяют и первому и второму условиям одновременно (логическое «И»).
Логическое условие
AND ( «И»)
Рис. 15. Запрос в формате QBE со сложным условием (price>=3000 AND pdate>#12/14/2005#)
Сформулируем запрос комплексным условием, который использует логическую связку «ИЛИ» (OR). Например, надо отобрать все строки из прайса для автомобилей «Волга» и «Ауди» (т.е. условие WHERE pname="Волга" OR pname ="Ауди") (см. рис.16)
Запрос с комплексным условием на языке SQL запишется так:
SELECT pnum AS номер, pname AS наименование, price AS цена
FROM Price WHERE pname="Волга" OR pname ="Ауди" ;
Замечание: Логический оператор «ИЛИ» соответствует обычному (бытовому) пониманию союза «И» (т.е. можно интерпретировать этот логический оператор так: подходит «и тот и другой» объект).
В режиме QBE запрос со связкой «ИЛИ» выглядит так, как показано на рис.16 ниже. Условия располагаются в одном столбце и связываются союзом «ИЛИ».
Логическое условие
OR («ИЛИ»)
Рис.16. Построение запроса со сложным условием (pname="Волга" OR pname ="Ауди")
Результат выполнения запроса с логическим условием «ИЛИ» (pname="Волга" OR pname ="Ауди") показан на рис. 17. Отобраны только две строки, в которых наименования автомобилей удовлетворяют заданным условиям (автомобили "Волга" или "Ауди").
Рис.17. Пример запроса с комплексным условием «ИЛИ» (pname="Волга" OR pname ="Ауди")
Правило 3. Когда много простых условий связано большим числом логических операторов (ЛО), порядком проверки условий, можно управлять расстановкой круглых скобок. Сначала проверяется условие, которое находится внутри самых «глубоких» скобок.
Пример: Пусть задано комплексное условие вида:
((<условие C >ЛО2(<условие A>ЛО1<условие B>))ЛО3<условие D> ),
в котором используются 4-ре простых условия A, B, C и D, соединенные тремя логическими операторами ЛО1, ЛО2 и ЛО3. Последовательность исчисления логического предиката будет следующая:
Сначала вычисляется <условие A> и <условие B> и выполняется логическая связка ЛО1;
Затем вычисляется <условие C> и выполняется ЛО2;
В заключении вычисляется <условие D> ) и выполняется ЛО3.
Рассмотрим запрос с вложенной структурой условий. Например, надо отобрать строки из таблицы Price, удовлетворяющие следующим нескольким условиям (простые условия соединяются с помощью AND):
SELECT pnum AS Номер, pname AS Наименование, price AS Цена FROM price
WHERE (( pnum ='3001' OR pnum ='3003')
AND ( pdate <=#12/16/2005#) AND ( pdate >=#12/14/2005#)
AND ( price >3000));
Такой запрос сначала обработает условие OR, а затем условия AND.
1.4. Вставка текстовых столбцов.
В запросы можно вставлять текстовые столбцы, которые облегчают понимание результатов. Например, в запросе ниже вставлено два текстовых столбца: «Наименование» и «цена». Этот текст будет повторяться в каждой строке результирующей таблицы.
Пример SQL запроса с текстовыми столбцами:
SELECT pnum AS НОМЕР, 'Наименование' , pname AS НАЗВАНИЕ, 'Цена' , price AS ЦЕНА
FROM Price
WHERE pnum ='3003' ;
Результат запроса показан на рис. 18.
Рис. 18. Пример запроса со вставленными текстовыми столбцами