В последнем запросе использовался предикат сравнения с использованием операции сравнения "<" (меньше чем). Кроме этой операции сравнения могут использоваться: "=" (равно), "" (больше), "=" (больше или равно), "<=" (меньше или равно) и "<>" (не равно). Выражения в предикатах сравнения могут содержать любые поля из таблиц, указанных в предложении FROM. Символьные строки и константы типа дата/время записываются в апострофах.
Примеры простых предикатов сравнения:
price < 1000 | Цена меньше $1000. |
type = 'laptop' | Типом продукции является ПК-блокнот. |
cd = '24x' | 24-скоростной CD-ROM. |
color <>'y' | Не цветной принтер. |
ram - 128 0 | Объем оперативной памяти свыше 128 Mb. |
price <= speed*2 | Цена не превышает удвоенной частоты процессора. |
Булевы операторы AND, OR, NOT и трехзначная логика. Предикаты
Предикаты представляют собой выражения, принимающие истинностное значение. Они могут представлять собой как одно выражение, так и любую комбинацию из неограниченного количества выражений, построенную с помощью булевых операторов AND, OR или NOT. Кроме того, в этих комбинациях может использоваться SQL-оператор IS, а также круглые скобки для конкретизации порядка выполнения операций.
Предикат в языке SQL может принимать одно из трех значений TRUE (истина), FALSE (ложь) или UNKNOWN (неизвестно). Исключение составляют следующие предикаты: NULL (отсутствие значения), EXISTS (существование), UNIQUE (уникальность) и MATCH (совпадение), которые не могут принимать значение UNKNOWN.
Правила комбинирования всех трех истинностных значений легче запомнить, обозначив TRUE как 1, FALSE как 0 и UNKNOWN как 1/2 (где то между истинным и ложным).
* AND с двумя истинностными значениями дает минимум этих значений. Например, TRUE AND UNKNOWN будет равно UNKNOWN.
* OR с двумя истинностными значениями дает максимум этих значений. Например, FALSE OR UNKNOWN будет равно UNKNOWN.
* Отрицание истинностного значения равно 1 минус данное истинностное значение. Например, NOT UNKNOWN будет равно UNKNOWN.
Предикаты сравнения
Предикат сравнения представляет собой два выражения, соединяемых оператором сравнения. Имеется шесть традиционных операторов сравнения: =, >, <, >=, <=, <>.
Данные типа NUMERIC (числа) сравниваются в соответствии с их алгебраическим значением.
Данные типа CHARACTER STRING (символьные строки) сравниваются в соответствии с их алфавитной последовательностью. Если a1a2…an и b1b2…bn - две последовательности символов, то первая "меньше" второй, если а11, или а1=b1 и а22 и т.д. Считается также, что а1а2…аn1b2…bm, если n
Данные типа DATETIME (дата/время) сравниваются в хронологическом порядке.
Данные типа INTERVAL (временной интервал) преобразуются в соответствующие типы, а затем сравниваются как обычные числовые значения типа NUMERIC.
SELECT * FROM Pc
WHERE speed = 500 AND price < 800;
Запрос возвращает следующие данные:
code | model | speed | ram | hd | cd | price |
---|---|---|---|---|---|---|
1 | 1232 | 500 | 64 | 5 | 12x | 600.0 |
3 | 1233 | 500 | 64 | 5 | 12x | 600.0 |
7 | 1232 | 500 | 32 | 10 | 12x | 400.0 |
10 | 1260 | 500 | 32 | 10 | 12x | 350.0 |
SELECT * FROM Printer
WHERE NOT (type = 'matrix') AND price < 300;
Результат выполнения запроса:
code | model | color | type | price |
---|---|---|---|---|
2 | 1433 | y | Jet | 270.0 |
3 | 1434 | y | Jet | 290.0 |
Проверка попадания в диапазон. Предикат BETWEEN.
Предикат BETWEEN проверяет, попадают ли значения проверяемого выражения в диапазон, задаваемый пограничными выражениями, соединяемыми служебным словом AND. Естественно, как и для предиката сравнения, выражения в предикате BETWEEN должны быть совместимы по типам.