Выбрать главу

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:

Mb

Gb

64

8

32

10

Переименование особенно желательно при использовании в предложении SELECT выражений для вычисления значения. Эти выражения позволяют получать данные, которые не находятся непосредственно в таблицах. Если выражение содержит имена столбцов таблицы, указанной в предложении FROM, то выражение подсчитывается для каждой строки выходных данных. Так, например, чтобы вывести объем оперативной памяти в килобайтах, можно написать:

SELECT ram * 1024 AS Kb, hd Gb

FROM Pc

WHERE cd = '24x';

Теперь будет получен следующий результат:

Kb

Gb

65536

8

32768

10

Иногда бывает необходимо выводить поясняющую информацию рядом с соответствующим значением. Это можно сделать, добавив строковое выражение как дополнительный столбец. Например, запрос

SELECT ram, 'Mb' AS ram_units, hd, 'Gb' AS hd_units

FROM Pc

WHERE cd = '24x';

даст следующий результат:

ram

ram_units

hd

hd_units

64

Mb

8

Gb

32

Mb

10

Gb

Если же явно не указать имя для выражения, то будет использован способ именования по умолчанию, который зависит от используемой СУБД. Так в MS Access будут использованы имена типа выражение1 и т.д., а выходной столбец в MS SQL Server вообще не будет иметь заголовка.

Проверка наличия подстроки. Предикат LIKE

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

[NOT] LIKE

[ESCAPE ]

Предикат LIKE сравнивает строку, указанную в первом выражении для вычисления значения строки, называемого проверяемым значением, с шаблоном, который определен во втором выражении для вычисления значения строки. В образце разрешается использовать два трафаретных символа:

* Символ подчеркивания (_), который можно использовать вместо любого единичного символа в проверяемом значении.

* Символ процента (%), который заменяет набор любых символов (число символов в наборе может быть от 0 и более) в проверяемом значении.

Если проверяемое значение соответствует образцу с учетом трафаретных символов, то значение предиката равно TRUE. Ниже приводится несколько примеров написания шаблонов.

Шаблон

Описание

'abc%'

Любые строки, которые начинаются с букв "abc".

'abc_'

Строки длиной строго 4 символа, причем первыми символами строки должны быть "abc".

'%z'

Любая последовательность символов, которая обязательно заканчивается символом "z".

'%Rostov%'

Любая последовательность символов, содержащая слово "Rostov" в любом месте строки.

Пример. Найти все корабли, имена классов которых заканчиваются на букву 'о':