Выбрать главу

варе

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 отвечает, что была создана одна строка. В этом можно убедиться,