Справка по 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>1а>2…а>n=b>1b>2…b>n, т.е. если первая строка является префиксом второй. Например, 'folder'<'for', т.к. первые две буквы этих строк совпадают, а третья буква строки 'folder' предшествует третьей букве строки 'for'. Также справедливо неравенство 'bar' < 'barber', поскольку первая строка является префиксом второй.

Данные типа 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