Переименование столбцов и вычисления в результирующем наборе
Имена столбцов, указанные в предложении SELECT, можно переименовать. Это делает результаты более читабельными, поскольку имена полей в таблицах часто сокращают с целью упрощения набора. Ключевое слово AS, используемое для переименования, согласно стандарту можно и опустить, т.к. оно неявно подразумевается.
Например, запрос
переименует столбец ram в Mb (мегабайты), а столбец hd в Gb (гигабайты). Этот запрос возвратит объемы оперативной памяти и жесткого диска для тех компьютеров, которые имеют 24-скоростной CD-ROM:
Переименование особенно желательно при использовании в предложении SELECT выражений для вычисления значения. Эти выражения позволяют получать данные, которые не находятся непосредственно в таблицах. Если выражение содержит имена столбцов таблицы, указанной в предложении FROM, то выражение подсчитывается для каждой строки выходных данных. Так, например, чтобы вывести объем оперативной памяти в килобайтах, можно написать:
Теперь будет получен следующий результат:
Иногда бывает необходимо выводить поясняющую информацию рядом с соответствующим значением. Это можно сделать, добавив строковое выражение как дополнительный столбец. Например, запрос
даст следующий результат:
Если же явно не указать имя для выражения, то будет использован способ именования по умолчанию, который зависит от используемой СУБД. Так в MS Access будут использованы имена типа выражение1 и т.д., а выходной столбец в MS SQL Server вообще не будет иметь заголовка.
<Выражение для вычисления значения строки>
[NOT] LIKE
<Выражение для вычисления значения строки>
[ESCAPE <символ>]
Предикат LIKE сравнивает строку, указанную в первом выражении для вычисления значения строки, называемого проверяемым значением, с шаблоном, который определен во втором выражении для вычисления значения строки. В образце разрешается использовать два трафаретных символа:
Пример. Найти все корабли, имена классов которых заканчиваются на букву 'о':
Результатом выполнения запроса будет следующая таблица:
Пример. Найти все корабли, имена классов которых заканчиваются на букву 'о', но не на 'go':
Если искомая строка содержит трафаретный символ, то следует задать управляющий символ в предложении ESCAPE. Этот управляющий символ должен использоваться в шаблоне перед трафаретным символом, сообщая о том, что трафаретный символ следует трактовать как обычный символ. Например, если в некотором поле следует отыскать все значения, содержащие символ "_", то шаблон '%_%' приведет к тому, что будут возвращены все записи из таблицы. В данном случае шаблон следует записать следующим образом:
'%#_%' ESCAPE '#'
Для проверки значения на соответствие строке "25%" можно воспользоваться таким предикатом:
LIKE '25|%' ESCAPE '|'
Истинностное значение предиката LIKE присваивается в соответствии со следующими правилами:
Предикат
позволяет проверить отсутствие (наличие) значения в полях таблицы. Использование в этих случаях обычных предикатов сравнения может привести к неверным результатам, т.к. сравнение со значением NULL дает результат UNKNOWN (неизвестно).
Так, если требуется найти записи в таблице Pc, для которых в поле price отсутствует значение (поиск ошибок ввода), можно воспользоваться следующим оператором:
Рекомендуемые упражнения: 44.
Например, запрос
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 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 |
Предикаты (часть 2)
Предикат LIKE
Синтаксис LIKE::=<Выражение для вычисления значения строки>
[NOT] LIKE
<Выражение для вычисления значения строки>
[ESCAPE <символ>]
Предикат LIKE сравнивает строку, указанную в первом выражении для вычисления значения строки, называемого проверяемым значением, с шаблоном, который определен во втором выражении для вычисления значения строки. В образце разрешается использовать два трафаретных символа:
- Символ подчеркивания (_), который можно использовать вместо любого единичного символа в проверяемом значении.
- Символ процента (%), который заменяет набор любых символов (число символов в наборе может быть от 0 и более) в проверяемом значении.
Шаблон | Описание |
'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 |
SELECT * FROM Ships WHERE class NOT LIKE '%go' AND class LIKE '%o'; |
name | class | launched |
Musashi | Yamato | 1942 |
Yamato | Yamato | 1941 |
'%#_%' ESCAPE '#'
Для проверки значения на соответствие строке "25%" можно воспользоваться таким предикатом:
LIKE '25|%' ESCAPE '|'
Истинностное значение предиката LIKE присваивается в соответствии со следующими правилами:
- Если либо проверяемое значение, либо образец, либо управляющий символ равен NULL, истинностное значение равно UNKNOWN.
- В противном случае, если проверяемое значение и образец имеют нулевую длину, истинностное значение равно TRUE.
- В противном случае, если проверяемое значение соответствует шаблону, то предикат LIKE равен TRUE.
- Если не соблюдается ни одно из перечисленных выше условий, предикат LIKE равен FALSE.
Использование значения NULL в условиях поиска
Предикат
IS [NOT] NULL
позволяет проверить отсутствие (наличие) значения в полях таблицы. Использование в этих случаях обычных предикатов сравнения может привести к неверным результатам, т.к. сравнение со значением NULL дает результат UNKNOWN (неизвестно).Так, если требуется найти записи в таблице Pc, для которых в поле price отсутствует значение (поиск ошибок ввода), можно воспользоваться следующим оператором:
SELECT * FROM Pc WHERE price IS NULL; |
Рекомендуемые упражнения: 44.