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.
Предикат BETWEE Nпроверяет, попадают ли значения проверяемого выражения в диапазон, задаваемый пограничными выражениями, соединяемыми служебным словом 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
|
10
|
Переименование столбцов и вычисления в результирующем наборе
Имена столбцов, указанные в предложении SELECT, можно переименовать. Это делает результаты более читабельными, поскольку имена полей в таблицах часто сокращают с целью упрощения набора. Ключевое слово AS, используемое для переименования, согласно стандарту можно и опустить, т.к. оно неявно подразумевается.
Например, запрос
SELECT ram AS Mb, hd Gb
FROM Pc
WHERE cd = '24x';
переименует столбец ram в Mb (мегабайты), а столбец hd в Gb (гигабайты). Этот запрос возвратит объемы оперативной памяти и жесткого диска для тех компьютеров, которые имеют 24-скоростной CD-ROM:
Читать дальше