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

■ фраза GROUP BY для группировки оставшихся строк по значению столбца

product_type_id,

■ фраза HAVING для фильтрации групп строк, чтобы остались только те

группы, для которых средняя цена больше $13.

□ SELECT product_type_id, AVG(price)

FROM products

WHERE price < 15

GROUP BY product_type_id

HAVING AVG(PRICE) > 13

ORDER BY product_type_id;

PRODUCT_TYPE_ID AVG(PRICE)

2 14.55

3 13.24

13.49_

Сравните эти результаты с предыдущим примером. Следует заметить,

что была отброшена группа строк с produ ct_type_id , равным 4. Это связано

с тем, что для этой группы строк средняя цена оказалась меньше $13.

В заключительном примере к предыдущему запросу добавляется фраза

ORDER BY, чтобы упорядочить результаты по средней цене:

□ SELECT product_type_id, AVG(Price)

FROM products

WHERE price < 15

GROUP BY product_type_id

HAVING AVG(price) > 13

ORDER BY AVG(price);

PRODUCT_TYPE_ID AVG(PRICE)

3 13.24

13.49

2 14.45

Итоги

В этой главе вы узнали, что:

■ База данных Oracle имеет две основные группы функций: однострочные

функции и агрегатные функции.

■ Однострочные функции в каждый момент времени оперируют с одной

строкой и для каждой входной строки возвращают одну выходную

строку. Есть пять основных типов однострочных функций: символьные

функции, числовые функции, функции конвертирования, функции

для работы с датами и функции с регулярными выражениями.

134 Глава 4

■ Агрегатные функции в каждый момент времени оперируют с несколькими

строками и возвращают для них одну выходную строку.

■ Блоки строк могут быть сгруппированы при помощи фразы

GROUP BY.

■ Группы строк можно фильтровать при помощи фразы HAVING.

В следующей главе вы узнаете о датах и времени.

Глава 5

Хранение и обработка

дат и времени

Простые примеры записи и выборки дат

По умолчанию можно представлять в базе данных дату в формате DD-M0NYYYY,

где:

■ DD - двузначный номер дня, типа 05,

■ M0N - сокращенное до трех букв название месяца, типа FEB (февраль),

■ YYYY - полный (состоящий из четырех цифр) номер года, типа 1968.

Рассмотрим пример с добавлением строки в таблицу customers, в которой

содержится столбец типа DATE, названный dob (date o f birth - дата рождения).

Следующий оператор INSERT добавляет строку в таблицу customers,

устанавливая столбец dob на 05-FEB-1968:

□ INSERT INTO customers (

customer_id, first_name, last_name, dob, phone

) VALUES (

6, 'Fred’, ‘Brown’, ’05-FEB-1968’, ‘800-555-1215’

);

Вы можете также использовать ключевое слово DATE для передачи в базу

данных литерала типа даты. При этом дата должна соответствовать

стандарту ANSI для формата даты - YYYY-MM-DD, где:

■ YYYY - четырехзначное значение года,

■ ММ - двузначный номер месяца (от 1 до 12),

■ DD - двузначный номер дня.

Совет Использование формата ANSI для дат имеетто преимущество, что оператор INSERT

потенциально может быть выполнен и для других баз данных, а не только для Oracle.

Например, для задания даты «25 октября 1972 г.» можно использовать

DATE'1972-10-25'. Следующий оператор INSERT добавляет строку в таблицу

customers, посылая в столбец dob значение DATE '1972-10-25':

□ INSERT INTO customers (

customer_id, first_n am e, last_name, dob, phone

) VALUES (

7, ‘ S te v e ’ , ‘ P u rp le ’ , DATE ‘ 1972-10-25’ , ‘ 800-555-1215’

Хранение и обработка дат и времени 137

По умолчанию база данных выводит даты в формате DD-M0N-YY, где

YY - две последние цифры года. Следующий запрос осуществляет выборку

строк из таблицы customers, а затем выполняет оператор ROLLBACK,

чтобы отменить результаты выполнения операторов INSERT; обратите

внимание, что запрос возвращает в столбце dob две последние цифры

года:

□ SELECT *

FROM customers;

.ID FIRST_NAME LAST_NAME DOB PHONE

1 John Brown 01-JAN-65 800-555-1211

2 Cynthia Green 05-FEB-68 800-555-1212

3 Steve White 16-MAR-71 800-555-1213

4 Gail Black 800-555-1214

5 Doreen Blue 20-MAY-70

6 Fred Brown 05-FEB-68 800-555-1215

7 Steve Purple 25-0CT-72 800-555-1215

ROLLBACK;

Для покупателя № 4 dob имеет значение NULL; поэтому в предыдущей

распечатке на его месте выведен пробел.

Примечание Прежде чем выполнить показанные выше два оператора INSERT с помощью

SQL*Plus, следует убедиться, что отменены сделанные ранее изменения, выполнив оператор

ROLLBACK. Таким образом, база данных сохраняется в начальном состоянии, а выходные данные

ваших запросов будут соответствовать результатам из этой главы.

В этом разделе вы увидели несколько простых примеров использования

дат с применением форматов по умолчанию. В следующем разделе вы

узнаете, как создавать собственные форматы даты, и увидите, как конвертировать

дату-время в другой тип базы данных.