Справка по SQL | страница 4



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:

>SELECT model, speed FROM Pc

>WHERE price BETWEEN 400 AND 600;


model

speed

1232

500

1233

500

1232

500



Проверка наличия значения в наборе. Предикат IN


Предикат IN определяет, будет ли значение проверяемого выражения обнаружено в наборе значений, который либо явно определен, либо получен с помощью табличного подзапроса. Табличный подзапрос это обычный оператор SELECT, который создает одну или несколько строк для одного столбца, совместимого по типу данных со значением проверяемого выражения. Если целевой объект эквивалентен хотя бы одному из указанных в предложении IN значений, истинностное значение предиката IN будет равно TRUE. Если для каждого значения Х в предложении IN целевой объект<>X, истинностное значение будет равно FALSE. Если подзапрос выполняется, и результат не содержит ни одной строки (пустая таблица), предикат принимает значение FALSE. Когда не соблюдается ни одно из упомянутых выше условий, значение предиката равно UNKNOWN.

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

[NOT] IN ()

| (,...)

Пример. Найти модель, частоту процессора и объем жесткого диска тех компьютеров, которые комплектуются накопителями 10 или 20 Мб:


>SELECT model, speed, hd FROM Pc

>WHERE hd IN (10, 20);


model

speed

hd

1233

750

20

1232

500

10

1232

450

10

1260

500

10


Пример. Найти модель, частоту процессора и объем жесткого диска тех компьютеров, которые комплектуются накопителями 10 или 20 Мб и выпускаются производителем А:


>SELECT model, speed, hd

>FROM Pc

>WHERE hd IN (10, 20) AND

> model IN (SELECT model FROM product

> WHERE maker = 'A');


model

speed

hd

1233

750

20

1232

500

10

1232

450