Предикаты представляют собой выражения, принимающие истинностное значение. Они могут представлять собой как одно выражение, так и любую комбинацию из неограниченного количества выражений, построенную с помощью булевых операторов AND, OR или NOT. Кроме того, в этих комбинациях может использоваться SQL-оператор IS, а также круглые скобки для конкретизации порядка выполнения операций.
Предикат в языке SQL может принимать одно из трех значений TRUE (истина), FALSE (ложь) или UNKNOWN (неизвестно). Исключение составляют следующие предикаты: NULL (отсутствие значения), EXISTS (существование), UNIQUE (уникальность) и MATCH (совпадение), которые не могут принимать значение UNKNOWN.
Правила комбинирования всех трех истинностных значений легче запомнить, обозначив TRUE как 1, FALSE как 0 и UNKNOWN как 1/2 (где то между истинным и ложным).
Пример. Получить информацию о компьютерах, имеющих частоту процессора не менее 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::=
<Проверяемое выражение> [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::=
<Проверяемое выражение> [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 | 10 |
Начало | Упражнения SELECT (рейтинговые этапы) | Упражнения DML | Разработчики |