Справка по SQL - страница 2

Шрифт
Интервал

стр.

.

Примеры простых предикатов сравнения:


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 (символьные строки) сравниваются в соответствии с их алфавитной последовательностью. Если 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

y

Jet

290.0



Проверка попадания в диапазон. Предикат BETWEEN.


Предикат BETWEEN проверяет, попадают ли значения проверяемого выражения в диапазон, задаваемый пограничными выражениями, соединяемыми служебным словом AND. Естественно, как и для предиката сравнения, выражения в предикате BETWEEN должны быть совместимы по типам.

Синтаксис BETWEEN::=

[NOT] BETWEEN

AND

Предикат

exp1 BETWEEN exp2 AND exp3

равносилен предикату

exp1=exp2 AND exp1<=exp3

А предикат

exp1 NOT BETWEEN exp2 AND exp3

равносилен предикату

NOT (exp1 BETWEEN exp2 AND exp3)

Если значение предиката exp1 BETWEEN exp2 AND exp3 равно TRUE, в общем случае это отнюдь не означает, что значение предиката exp1 BETWEEN exp3 AND exp2 тоже будет TRUE, так как первый можно интерпретировать как предикат

exp1=exp2 AND exp1<=exp3

а второй как

exp1=exp3 AND exp1<=exp2

Пример. Найти модель и частоту процессора компьютеров стоимостью от $400 до $600:


стр.

Похожие книги