
- •Лекция 4. Язык sql. Однострочные функции.
- •Функции
- •Примеры использования числовых функций
- •Символьные функции
- •Примеры использования функций для работы с датами
- •Модели формата даты и времени
- •Модели формата числа
- •Суффиксы, префиксы и другие элементы, влияющие на формат вывода
- •Примеры использования функций преобразования и моделей форматов
- •Пример использования to_char для преобразования чисел:
- •Вложенные однострочные функции
Курс лекций “Базы данных и СУБД” Ульянов В.С.
Лекция 4. Язык sql. Однострочные функции.
Функции
Функция аналогична оператору в том, что она манипулирует элементами данных и возвращает результат. Функции отличаются от операторов форматом, в котором они задаются со своими аргументами. Этот формат позволяет функциям оперировать на нуле, одном, двух или большем количестве аргументов:
function(argument, argument, ...)
Функции могут использоваться для выполнения расчетов с данными, преобразования типов данных, изменения форматов вывода дат и т.д. Функции SQL бывают двух основных типов:
однострочные (или скалярные) функции
групповые (или агрегатные) функции
Эти функции различаются количеством строк, на которых они оперируют. Однострочная функция возвращает единственное значение для каждой строки таблицы, в то время как групповая функция возвращает единственное значение для целой группы строк. Групповые функции будут рассмотрены в следующих лекциях.
Однострочные функции
Однострочные функции могут появляться в предложениях SELECT, WHERE и ORDER BY команды SELECT. В качестве аргументов они могут принимать константы, заданные пользователем, значения переменных, имена столбцов таблицы БД или выражения, составленные с помощью операторов и функций. Все однострочные функции, как правило, разбивают на несколько групп по типам данных их аргументов и возвращаемых значений. Выделяют:
числовые функции,
символьные функции,
функции для работы с датами,
функции преобразования.
Числовые функции
Числовые функции принимают в качестве аргументов и возвращают в качестве результата числовые значения. В следующей таблице приведены некоторые из числовых функций:
Функция |
Описание |
ABS(n) |
Возвращает абсолютную величину n. |
MOD(m, n) |
Возвращает остаток от деления m на n. Если n=0, возвращает m. |
POWER(m, n) |
Возвращает m в степени n. Основание m и степень n могут быть любыми числами, но если m отрицательно, то n должно быть целым. |
ROUND(m[, n]) |
Возвращает m, округленное до n позиций после десятичной точки; если n опущено, то до целого, если n отрицательно, округляется целая часть числа. n должно быть целым. |
SQRT (n) |
Возвращает квадратный корень из n. n должно быть неотрицательным. |
TRUNC(m[, n]) |
Возвращает m, усеченное до n цифр после десятичной точки. Если n опущено, усечение выполняется до целого. n может быть отрицательным, что приводит к усечению (обнулению) n цифр слева от десятичной точки. |
Примеры использования числовых функций
В примерах используется фиктивная таблица СУБД Oracle DUAL. Эта таблица принадлежит пользователю SYS и доступна всем пользователям. Она содержит один столбец с именем DUMMY и одну строку со значением X. Таблица DUAL полезна в случае, если требуется получить результат действия какой-либо однострочной функции, вызванной с аргументами, не связанными с данными БД.
Пример: Найти квадратный корень из 10.
SELECT SQRT(10)
FROM s_dept;
Результат:
SQRT(10)
---------
3,1622777
3,1622777
3,1622777
3,1622777
3,1622777
3,1622777
3,1622777
…
12 rows selected.
-- Мы получили 12 значений, так как в таблице s_dept 12 строк. Но так как -- вычисляемое значение никак не связано с данными таблицами, то все эти 12 -- значений одинаковы. Чтобы избежать подобных излишеств, и предназначена -- таблица DUAL:
SELECT SQRT(10)
FROM dual;
Результат:
SQRT(10)
---------
3,1622777
Пример использования ABS: Найти модуль чисел –13, 0 и 13.
SELECT ABS(-13), ABS(0), ABS(13) FROM dual;
Результат:
ABS(-13) ABS(0) ABS(13)
-------- -------- --------
13 0 13
Пример использования MOD: Найти остаток от деления 18763298 на 813.
SELECT MOD(18763298, 813) FROM dual;
Результат:
MOD(18763298,813)
-----------------
71
Пример использования ROUND: Округление числа 268,57 с различными значениями аргумента n.
SELECT ROUND(268.57, 5), ROUND(268.57, 1), ROUND(268.57), ROUND(268.57, -2), ROUND(268.57, -3) FROM dual;
Результат:
ROUND(268.57,5) ROUND(268.57,1) ROUND(268.57) ROUND(268.57,-2) ROUND(268.57,-3)
-------------- -------------- ------------ --------------- ---------------
268,57 268,6 269 300 0
Пример использования TRUNC: Усечение числа 268,57 с различными значениями аргумента n.
SELECT TRUNC(268.57, 5), TRUNC(268.57, 1), TRUNC(268.57), TRUNC(268.57, -2), TRUNC(268.57, -3) FROM dual;
Результат:
TRUNC(268.57,5) TRUNC(268.57,1) TRUNC(268.57) TRUNC(268.57,-2) TRUNC(268.57,-3)
--------------- --------------- ------------- ---------------- ----------------
268,57 268,5 268 200 0
Пример использования однострочной функции в предложении WHERE: Вывести фамилии и зарплаты служащих для всех служащих, у кого зарплата делится нацело на 100.
SELECT last_name, salary
FROM s_emp
WHERE MOD(salary,100)=0;
Результат:
LAST_NAME SALARY
---------------- ---------
Velasquez 2500
Nagayama 1400
Urguhart 1200
Biri 1100
Catchpole 1300
Magee 1400
Maduro 1400
Nozaki 1200
Chang 800
Schwartz 1100
10 rows selected.
Пример использования однострочной функции в предложении ORDER BY: Вывести фамилии и зарплаты служащих для всех служащих. Результат отсортировать по остатку от деления зарплаты на 100.
SELECT last_name, salary
FROM s_emp
ORDER BY MOD(salary,100);
Результат:
LAST_NAME SALARY
-------------- ---------
Velasquez 2500
Nagayama 1400
Biri 1100
Magee 1400
Maduro 1400
Chang 800
Schwartz 1100
Nozaki 1200
Catchpole 1300
Urguhart 1200
Havel 1307
Sedeghi 1515
Nguyen 1525
Smith 940
Ngao 1450
Menchu 1250
Quick-To-See 1450
Markarian 850
Newman 750
Dumas 1450
Ropeburn 1550
…
25 rows selected.