Материал: Graber_Martin_-_SQL_dlya_prostykh_smertnykh_-_2014

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Функции

Первое из этих предложений определяет способ печати NULL-значений в виде '_______'. В соответствии со вторым предложением заголовок, указанный в ка­ вычках, появится в конце каждой страницы. Третье предложение исключает второй и третий столбцы таблицы из выходных данных предыдущего запроса. Последний вариант команды FORMAT можно применить для выбора конкретных столбцов таблицы с целью их использования в предложении ORDER ВУ для упорядочения выходных данных. Поскольку особые функции команды FORMAT выполняются

по-разному, полное описание ее возможных применений выходит за границы дан­

ной книги.

Существуют другие команды, которые с успехом могут пополнить список таких функций. Команда SET похожа на команду FORMAT. Она может служить альтернати­ вой команде FORМAT либо быть командой, область действия которой распространя­

ется на все запросы текущего сеанса пользователя, а не только на один запрос.

Некоторые реализации начинают команды с ключевого слова COLUMN, а не с

ключевого слова FORMAT. Например:

COLUMN odate FORMAT dd-mon-yy;

Это предложение задает формат представления поля даты 1O-Oct-90 для вывода ре­

зультатов запросов.

Предложение COMPUTE, упомянутое ранее, включается в запрос таким образом:

SELECT odate, amt FROM Orders

WHERE snum = 1001 COMPUTE SUM (amt);

В соответствии с этим запросом будут получены все заказы для Peel с указанием даты (odate) и количества (ашt), а затем - итог по полю amt. Некоторые реализации осуществляют подведение итогов, используя COMPUTE как команду. В такой реали­

зации прежде всего определяется прерывание:

BREAK ON odate;

По этой команде происходит разделение результата сформулированного выше за­ проса на группы таким образом, что в пределах одной группы значение поля odate ос­

тается постоянным. Теперь можно ввести следующее предложение:

COMPUTE SUM OF amt ON odate;

Столбец, указанный после ключевого слова ON, должен быть предварительно ис­

пользован в команде BREAK.

Функции

В АNSI-стандарте SQL можно применять функции агрегирования к столбцам и ис­ пользовать их значения в скалярных выражениях, например: comm * 100. Существует и множество других полезных функций, применимых на практике. Функции SQL, отли­ чающиеся от стандартных функций агрегирования, можно применять в предложении

329

Приложение С. Некоторые общие отклонения от стандарта SQL

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

зывают именно тот тип значений, который разрешено применять в предложении

SELECT, если не оговорено нечто другое.

Математические функции

Данные функции применяются к числовым значениям.

Функция

Назначение

ABS(X)

Абсолютное значение Х (преобразует отрицательное или

 

положительное в положительное)

CEIL(X)

Х имеет десятичное значение, которое следует

 

округлить сверху.

FLOOR(X)

Х имеет десятичное значение, которое следует

 

округлить снизу.

GREATEST(X,Y)

Возвращает большее из двух значений.

LEAST(X,Y)

Возвращает меньшее из двух значений.

MOD(X,Y)

Возвращает остаток от деления Х на У.

POWER(X,Y)

Возвращает Х, возведенный в степень У.

ROUND(X,Y)

Округляет Х до У десятичных разрядов. Если У не

 

указан, то округляет до целого.

SIGN(X)

Возвращает минус, если Х < О, и плюс - в противном

 

случае.

SQRT(X)

Возвращает квадратный корень из Х.

Символьные функции

Эти функции могут применяться к строкам текста или столбцам, для которых определен тип данных ТЕХТ, к заданным явно строкам текста или их комбинациям.

Функция

Назначение

LEFT( <строка>,Х) Возвращает Х самых левых символов из строки.

RlGHT(<cmpoкa>,X) Возвращает Х самых правых символов

из строки.

ASCil(<cmpoкa>) Возвращает ASCII-кoд, который представляет

строку в памяти компьютера.

330

Функции

CHR(<АSСП-код>) Возвращает символы, соответствующие

ASCII-кoдy.

