Создание вычисляемых столбцов (операция расширения)
Вычисляемый столбец – это фиктивный столбец, данные которого не хранятся в базе данных, а вычисляются на основе данных других столбцов. Вычисляемому столбцу в запросе, как правило, присваивается какое-либо имя – псевдоним. В тексте запроса вычисляемый столбец выглядит так:
SELECT … выражение_для_вычисления [AS] псевдоним …
Вообще, псевдоним можно присвоить и любому столбцу, указанному в списке для отбора, но для вычисляемых столбцов это особенно актуально, поскольку в случае отсутствия псевдонима СУБД формирует имя вычисляемого столбца автоматически, обычно такие имена бывают длинными и неудобочитаемыми.
Например, пусть требуется выводить возраст студента вместо его даты рождения. Для этого необходимо создать вычисляемый столбец на основе выражения, которое вычисляет возраст, используя дату рождения и текущую дату. Приводимый запрос будет работать только в СУБД Oracle, поскольку использует ее функцию sysdate для получения текущей даты. Разность двух дат исчисляется в днях, которые затем переводятся в возраст в годах:
select cod_st, name_st, trunc((sysdate-born)/365.25) age from students
В выражениях для вычисляемых столбцов могут использоваться:
· имена столбцов
· константы
· операции
· функции
· круглые скобки.
Числовые и текстовые константы записываются обычным способом, например, запрос:
SELECT ‘студент’ FROM students
столько раз выведет слово студент, сколько строк имеется в таблице students (разумеется, данный запрос не имеет никакого практического смысла). Можно заметить, кстати, что в Oracle фраза FROM в запросах является обязательной, поэтому в любой базе данных автоматически создается таблица с именем dual, состоящая из одной строки и одного столбца, которая может использоваться в запросах, выводящих константы или системные функции. Например, запрос:
SELECT user FROM dual
возвратит имя пользователя, который открыл тот сеанс связи с сервером, в котором выполняется данный запрос.
Набор арифметических операций является стандартным (в стандарте имеется еще операция возведения в степень **, которая в большинстве СУБД не реализована). Для текстовых данных часто используется операции конкатенации, которая в стандарте и большинстве СУБД обозначается двумя вертикальными линиями (||) вместо привычного знака «+», который также используется в некоторых СУБД (Access, Microsoft SQL Server).
Например, выведем фамилию и телефон студентов в виде одного текстового столбца для тех студентов, телефон которых известен:
SELECT name_st ||’ тел. ‘|| phone AS name_phone FROM students
WHERE phone IS NOT NULL
В выражениях для вычисляемых столбцов могут использоваться также скалярные функции. Стандарт SQL 2003 содержит довольно большой набор функций, которые делятся на скалярные и агрегатные. Агрегатные функции будут подробно рассмотрены далее. Сейчас кратко коснемся скалярных функций. Основная проблема их использования в SQL-запросах состоит в том, что, к сожалению, различные СУБД поддерживают различный набор функций, который часто не совпадает со стандартным набором, определенным в SQL 2003. Поэтому запросы, в которых содержится обращение к функциям, при переносе их на другую СУБД, скорее всего, потребуют изменения текста, что несколько ограничивает применение функций.
Все скалярные функции можно разбить на следующие группы (в скобках приводятся примеры функций, которые поддерживаются в Oracle):
· текстовые функции; используются для управления текстовыми строками, например, для удаления ведущих и завершающих пробелов (функции LTRIM RTRIM), получения фрагмента строки (функция SUBSTR) или преобразования букв в верхний или нижний регистр (функции UPPER и LOWER)
· числовые функции; используются для выполнения математических операций над числовыми данными, например, для вычисления абсолютных значений (функция ABS) и выполнения алгебраических вычислений (тригонометрические функции, логарифмы, остаток от деления – функция MOD, округление и усечение – функции ROUND и TRUNC)
· функции даты и времени; используются для управления значениями даты и времени и для выборки отдельных частей этих значений, например, для возвращения года, месяца, дня или дня недели для заданной даты
· функции преобразования типов данных, например, преобразовать дату или число в строку текста и наоборот (в стандарте CHAR(x), DATE(x) и т.д., в Oracle аналогичные функции TO_CHAR(x, строка_формата), TO_DATE(x, строка_формата) и т.д.)
· системные функции, например, уже упоминавшиеся имя пользователя (функция USER) или системная дата (функция SYSDATE).
Дата добавления: 2015-08-26; просмотров: 1308;