Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных. Практический курс. В 2 частях. Ч.1. Объектно-реляционные базы данных на примере PostgreSQL 9.5. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
2 Мб
Скачать
Глава 4. Применение SQL 4.6. Модуль TABLEFUNC
’SELECT EXTRACT(YEAR FROM PurchaseDate) AS YEAR, extract(MONTH FROM PurchaseDate) as MONTH, COUNT(*) AS COUNT FROM TRANSACTION GROUP BY YEAR, MONTH’, ’SELECT GENERATE_SERIES(1, 12)’
) AS (
year int, jan int, feb int, mar int, apr int, may int, jun int,
jul int, aug int, sep int, oct int, nov int, dec int ) GROUP BY YEAR ORDER BY YEAR;
Результат запроса будет следующим:
Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1974 1 1989 1 2000 1 1 2001 1 2002 1 1
В данном запросе для извлечения года и номера месяца из значения даты столбца PurchaseDate используется функция EXTRACT (см. подраздел 5.6). Функция CROSSTAB принимает на вход в качестве первого параметра запрос, который должен содержать три столбца:
1. Идентификатор строки – столбец YEAR.
2. Категория – столбец MONTH.
3. Значение – столбец COUNT. Вторым параметром функции CROSSTAB выступает запрос, фор-
мирующий набор значений соответствующих номерам месяцев, для чего используется функция GENERATE_SERIES.
Первый запрос, в данном случае, определяет строки сводной
таблицы, а второй – столбцы.
После ключевого слова AS объявляются переменные, которые
будут соответствовать столбцам формируемой сводной таблицы, без чего функция CROSSTAB работать не будет.
91
4.7. Словарь метаданных Глава 4. Применение SQL
Если при вызове методов модуля TABLEFUNC возникнет ошибка с текстом «Функция с данными именем и типами аргументов не найдена» необходимо выполнить запрос для активации модуля:
CREATE EXTENSION TABLEFUNC;

4.7 Словарь метаданных

PostgreSQL поддерживает исчерпывающий словарь метадан­ных (information_schema), содержащий описание структур таблиц, последовательностей, представлений, индексов, ограничений, хра­нимых процедур и т. д. Он также содержит исходные тексты храни­мых процедур и триггерных функций.
Словарь метаданных отличается от функций psql, представ­ленных в таблице 1.2, возможностью их использования в приложе­ниях путем формирования запросов к СУБД.
Рассмотрим несколько примеров по работе со словарем мета­данных:
получение имени текущей базы данных:
SELECT * FROM
information_schema.information_schema_catalog_name;
получение списка ограничений:
SELECT * FROM information_schema.table_constraints;
получение списка внешних ключей:
SELECT * FROM
information_schema.referential_constraints;
получение списка хранимых процедур:
SELECT * FROM information_schema.routines;
получение списка последовательностей:
SELECT * FROM information_schema.sequences;
получение списка таблиц:
SELECT * FROM information_schema.tables;
получение списка триггеров:
SELECT * FROM information_schema.triggers;
92
Глава 4. Применение SQL 4.8. Контрольные вопросы
получение списка представлений:
SELECT * FROM information\_schema.views;
Документация по словарю метаданных PostgreSQL представ-
лена в [5].

4.8 Контрольные вопросы

1. Среда выполнения PL/SQL.
2. Неименованный блок PL/SQL.
3. Курсоры в PL/SQL.
4. Атрибуты курсора.
5. Неявные курсоры.
6. Курсоры-циклы.
7. Курсоры с параметрами.
8. Курсоры с обновлением.
9. Процедуры и функции PL/SQL.
10. Строковые и операторные триггеры.
11. Псевдозаписи триггера.
12. Триггерные предикаты.
93
5 ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ POSTGRESQL
В этой главе рассматриваются функции и операторы PostgreSQL, которые могут быть полезными при разработке реальных предметно-ориентированных баз данных, а также для их настройки и тестирования.

5.1 Функция ROW_NUMBER

