Синтаксис SQL Language 

Переименование столбцов и вычисления в результирующем наборе

Имена столбцов, указанные в предложении 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 вообще не будет иметь заголовка.

Предикаты (часть 2)

Предикат LIKE

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

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

Шаблон Описание
'abc%' Любые строки, которые начинаются с букв "abc".
'abc_' Строки длиной строго 4 символа, причем первыми символами строки должны быть "abc".
'%z' Любая последовательность символов, которая обязательно заканчивается символом "z".
'%Rostov%' Любая последовательность символов, содержащая слово "Rostov" в любом месте строки.

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

SELECT *
FROM Ships
WHERE class LIKE '%o';

Результатом выполнения запроса будет следующая таблица:

name class launched
Haruna Kongo 1916
Hiei Kongo 1914
Kirishima Kongo 1915
Kongo Kongo 1913
Musashi Yamato 1942
Yamato Yamato 1941

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

SELECT *
FROM Ships
WHERE class NOT LIKE '%go' AND class LIKE '%o';

name class launched
Musashi Yamato 1942
Yamato Yamato 1941

Если искомая строка содержит трафаретный символ, то следует задать управляющий символ в предложении ESCAPE. Этот управляющий символ должен использоваться в шаблоне перед трафаретным символом, сообщая о том, что трафаретный символ следует трактовать как обычный символ. Например, если в некотором поле следует отыскать все значения, содержащие символ "_", то шаблон '%_%' приведет к тому, что будут возвращены все записи из таблицы. В данном случае шаблон следует записать следующим образом:

'%#_%' ESCAPE '#'

Для проверки значения на соответствие строке "25%" можно воспользоваться таким предикатом:

LIKE '25|%' ESCAPE '|'

Истинностное значение предиката LIKE присваивается в соответствии со следующими правилами:

Использование значения NULL в условиях поиска

Предикат
IS [NOT] NULL

позволяет проверить отсутствие (наличие) значения в полях таблицы. Использование в этих случаях обычных предикатов сравнения может привести к неверным результатам, т.к. сравнение со значением NULL дает результат UNKNOWN (неизвестно).

Так, если требуется найти записи в таблице Pc, для которых в поле price отсутствует значение (поиск ошибок ввода), можно воспользоваться следующим оператором:

SELECT *
FROM Pc
WHERE price IS NULL;

Рекомендуемые упражнения: 44.





Назад | Содержание | Вперед


Начало Упражнения SELECT (рейтинговые этапы) Упражнения DML Разработчики