VALUE (<строка>) Возвращает математическое значение строки. Предполагается, что строка имеет тип

CHAR или VARCHAR, но состоит

из чисел. VALUE('З') выдает

число 3 типа INTEGER.

UPPER (<строка>) Все символы в строке переводятся в "большое" (заглавное, строчное) написание.

LOWER (<строка>) Все символы в строке переводятся в "малое" (прописное) написание.

INIТCAP (<строка>) Все символы в строке переводятся в написание "в одном регистре". В некоторых реализациях функция называется PROPER.

LENGTH (<строка>) Возвращает количество символов в строке.

<строка>ll<строка> Комбинирует две строки в выходных данных, таким образом, что первая из них

непосредственно предшествует

второй. (11 называется оператором

конкатенации.)

LPAD (<строка>,Х,'*') Заполняет строку слева символом "*" или любым другим символом, указанным в

кавычках, для того, длина строки стала

равной Х.

RPAD (<строка>,Х,'*') Совпадает с LPAD, за исключением того, что

заполнение строки осуществляется справа.

SUBSTR (<строка>,Х,У) Извлекает У символов из строки, начиная с позиции Х.

331

Приложение С. Некоторые общие отклонения от стандарта SQL

Функции даты и вре.Iнени

Эти функции воздействуют на значения "дата" и "время".

Функция

Назначение

DАУ(<дата>)

Извлекает день месяца из даты. Аналогичные функции

 

существуют для MONTH (месяца), YEAR (года),

 

HOUR (часа), SECOND (секунды) и т.д.

WEEKDAY

Определяет название дня недели по дате.

(<дата>)

 

Прочие

Эти функции применимы к любому типу данных.

Функция Назначение

NVL(<столбец>,)

NVL (NULL Value) подставляет <значение>,

<значение>

определяемое вторым аргументом, вместо каждого

 

NULL-значения, обнаруженного в указанном (первым

 

аргументом) столбце. Если в указанном столбце

 

NULL-значений не обнаружено, то никаких изменений

 

не происходит.

Операции INTERSECT (пересечение) и MINUS (разность)

Команда UNION связывает два запроса, объединяя результаты выполнения каждо­ го из них в один. Два других способа комбинирования результатов отдельных запро­ сов базируются на использовании операций INTERSECT (пересечение) и MINUS (разность). Результат выполнения операции INТERSEPT - строки, которые содер­ жатся в результате выполнения каждого из участвующих в операции запросов. Резуль­ тат выполнения операции MINUS - только те строки, которые получаются в

результате выполнения одного из участвующих в операции запросов, но не содержат­

ся в другом.

Следовательно, следующие два запроса:

SELECT •

FROM Salespeople

WHERE city = 'London·

332

Автоматические OUTER JOINS (внешние соединения)

INTERSECT SELECT *

FROM Salespeople

WHERE 'London' IN (SELECT city

FROM Customers

WHERE Customers.snum = Salespeople.snum);

выводят строки, выбираемые каждым их этих запросов и содержащие сведения о тех продавцах в Лондоне, которые имеют, по крайней мере, одного покупателя в своем

городе.

С другой стороны:

SELECT *

FROM Salespeople WHERE city='London' MINUS

SELECT *

FROM Salespeople

WHERE 'London' IN (SELECT city

FROM Customers

WHERE Customers.snum = Salespeople.snum);

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

MINUS называют DEFFERENCE.

Автоматические OUTER JOINS (внешние соединения)

В главе 14 было показано, как выполнить операцию внешнего соединения, исполь­ зуя команду UNION. Некоторые программы, осуществляющие обработку баз данных, предусматривают непосредственные способы выполнения внешнего соединения. В отдельных реализациях указывается бинарная операция "плюс" (+) после предиката,

которая говорит о том, что следует рассматривать строки, удовлетворяющие условию,

и строки, условию не удовлетворяющие. Условие предиката будет содержать поле, ис­ пользуемое в обеих таблицах, а NULL-значения включаются, если соответствие не

333

Источник: https://studfile.net/preview/16418473/