Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Базы данных. Практический курс. В 2 частях. Ч.1. Объектно-реляционные базы данных на примере PostgreSQL 9.5. Учебное пособие.pdf
X
- •Введение
- •Контрольные вопросы
- •Создание базы данных
- •Создание таблиц
- •Создание последовательностей
- •Ввод данных
- •Оператор CREATE TABLE
- •Оператор ALTER TABLE
- •Операторы DROP TABLE и DROP
- •Создание индексов
- •Контрольные вопросы
- •Средства определения данных языка SQL
- •Средства запроса данных языка SQL
- •Чтение заданных столбцов из одиночной таблицы
- •Чтение заданных строк из одиночной таблицы
- •Чтение заданных строк и столбцов из одиночной таблицы
- •Сортировка результатов
- •Агрегатные функции и группировка
- •Оконные функции
- •Чтение данных из нескольких таблиц с применением вложенных запросов
- •Чтение данных из нескольких таблиц с помощью операции соединения
- •Объединения
- •Средства модификации данных языка SQL
- •Вставка данных, оператор INSERT
- •Изменение данных, оператор UPDATE
- •Удаление данных, оператор DELETE
- •Транзакции
- •SQL-представления
- •Использование представлений для скрытия столбцов и строк
- •Использование представлений для отображения вычисляемых столбцов
- •Использование представлений для скрытия сложного синтаксиса
- •SQL-запросы в прикладных программах
- •Хранимые процедуры
- •Триггеры
- •Использование триггеров для проверки допустимости вводимых данных
- •Триггер, обновляющий представление
- •Триггер, обеспечивающий ссылочную целостность
- •Модуль TABLEFUNC
- •Словарь метаданных
- •Контрольные вопросы
- •Функция ROW_NUMBER
- •Функция COALESCE
- •Числовые функции
- •Тригонометрические функции
- •Контрольные вопросы
- •Заключение
- •Библиографический список

Глава 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
