Справка по SQL | страница 3
Предикат в языке 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 (символьные строки) сравниваются в соответствии с их алфавитной последовательностью. Если a>1a>2…a>n и b>1b>2…b>n - две последовательности символов, то первая "меньше" второй, если а>1>1, или а>1=b>1 и а>2>2 и т.д. Считается также, что а>1а>2…а>n>1b>2…b>m, если n
Данные типа DATETIME (дата/время) сравниваются в хронологическом порядке.
Данные типа INTERVAL (временной интервал) преобразуются в соответствующие типы, а затем сравниваются как обычные числовые значения типа NUMERIC.
Пример. Получить информацию о компьютерах, имеющих частоту процессора не менее 500 Мгц и цену ниже $800:
>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 |
Пример. Получить информацию обо всех принтерах, которые не являются матричными и стоят меньше $300:
>SELECT * FROM Printer
>WHERE NOT (type = 'matrix') AND price < 300;
Результат выполнения запроса:
code | model | color | type | price |
---|---|---|---|---|
2 | 1433 | y | Jet | 270.0 |
3 | 1434 |