Функция ROW_NUMBER генерирует порядковый номер строки за­проса.
Например:
SELECT ROW_NUMBER() OVER (ORDER BY Name) Num, Name FROM ARTIST;
В данном запросе производится нумерация извлекаемых строк. Также ROW_NUMBER может применяться для ограничения коли­чества обрабатываемых строк. Так, данный запрос извлекает пер­вые пять строк данных:
SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY Name) Num, Name
FROM ARTIST ) Artists WHERE Num <= 5;
Если при группировке необходимо нумеровать строки для
каждой группы в отдельности, следует использовать оператор
PARTITION BY.
Например:
SELECT ROW_NUMBER() OVER (PARTITION BY Nationality) Num,
Nationality, COUNT(*) FROM ARTIST GROUP BY Nationality;

5.2 Функция COALESCE

Функция COALESCE, как правило, применяется чаще всего.
Функция принимает несколько параметров:
COALESCE(value [, ...])
94
Глава 5. Дополнительные возможности 5.3. Числовые функции
Функция возвращает значение первого аргумента, значение которого не равно NULL. Данная функция вернет NULL только в том случае, если все аргументы имеют значение NULL.
Рассмотрим практический пример. Поле BirthDate в таблице
ARTIST может содержать значения NULL. При выполнении запроса
вида:
SELECT Name, BirthDate,
COALESCE(BirthDate, 0) Coalesce_BirthDate
FROM ARTIST;
значение NULL будет заменено на ноль. Обратите внимание на то, что в случае формирования значения при помощи функции ему назначается псевдоним. Результаты запроса будут иметь вид:
Name BirthDate Coalesce_BirthDate
Miro 1870 1870 Kandinsky 1854 1854 Frings 1700 1700 Klee 1900 1900 Moos <NULL> 0 Tobey <NULL> 0 Matisse <NULL> 0 Chagall <NULL> 0

5.3 Числовые функции

В PostgreSQL предусмотрен ряд встроенных функций для ра­боты с числами.
Функция ABS
Функция ABS(n) возвращает абсолютное значение числа n.
Например:
SELECT ABS(100) X1, ABS(-100) X2, ABS(-100.2) X3;
X1 X2 X3
100 100 100.2
95
5.3. Числовые функции Глава 5. Дополнительные возможности
Функция CEIL
Функция CEIL(n) возвращает наименьшее целое, большее или
равное переданному в качестве параметра числу n.
Например:
SELECT CEIL(100) X1, CEIL(-100) X2,
CEIL(100.2) X3, CEIL(-100.2) X4;
X1 X2 X3 X4
100 –100 101 100
Функция FLOOR
Функция FLOOR(n) возвращает наибольшее целое, меньшее или
равное переданному в качестве параметра числу n.
Например:
SELECT FLOOR(100.22) X1, FLOOR(-100.22) X2,
FLOOR(100.99) X3, FLOOR(100.01) X4;
X1 X2 X3 X4
100 –101 100 100
Функция TRUNC
Функция TRUNC(n[, m]) возвращает число n, усеченное до m знаков после десятичной точки. Параметр m может не указываться – в этом случае n усекается до целого.
SELECT TRUNC(100.25678) X1, TRUNC(-100.25678) X2, TRUNC(100.99) X3, TRUNC(100.25678, 2) X4;
X1 X2 X3 X4
100 –100 100 100.25
Функция ROUND
Функция ROUND(n[ ,m]) возвращает число n, округленное до
m знаков после десятичной точки по правилам математического
96
Глава 5. Дополнительные возможности 5.3. Числовые функции
округления. Параметр m может не указываться – в этом случае n округляется до целого.
SELECT ROUND(100.25678) X1, ROUND(100.5) X2, ROUND(100.99) X3, ROUND(100.25678, 2) X4;
X1 X2 X3 X4
100 101 101 100.26
Функция SIGN
Функция SIGN(n) определяет знак числа. Если n положитель­ное, то функция возвращает 1. Если отрицательное – возвращается –1. Если равно нулю, то возвращается 0.
Например:
SELECT SIGN(100.22) X1, SIGN(-100.22) X2, SIGN(0) X3;
X1 X2 X3
1 –1 0
Функция MOD
Функция MOD(n, m) возвращает остаток от деления n на m.
Например:
SELECT MOD(10, 3) X1, MOD(10, 2) X2, MOD(100, 98) X3;
X1 X2 X3
1 0 2
Функция POWER
Функция POWER(n, m) возводит число n в степень m. Степень может быть дробной и отрицательной, что существенно расширяет возможности данной функции.
SELECT POWER(10, 2) X1, POWER(100, 0.5) X2, POWER(1000, 0.33333333) X3, POWER(1000, -0.33333333) X4;
97
5.3. Числовые функции Глава 5. Дополнительные возможности
X1 X2 X3 X4
100 10 9.999...934 0.100...851
В некоторых случаях при вызове данной функции может воз-
никнуть исключительная ситуация.
Например:
SELECT POWER(-100, 0.5) X2;
В данном случае производится попытка вычисления квадрат­ного корня от отрицательного числа, что приведет к возникновению ошибки «Отрицательное число в дробной степени дает комплекс­ный результат».
Функция SQRT
Функция SQRT(n) возвращает квадратный корень от числа n.
Например:
SELECT SQRT(100) X;
X
10
Функции EXP и LN
Функция EXP(n) возводит e в степень n, а функция LN(n) вычис­ляет натуральный логарифм от n (при этом значение n должно быть больше нуля).
Пример:
SELECT EXP(1) X1, LN(1) X2, LN(EXP(2)) X3;
X1 X2 X3
2,71828182845905 0 2
Попытка передать функции LN отрицательное значение приво­дит к возникновению ошибки «Вычислить логарифм отрицательно­го числа нельзя».
98
Глава 5. Дополнительные возможности 5.4. Тригонометрические функции
Функция LOG
Функция LOG(n, m) производит вычисление логарифма m по
основанию n.
Пример:
SELECT LOG(2, 8) X1, LOG(10, 100) X2;
X1 X2
3 2

