варе
23
38909.04 70567.9 91826.98
14309.04 13367.9 16826.98
24909.04 15467.9 20626.98
120344.7
15664.7
23844.7
258 Глава 7
ID MON AMOUNT
1 JAN 38909.04
2 FEB 70567.9
1 MAR 91826.98
1 APR 120344.7
2 JAN 14309.04
2 FEB 13367.9
2 APR 15664.7
2 MAR 16826.98
3 JAN 24909.04
3 MAR 20626.98
3 FEB 15467.9
3 APR 23844.7
Обратите внимание, что запрос разворачивает повёрнутые данные.
Например, суммарные месячные продажи, которые появляются в горизонтальных
строках pivot_sales_data, показаны в вертикальном столбце
AMOUNT.
Подсказка Подумайте об использовании UNPIV0T, если у вас есть запрос, который возвращает
строки со многими столбцами и вы хотели бы просмотреть эти столбцы как строки.
Итоги
В этой главе вы узнали, что:
■ Операторы для работы с множествами (UNION ALL, UNION, INTERSECT и
MINUS) позволяют объединять строки, полученные двумя или большим
числом запросов.
■ Функция TRANSLATE(x, исходная_строка, целевая_строка) конвертирует
символы одной строки в символы другой строки.
■ Функция 0ЕС00Е(значение, строка_поиска, результат, значение_по_
умолчанию) используется для сравнения значения с параметром стро-
ка_поиска. Если эти значения совпадают, DEC0DE() возвращает результат;
в противном случае возвращается значение_по_умолчанию.
С помощью функции DEC0DE() мы можем в SQL выполнять логику ifthen-
else (если-то-иначе).
■ Выражение CASE аналогично DEC0DEC). Рекомендуется использовать
CASE, поскольку он отвечает требованиям ANSI.
■ Можно выполнять запросы к данным, организованным иерархическим
образом.
■ Ключевое слово ROLLUP расширяет фразу GROUP BY, чтобы она возвращала
строки, содержащие подытоги для каждой группы, а также
строку с общей суммой по всем группам.
■ Ключевое слово CUBE расширяет фразу GROUP BY, чтобы она возвращала
строки, содержащие подытоги для каждой комбинации столбцов,
Расширенные запросы 259
включенных во фразу CUBE, а также завершающую строку с общим
итогом.
■ База данных содержит многие встроенные аналитические функции,
позволяющие выполнять такие сложные вычисления, как определение
типа товара, который лучше других продавался в каждом из месяцев,
лучшего продавца и т. п.
■ Фраза MODEL используется для выполнения вычислений, затрагивающих
несколько строк одновременно, и позволяет обращаться к
столбцам строки как к ячейкам массива, что дает возможность выполнять
вычисления примерно так, как это происходит в электронных
таблицах.
■ Выражения базы данных Oracle l l g PIVOT и UNPIV0T полезны при просмотре
общих тенденций в больших объёмах данных.
В следующей главе вы узнаете, как менять содержимое таблицы.
Глава 8
Изменение
|ержимого таблиц
Добавление строк с помощью оператора INSERT
Оператор INSERT используется для добавления строк в таблицу. В операторе
INSERT может быть указана следующая информация:
■ Таблица, в которую будет добавлена строка
■ Список столбцов, для которых нужно представить значения столб-
цов
■ Список значений для сохранения в указанных столбцах
Обычно при добавлении строки указывают значения для столбца (или
столбцов) первичного ключа и всех остальных столбцов, которые были
определены как NOT NULL. Можно не указывать значения для столбцов, которые
содержат пустые значения (NULL); по умолчанию для этих столбцов
будет установлено значение NULL.
Можно узнать, какие столбцы были определены как NOT NULL, используя
команду SQL*Plus DESCRIBE. Следующий пример описывает таблицу
customers:
□ DESCRIBE customers
Name N u l l ? Type
CUSTOMER_ID NOT NULL NUMBER(38)
FIRST_NAME NOT NULL VARCHAR2(10)
LAST_NAME NOT NULL VARCHAR2(10)
DOB DATE
PHONE VARCHAR2(12)
Столбцы c u s t om e r _ id , f i r s t _ n am e и la s t_ n ame являются столбцами типа
NOT NULL. Э т о означает, что нужно обязательно указать значения для этих
столбцов. Столбцы dob и phone не требуют обязательного ввода значения,
и при добавлении строки их значения можно опустить, в результате чего
они будут установлены в NULL.
Следующий оператор INSERT добавляет строки в таблицу customers.
Порядок значений во фразе VALUES совпадает с порядком, в котором столбцы
перечисляются в списке столбцов. Оператор состоит из трех частей,
названия таблицы, списка столбцов и списка добавляемых значений.
□ INSERT INTO c u s tom e r s (
c u s t om e r _ id , f i r s t _ n am e , la s t_ n ame , dob, phone
) VALUES (
Изменение содержимого таблиц 263
6, ‘ F r e d ’ , ‘ Brown’ , ‘ 0 1 - JA N - 1 9 7 0 ’ , ’ 8 0 0 -5 5 5 - 1 2 1 5 ’
);
1 row c r e a t e d .
SQI?Plus отвечает, что была создана одна строка. В этом можно убедиться,