5.4 Тригонометрические функции

PostgreSQL поддерживает вычисление основных тригономет-
рических функций:
SIN(n) – синус n (где n – угол в радианах);
COS(n) – косинус n (где n – угол в радианах);
TAN(n) – тангенс n (где n – угол в радианах);
COT(n) – котангенс n (где n – угол в радианах).
Пример:
SELECT SIN(0) X1, COS(0) X2, TAN(0) X3, COT(0);
X1 X2 X3 X4
0 1 0 Infinity
5.5 Строковые и символьные функции
В этой части речь пойдет о функциях работы с текстовой ин­формацией, которые могут применяться в запросах и программном коде на языке PL/pgSQL.
Функция CONCAT
Функция CONCAT(str1, str2) выполняет конкатенацию строк
str1 и str2. Если один из аргументов равен NULL, то он воспринима-
ется как пустая строка. Если оба аргумента равны NULL, то функция возвращает NULL.
99
5.5. Работа со строками Глава 5. Дополнительные возможности
Пример:
SELECT CONCATУ(’ попа ’, была’ собака’) X1, CONCAT(’Test’, NULL) X2, CONCAT(NULL, ’Test’) X3, CONCAT(NULL, NULL) X4;
X1 X2 X3 X4
У попа была собака Test Test NULL
Для конкатенации строк PostgreSQL поддерживает специаль­ный оператор конкатенации ||, который работает аналогично функ­ции CONCAT, например:
SELECT CONCATУ(’ попа ’, была’ собака’) X1,У ’ попа ’ || была’ собака’ X2;
X1 X2
У попа была собака У попа была собака
Функция LOWER
Функция LOWER(str) преобразует все символы строки str в строчные.
Пример:
SELECT LOWER(’TeXt DATA’) X;
X
text data
Функция UPPER
Функция UPPER(str) преобразует все символы строки str в про­писные.
Пример:
SELECT UPPER(’TeXt DATA’) X;
100
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]