/
Text
Введение в Oracled/: SQL
Руководство слушателя • Том 1
40049RU11
Production 1.1
April 2002
D34318
ORACLE
Authors
Copyright © Oracle Corporation, 2000, 2001. All rights reserved.
Nancy Greenberg
Priya Nathan
Technical Contributors
and Reviewers
Josephine Turner
Anna Atkinson
Don Bates
Marco Berbeek
Andrew Brannigan
Michael Gerlach
Sharon Gray
Rosita Hanoman
Mozhe Jalali
Sarah Jones
Charbel Khoun
Christopher Lawless
Diana Lorentz
Nina Minchen
Cuong Nguyen
Daphne Nougier
Patrick Odell
Laura Pezzini
Stacey Procter
Maribel Renau
Bryan Roberts
Sunshine Salmon
Casa Sharif
Bernard Soleillant
Ruediger StefTan
Karla Villasenor
Andree Wheeley
Lachlan Williams
Oleg Ivanov
This documentation contains proprietary information of Oracle Corporation It is
provided under a license agreement containing restrictions on use and disclosure and
is also protected by copyright law Reverse engineering of the software is prohibited
If this documentation is delivered to a U S. Government Agency of the Department of
Defense, then it is delivered with Restricted Rights and the following legend is
applicable.
Restricted Rights Legend
Use, duplication or disclosure by the Government is subject to restrictions for
commercial computer software and shall be deemed to be Restricted Rights software
under Federal law, as set forth in subparagraph (c)( 1 )(ii) of DFARS 252.227-7013,
Rights in Technical Data and Computer Software (October 1988)
This material or any portion of it may not be copied in any form or by any means
without the express prior written permission of Oracle Corporation Any other copying
is a violation of copyright law and may result in civil and/or criminal penalties
If this documentation is delivered to a U S. Government Agency not within the
Department of Defense, then it Is delivered with “Restricted Rights/ as defined in
FAR 52.227-14, Rights in Data-General, including Alternate III (June 1987)
The information In this document is subject to change without notice If you find any
problems in the documentation, please report them in writing to Education Products,
Oracle Corporation, 500 Oracle Parkway. Box SB-6, Redwood Shores, CA 94065
Oracle Corporation does not warrant that this document is error-free,
Oracle and all references to Oracle products are trademarks or registered trademarks
of Oracle Corporation.
All other products or company names are used for identification purposes only, and
may be trademarks of their respective owners
Перевод выполнен* Догадкин E., НОУ "УКЦ Форс". Москва, 2002
Publisher
Sheryl Domingue
Содержание
Предисловие
Схема обучения
Введение
Цели урока 1-2
Oracle9i 1-3
Oracle9/ Application Server 1-5
База данных Огас1е9/ 1-6
Oracle9/: система управления объектно-реляционнои базой данных 1-8
Интернет-платформа Oracle 1-9
Этапы разработки системы 1-10
Хранение данных на различных носителях 1-12
Концепция реляционной базы данных 1-13
Определение реляционной базы данных 1-14
Модели данных 1-15
Модель “сущность-связь" (ER-модель) 1-16
Система обозначений в ER-моделях 1-17
Установление связей между таблицами 1-19
Терминология реляционной базы данных I-20
Свойства реляционной базы данных 1-21
Связь с RDBMS с помощью SQL I-22
Система управления реляционной базой данных (RDBMS) I-23
Команды SQL I-24
Таблицы, используемые в курсе I-25
Итоги I-26
1 Базовые команды выбора языка SQL
Цели урока 1-2
Возможности команды select языка SQL 1-3
Базовая команда SELECT 1-4
• • •
III
Выбор всех столбцов 1-5
Выбор конкретных столбцов 1-6
Написание команд SQL 1-7
Заголовки столбцов по умолчанию 1-8
Арифметические выражения 1-9
Использование арифметических операторов 1-10
Приоритеты операторов 1-11
Приоритеты скобок 1-13
Неопределенное значение (null) 1-14
Неопределенные значения в арифметических выражениях 1-15
Псевдоним (алиас) столбца 1-16
Использование псевдонимов столбцов 1-17
Оператор конкатенации 1-18
Использование оператора конкатенации 1-19
Строка символов - литерал 1-20
Использование символьных литералов 1-21
Дублирование строк 1-22
Устранение строк-дубликатов 1-23
Взаимодействие SQL и /SQL*Plus 1-24
Сравнение команд SQL и /SQL*Plus 1-25
Обзор iSQL*Plus 1-26
Вызов iSQL*Plus 1-27
Среда iSQL*Plus 1-28
Вывод структуры таблицы 1-29
Использование скрипт-фаилов 1-31
Итоги 1 -34
Обзор практического занятия 1 1-35
IV
2 Ограничение и сортировка выходных данных
Цели урока 2-2
Ограничение количества выбираемых строк путем отбора 2-3
Ограничение количества выбираемых строк 2-4
Использование предложения where 2-5
Символьные строки и даты 2-6
Операторы сравнения 2-7
Использование условий сравнения 2-8
Другие условия сравнения 2-9
Использование условия BETWEEN 2-10
Использование условия in 2-11
Использование условия like 2-12
Использование условия NULL 2-14
Логические условия 2-15
Использование оператора and 2-16
Использование оператора or 2-17
Использование оператора NOT 2-18
Приоритеты операторов 2-19
Предложение order by 2-22
Сортировка в порядке убывания 2-23
Сортировка по псевдониму столбца 2-24
Сортировка по нескольким столбцам 2-25
Итоги 2-26
Обзор практического занятия 2 2-27
3 Однострочные функции
Цели урока 3-2
Функции SQL 3-3
Два типа функций SQL 3-4
Однострочные функции 3-5
Символьные функции 3-7
Функции преобразования регистра символов 3-9
Использование функций преобразования регистра символов 3-10
Функции манипулирования символами 3-11
Использование функций манипулирования символами 3-12
Числовые функции 3-13
Использование функции round 3-14
Использование функции trunc 3-15
Использование функции mod 3-16
Работа с датами 3-17
Арифметические операции с датами 3-19
Использование арифметических операторов с датами 3-20
Функции для работы с датами 3-21
Использование функций для работы с датами 3-22
Обзор практического занятия 3, часть 1 3-24
Функции преобразования 3-25
Неявное преобразование типов данных 3-26
Явное преобразование типов данных 3-28
Использование функции to_char с датами Dates 3-31
Элементы модели формата даты 3-32
Использование функции TO_CHAR с датами 3-36
vi
4
Использование функции to_char с числами 3-37
Использование функций то_number и to_date 3-39
Формат даты RR 3-40
Пример формата даты RR 3-41
Вложенные функции 3-42
Общие функции 3-44
Функция NVL Function 3-45
Использование функции nvl 3-46
Использование функции NVL2 3-47
Использование функции nullif 3-48
Использование функции COALESCE 3-49
Условные выражения 3-51
Выражение case 3-52
Использование выражения CASE 3-53
Функция DECODE 3-54
Использование функции decode 3-55
Итоги 3-57
Обзор практического занятия 3, часть 2 3-58
4 Выборка данных из нескольких таблиц
Цели урока 4-2
Выборка данных из нескольких таблиц 4-3
Декартово произведение 4-4
Получение декартова произведения 4-5
Виды соединений 4-6
Соединение таблиц с использованием синтаксиса, разработанного
Oracle 4-7
vii
Что такое эквисоединение? 4-8
Выборка записей с помощью эквисосдинении 4-9
Дополнительные условия поиска с оператором and 4-10
Различение одноименных столбцов 4-11
Использование псевдонимов таблиц 4-12
Соединение более, чем двух таблиц 4-13
Не-эквисоединения 4-14
Выборка записей с помощью не-эквисоединении 4-15
Внешние соединения 4-16
Синтаксис внешнего соединения 4-17
Использование внешних соединений 4-18
Соединение таблицы с собой 4-19
Соединение таблицы с собой 4-20
Обзор практического занятия 4, часть 1 4-21
Соединение таблиц с использованием синтаксиса стандарта SQL. 1999 4-22
Создание перекрестных соединений 4-23
Создание натуральных соединении 4-24
Выборка записей с помощью натуральных соединении 4-25
Создание соединений с использованием предложения using 4-26
Выборка записей с помощью предложения using 4-27
Создание соединений с использованием предложения on 4-28
Выборка записей с помощью предложения on 4-29
Создание трехсторонних соединений с использованием
предложения on 4-30
Сравнение внутреннего (INNER) и внешнего (OUTER) соединений 4-31
Левое внешнее соединение 4-32
Правое внешнее соединение 4-33
VIII
Полное внешнее соединение 4-34
Дополнительные условия 4-35
Итоги 4-36
Обзор практического занятия 4, часть 2 4-37
5 Агрегирование данных с помощью групповых функций
Цели урока 5-2
Что такое групповые функции? 5-3
Типы (рупповых функций 5-4
Синтаксис групповых функции 5-5
Использование функции AVG и SUM 5-6
Использование функций MIN и МАХ 5-7
Использование функции COUNT 5 8
Использование ключевого слова distinct 5-10
Групповые функции и неопределенные значения 5-11
Использование функции nvl с групповыми функциями 5-12
Создание групп данных 5-13
Создание групп данных: предложение GROUP BY 5-14
Использование предложение GROUP BY 5-15
Группировка по нескольким столбцам 5-17
Использование предложения GROUP BY с несколькими столбцами 5-18
Недействительные запросы с групповыми функциями 5-19
Исключение групповых результатов 5-21
Исключение групповых результатов: предложение having 5-22
Использование предложения having 5-23
Вложенные групповые функции 5-25
Итоги 5-26
Обзор практического занятия 5 5-27
6 Подзапросы
Цели урока 6-2
Использование подзапроса для решения проблемы 6-3
Синтаксис подзапросов 6-4
Использование подзапроса 6-5
Указания по использованию подзапросов 6-6
Типы подзапросов 6-7
Однострочные подзапросы 6-8
Выполнение однострочных подзапросов 6-9
Использование групповых функций в подзапросах 6-10
Предложение having с подзапросами 6-11
Что неправильно в этой команде? 6-12
Будет ли выполнена эта команда? 6-13
Многострочные подзапросы 6-14
Использование оператора ANY в многострочных подзапросах 6-15
Использование оператора all в многострочных подзапросах 6-16
Неопределенные значения в результатах подзапроса 6-17
Итоги 6-18
Обзор практического занятия 6 6-19
7 Формирование и вывод данных с помощью iSQL*Plus
Цели урока 7-2
Переменные подстановки 7-3
Переменная подстановки с одним амперсандом (&) 7-5
Символьные значения и даты с переменными подстановки 7-7
Задание имен столбцов, выражений и текста во время выполнения команды
SQL 7-8
х
Определение переменных подстановки 7-10
Команды DEFINE И UNDEFINE 7-11
Использование команды DEFINE с переменными подстановки 7-12
Использование команды verify 7-14
Настройка среды iSQL*Plus 7-15
Переменные команды set 7-16
Команды форматирования среды /SQL*Plus 7-17
Команда COLUMN 7-18
Использование команды column 7-19
Модели формата в команде, используемые в команде COLUMN 7-20
Использование команды BREAK 7-21
Использование команд ttitle и btttle 7-22
Создание скрипт-фаила для выполнения отчета 7-24
Образец отчета 7-26
Итоги 7-28
Обзор практического занятия 7 7-29
8 Манипулирование данными
Цели урока 8-2
Язык манипулирования данными (DML)) 8-3
Вставка новой строки в таблицу 8-4
Синтаксис команды insert 8-5
Вставка новых строк 8-6
Вставка строк с неопределенными значениями 8-7
Вставка специальных значении 8-8
Вставка конкретных значении даты и времени 8-9
xi
Создание скрипт-фаила 8-10
Копирование строк из другой таблицы 8-11
Изменение данных в таблице 8-12
Синтаксис команды update 8-13
Обновление строк в таблице 8-14
Обновление двух столбцов с помощью подзапроса 8-15
Обновление строк на основе значении из другой таблицы 8-16
Обновление строк: нарушение правила целостности данных 8-17
Удаление строки из таблицы 8-18
Команда delete 8-19
Удаление строк из таблицы 8-20
Удаление строк на основе значении из другой таблицы 8-21
Удаление строк: нарушение правила целостности данных 8-22
Использование подзапроса в команде insert 8-23
Использование параметра with check option в команде DML 8-25
Обзор значении по умолчанию 8-26
Использование значений по умолчанию 8-27
Команда merge 8-28
Синтаксис команды MERGE 8-29
Слияние строк 8-30
Транзакции базы данных 8-32
Преимущества команд COMMIT и ROLLBACK 8-34
Управление транзакциями 8-35
Откат изменений до точки сохранения 8-36
Неявная обработка транзакций 8-37
Состояние данных до выполнения команды commit или rollback 8-38
Состояние данных после выполнения команды commit 8-39
XII
Фиксация изменении в данных 8-40
Состояние данных после выполнения команды rollback 8-41
Откат на уровне команды 8-42
Согласованность чтения 8-43
Реализация согласованности чтения 8-44
Блокирование данных 8-45
Неявная блокировка данных 8-46
Итоги 8-47
Обзор практического занятия 8 8-48
9 Создание таблиц и управление ими
Цели урока 9-2
Объекты базы данных 9-3
Правила присвоения имен 9-4
Команда create table 9-5
Ссылки на таблицы других пользователей 9 6
ОПЦИЯ DEFAULT 9-7
Создание таблиц 9-8
Таблицы в базе данных Oracle 9-9
Запрос к словарю данных 9-10
Типы данных 9-11
Типы данных для хранения даты и времени 9-13
Тип данных TIMESTAMP WITH TIME ZONE 9-15
Тип данных TIMESTAMP WITH LOCAL TIME 9-16
Тип данных INTERVAL YEAR TO MONTH 9-17
Тип данных INTERVAL DAY TO SECOND 9-18
Синтаксис создания таблицы с использованием подзапроса 9-20
XIII
Создание таблицы с использованием подзапроса 9-21
Команда alter table 9-22
Добавление столбца 9-24
Изменение столбца 9-26
Удаление столбца 9-27
Опция SET UNUSED 9-28
Удаление таблицы 9-29
Переименование объекта 9-30
Усечение таблицы 9-31
Добавление комментариев к таблице 9-32
Итоги 9-33
Обзор практического занятия 9 9-34
10 Включение ограничений
Цели урока 10-2
Что такое ограничение? 10-3
Указания по ограничениям 10-4
Определение ограничении 10-5
Ограничение not null 10-7
Ограничение unique 10-9
Ограничение primary key 10-11
Ограничение foreign key 10-13
Ключевые слова ограничения foreign KEY 10-15
Ограничение check 10-16
Синтаксис команды добавления ограничения 10-17
Добавление ограничения 10-18
Удаление ограничения 10-19
xiv
Выключение ограничений 10-20
Включение ограничений 10-21
Каскадное удаление ограничений целостности 10-22
Просмотр ограничений 10-24
Просмотр столбцов, связанных с ограничениями 10-25
Итоги 10-26
Обзор практического занятия 10 10-27
11 Создание представлений
Цели урока 11-2
Объекты базы данных 11-3
Что такое представление? 11-4
Зачем нужны представления? 11-5
Простые и сложные представления 11-6
Создание представления 11-7
Выборка данных из представления 11-10
Запрос представления 11-11
Изменение представления 11-12
Создание сложного представления 11-13
Правила выполнения DML операций с представлениями 11-14
Использование предложения with check option 11-17
Запрет DML операций 11-18
Удаление представления 11-20
Inline Views 11-21
Тор-n анализ 11-22
Проведение Тор-n анализа 11-23
XV
Пример Тор-n анализа 11-24
Итоги 11-25
Обзор практического занятия 11 11-26
12 Другие объекты базы данных
Цели урока 12-2
Объекты базы данных 12-3
Что такое последовательность? 12-4
Команда create sequence: синтаксис 12-5
Создание последовательности 12-6
Проверка параметров последовательности 12-7
Псевдостолбцы NEXTVAL и CURRVAL 12-8
Использование последовательности 12-10
Изменение последовательности 12-12
Указания по изменению последовательности 12-13
Удаление последовательности 12-14
Что такое индекс? 12-15
Как создаются индексы? 12-16
Создание индекса 12-17
Когда создавать индекс 12-18
Когда не создавать индекс 12-19
Проверка индексов 12-20
Индексы, основанные на функции 12-21
Удаление индекса 12-23
Синонимы 12-24
XVI
Создание и удаление синонимов 12-25
Итоги 12-26
Обзор практического занятия 12 12-27
13 Управление доступом пользователей
Цели урока 13-2
Управление доступом пользователей 13-3
Привилегии 13-4
Системные привилегии 13-5
Создание пользователей 13-6
Системные привилегии пользователя 13-7
Предоставление системных привилегии 13-8
Что такое роль? 13-9
Создание роли и предоставление ей привилегий 13-10
Изменение пароля 13-11
Объектные привилегии 13-12
Предоставление объектных привилегий 13-14
Использование ключевых слов with grant opt i on и public 13 15
Проверка предоставленных привилегий 13-16
Отмена объектных привилегий: синтаксис 13-17
Отмена объектных привилегий: пример 13-18
Связи базы данных 13-19
Итоги 13-21
Обзор практического занятия 13 13 22
14 Семинар по SQL
Обзор семинара 14-2
х vii
15 Использование операторов SET
Цели урока 15-2
Операторы SET 15-3
Таблицы, используемые в этом уроке 15-4
Оператор union 15-7
Использование оператора union 15-8
Оператор union all 15-10
Использование оператора union all 15-11
Оператор intersect 15-12
Использование оператора INTERSECT 15-13
Оператор minus 15-14
Операторы set: указания 15-16
Сервер Oracle и операторы set 15-17
Согласование команд select 15-18
Управление порядком вывода строк 15-20
Итоги 15-21
Обзор практического занятия 15 15-22
16 Функции для обработки дат и времени в Огас!е9/
Цели урока 16-2
Временные зоны 16-3
Поддержка типов данных даты и времени (Datetime) в Oracle9i 16-4
TZ_OFFSET 16-6
CURRENT_DATE 16-8
CURRENT_TIMESTAMP 16-9
LOCALTIMESTAMP 16-10
xviii
DBTIMEZONEИ SESSIONTIMEZONE 16-11
EXTRACT 16-12
FROM_TZ 16-13
TO_TIMESTAMP И TO_TIMESTAMP_TZ 16-14
TO_YMINTERVAL 16-15
Итоги 16-16
Обзор практического занятия 16 16-17
17 Расширения group by
Цели урока 17-2
Обзор групповых функций 17-3
Обзор предложения group by 17-4
Обзор предложения having 17-5
Предложение group by, содержащее операторы rollup и cube 17-6
Оператор rollup 17-7
Оператор rollup: пример 17-8
Оператор cube 17-9
Оператор cube: пример 17-10
Функция grouping 17-11
Функция grouping: пример 17-12
GROUPING SETS 17-13
GROUPING SETS: пример 17-15
Составные столбцы 17-17
Составные столбцы: пример 17-19
Сцепленные группировки 17-21
xix
Сцепленные группировки: пример 17-22
Итоги 17-23
Обзор практического занятия 17 17-24
18 Сложные подзапросы
Цели урока 18-2
Что такое подзапрос? 18-3
Подзапросы 18-4
Использование подзапроса 18-5
Многостолбцовые подзапросы 18-6
Сравнения столбцов 18-7
Подзапрос с парным сравнением 18-8
Подзапрос с непарным сравнением 18-9
Использование подзапроса в предложении from 18-10
Скалярные подзапросы 18-11
Связанные подзапросы 18-14
Использование связанных подзапросов 18-16
Использование оператора exists 18-18
Использование оператора not exists 18-20
Связанная команда UPDATE 18-21
Связанная команда DELETE 18-24
Предложение with 18-26
Использование предложения with: пример 18-27
Итоги 18-29
Обзор практического занятия 18 18-31
XX
19 Выборка иерархических данных
Цели урока 19-2
Пример данных из таблицы employees 19-3
Структура натурального дерева 19-4
Иерархические запросы 19-5
Обход дерева 19-6
Обход дерева снизу вверх 19-8
Обход дерева сверху вниз 19-9
Ранжирование строк с помощью псевдостолбца level 19-10
Форматирование иерархических отчетов с использованием level и
LPAD 19-11
Отсечение ветвей 19-13
Итоги 19-14
Обзор практического занятия 19 19-15
20 Расширения синтаксиса команд DML и DDL в Oracle 9/
Цели урока 20-2
Обзор использования команды insert 20-3
Обзор использования команды update 20-4
Обзор многотабличной команды INSERT 20-5
Типы многотабличных команд INSERT 20-7
Многотабличные команды insert 20-8
Безусловная команда insert all 20-10
Условная команда insert all 20-11
Условная команда first insert 20-13
Вставка с преобразованием данных 20-15
Внешние таблицы 20-18
XXI
Создание внешней таблицы 20-19
Пример создания внешней таблицы 20-20
Выполнение запроса к внешней таблице 20-23
Предложение create index в команде create table 20-24
Итоги 20-25
Обзор практического занятия 20 20-26
Решения практических заданий
Структура таблиц и данные
Использование SQL* Plus
Создание усовершенствованных командных сценариев
Компоненты архитектуры Oracle Architectural
Индекс
Дополнительные практические задания
Решения для дополнительных практических заданий
Таблицы и их описания
xxii
Предисловие
Общие сведения
Прежде, чем приступать к занятиям
Этот курс требует умения пользоваться i рафическим интерфейсом нользова геля
(GUI). Требуется также знание концепций и методов обработки данных
Как организован курс
Курс Введение в OracleVi: SQL проводится инструктором и включает теоретический
материал и практические упражнения Демонстрационные примеры и
предварительно подготовленные практические занятия иллюстрируют изучаемые
концепции и homoi ают приобрести необходимые навыки.
Preface-3
Сопутствующие публикации
Публикации Oracle
Название
0racle9i Reference, Release 1 (9.0.1)
Oracle9i SQL Reference, Release I (9.0.1)
Oracle9i Concepts, Release I (9.0.0)
Oracle9i Server Application Developer's
Guide Fundamentals, Release 1 (9.0.1)
iSQL*Plus User’s Guide and Reference, Release 9.0.0
SQL* Pl us User’s Guide and Reference, Release 9.0.1
Номер для гаказа
A90190-01
Л90125-01
A88856-01
A88876-01
A88827-01
Дополнительные источники информации
• Системные бюллетени “System release bulletins’
• Руководства по установке системы и руководства пользователя
• Файлы readme
• Статьи международной группы пользователей Oracle (IOUG)
• Журнал Oracle Magazine
Preface-4
Типографская система обозначений
Далее следуют списки зипозрафских обозначений, используемых в гсксзе и коде
Типографские обозначения в тексте
Обозначение Объект или термин Пример
Прописные
буквы
Команды,
функции,
имена столбцов,
имена таблиц,
объекты PL/SQL,
схемы.
Для просмотра информации в столбце
LAST_NAME таблицы EMPLOYEES
пользуйтесь командой SELECT .
С।рочпыс
буквы,курсив
Имена файлов, где:
переменные,
имена пользователей,
пароли.
ри./ь имя создаваемой роли
С прописпозз
буквы
11мепа т риз i срогз
и кнопок
Назначить зризтер \\ hen-Validate-Iteni
блоку ORD.
Нажмите кнопку Cancel.
Курси 13
Кзпзз и, названия
курсов и
руководс I в,
выделенные
слова и фразы.
Дополнительная информация:
Oracle Server SQL Language Reference
Manual
Не сохраняйте изменения зз БД.
Кавычки
Названия уроков
ссылкзз па которые
имеются в курсе
Эта гема рассматривается
“Работа с объектами.'
зз уроке 3
Preface-5
Типографская система обозначений (продолжение)
I инографскис обошачения в коде
Обозначение
Верхний
регистр
Нижний,
регистр,
курсив
С заглавной
буквы
Объект или термин
Команды,
функции.
Синтаксические
переменные
Триггеры форм
Пример
SQL> SELECT employee_id
2 FROM employees;
SQL> CREATE ROLE роль;
Модуль формы: ORD
Уровень трш гера: элемент
S_IТЕМ.QUANTIТ Y
Имя триггера: When-Validate-Item
Нижний регистр
Имена столбцов,
имена таблиц,
имена файлов,
объекты PL/SQL.
OG_ACTIVATE_LAYER
(OG_GET_LAYER ( ' prod_j>ie_layer ') )
Полужирный
шрифт
Текст, который
должен быть
введен
пользователем
SELECT last_name
FROM employees;
CREATE USER SCOtt
IDENTIFIED BY tiger;
Preface-6
Схема
обучения
Язык SQL для администраторов баз данных
и разработчиков приложений в Огас1е9/
Введение в
Oracled/: SQL
SQL1
или
Введение в Oracled/
для пользователей,
имеющих опыт
программирования на SQL
В классе
В классе
Расширенный
выбор данных
в SQL
Введение в Oracled/: PL/SQL
Основы
PL/SQL
Разработка программных
единиц на PL/SQL
SQL для
конечных
пользователей
В классе
В классе
Углубленный PL/SQL
В классе
Copyright © Oracle Corporation, 2001 All rights reserved
Язык SQL для администраторов баз данных и разработчиков приложений
Введение в Orade9i: SQL состоит и г двух модулей: SQL! и Расширенный выбор данных в SQI В
SQLI рассматривается создание обьсктов в реляционной базе данных, хранение, выборка,
обработка данных пользователями Расширенный выбор данных в SQL охватывает
дополнительные возможности команд SELECT, Oracle SQL и подготовку отчетов в /SQL*Plus
Для слушателей, работавших с другими реляционными базами данных и знакомых с языком SQL,
Oracle нредлат ас г курс Введение в Oracle9i для но шзователей, имеющих опыт программирования
на SQL. В нем изучаются особенноеги реализации языка SQL фирмой Oracle, которые нс входят в
стандарт ANSI SQL.
Введение в Oracle9i: PL SQL состоит из двух модулей: Основы PL SQL и Разработка программных
единиц на PLSQL. В модуле Основы PLSQL рассматриваются структуры я тыка PL/SQL, ход
выполнения и интерфейс SQL. Модуль Разработка программных единиц на PL SQL охватывает
создание хранимых процедур, функций, пакетов и триттеров, а также сопровождение и отладку
программного кода.
SQL для конечных пользователей — ло куре для имеющих небольшой опыт ттрот раммирования, в
котором рассматриваются основные команды SQL.
5 глубленный PLSQL - это курс для пользователей, имеющих опыт ттрот раммирования на PL/SQL,
в котором рассматриваются вопросы аффект явного кодирования, обьск тинно-ориентированное
программирование, использование внешних программ и дополнителытыс функции пакетов,
поставляемых Oracle
Curriculum Map-3
Язык SQL для администраторов баз данных
и разработчиков приложений в Oracle9z
Введение в
Oracled/: SQL
SQL1
ИЛИ
Введение в Oracled/
для пользователей,
имеющих опыт
программирования на SQL
В классе
Расширенный
выбор данных
в SQL
В классе
Введение в Oracled/: PL/SQL
Основы
PL/SQL
Разработка программных
единиц на PL/SQL
SQL для
конечных
пользователей
В классе
В классе
Углубленный PL/SQL
В классе
ORACLE*
Copyright © Oracle Corporation, 2001. All rights reserved
Язык SQL для администраторов баз данных и разработчиков приложении
На слайде перечислены модули и курсы для изучения SQL
Курс или модуль Экви вал снтТВТ
Oracle SQL: Basic SELECT Statements Oracle SQL: Data Retrieval Techniques Oracle SQL: DML and DDL
Расширенный выбор данных в SQL Oracle SQL and SQL*Phis: Advanced SEI .ECT Statements Oracle SQL and SQL* Plus: SQL* PI us and Reporting
Введение в Oracle9i для пользователей, имеющих опыт программирования на SQL Oracle S )L Specifics: Retrieving and Formatting Data Oracle SQL Specifics: Creating and Managing Database Objects
Основы PL/SQL PL/SQL: Basics
Разработка прогрим. мны х единиц на PL/SQL PUSQL: Procedures, Functions, and Packages PL'SQL: Database Programming
SQL дзя конечных пользователей SQL for End (Isers: Part I SQL for End Users: Part 2
Углубленный PL/SQL Advanced PL SQL: Implementation and Advanced Features Advanced PL SQL. Design Considerations and Object Types
Curriculum Map-4
<
Введение
Copyright © Oracle Corporation, 2001. All rights reserved
Рассматриваемые вопросы
• Особенности Огас1е9/
• Теоретические и физические аспекты
реляционной базы данных
• Описание реализаций RDBMS и ORDBMS
фирмы Oracle
Цели урока
Этот урок посвящен концепции Системы Управления Реляционными Базами Данных (RDBMS) и
Системы Управления Объектно-Реляционными Базами Данных (ORDBMS). Обсуждаются также
следующие вопросы:
♦ команды SQL , используемые в Oracle;
• среда iSQL*Plus, используемая для выполнения кода SQL, форматирования и составления
отчетов.
Introduction to Oracle9/.- SQL 1-2
Oracle9/
Один
интерфейс
/правления
Одна модель
разработки
Общий набор
навыков
Copyright © Oracle Corporation, 2001 All rights reserved
Возможности Огас1е9/
Огас!е9/ предоставляет полную инфраструктуру для ведения высокопроизводительного
электронного бизнеса. Отас!е9/ включает все необходимое для разработки. эксплуатации и
управления Internet-приложениями.
11реимущесгва:
• Расширяемость oi уровня подразделений до уровня сайта электронною бизнеса
промышленных предприятий.
• Конфигурация, обеспечивающая надежность, доступность и зезопасносзь .
• Одна модель разработки, простые варианты установки и эксплуатации.
• Значительное повышение уровня инструментальной оснащенности организации и
предоставление современных средств ттрот раммирования на платформе Oracle, включая SQI ,
PL/SQL. Java и XML.
• Одинаковый интерфейс управления для всех приложений
* Поддержка открытых тсхнолот ичсских стандартов отрасли
Introduction to Oracle9/; SQL 1-3
Oracle9/‘
DATABASE
Огас1е97
Два продукта, Oracle9i Application Server и база данных Oracle9i, предоставляют полную и простую
инфраструктуру для Internet-приложений.
Introduction to Oracle9/.- SQL 1-4
OracleS/ Application Server
Порталы
-f1--1 - ;
.f , * *~—
Транзакционные приложения
IAS
Бизнес-логика
Интеграция
CACHE
Copyright © Oracle Corporation, 2001. All rights reserved.
Oracled/ Application Server
Oracle9i Application Server (Oracle9/AS) выполняет все ваши приложения, база банных Oracle9i
хранит все данные.
Огас1е9/Application Server - это только сервер приложений. В него включаются сервисы для
различных приложений, коюрые вы хотите выполнять на этом сервере. Oracle9/AS может
выполнять:
• порталы доступа к данным (Oracle Portal) или Web-сай гы;
• транзакционные приложения на Java;
• приложения но обработке бпзнес-логики.
Oracle9/AS гакже позволяет объединить в единое целое пользователей, приложения и информацию
вашей opi анизацни.
Introduction to Oracled/.- SQL 1-5
База данных Огас1е9/
ORACLe
Copyright © Oracle Corporation, 2001. All rights reserved
База данных Oracle9/
База данных Oracle9i сопровождает всю пользовательскую информацию, которая представляет
собой не только обьектно-рсляционные данные, но и неструктурированные данные, такие как
• электронные таблицы (Spreadsheets),
• документы в формате Word;
• презентации в формате Powerpoint;
• XML;
• мультимедийные т ипы данных (MP3, i рафическис представления, видео и т.д )
Информация необязательно должна храниться в базе данных. Сервисы балл данных Отас1е9/ дают
возможность хранить метаданные об информации, находящейся в файловых системах. Вы можете
использовать сервер базы данных для управления и обслуживания информации т де бы она пи
находилась.
Introduction to Oracle9/.- SQL 1-6
База данных Огас1е9/
DATABASE
Лучшая по производительности и
пригодности
Богатейший набор средств
I.
Copyright © Oracle Corporation. 2001 All rights reserved
База данных Oracle9/
База данных - начальная гонка любо! о обсуждения. касаюше! оси установки и эксплуатации
приложения. База данных Oracle9i - новый основной продукт Oracle, предоставляющий
богатейший набор среде i в.
Огас1с9т- единственная база данных, специально спроектированная как платформа для разработки
и эксплуатации в Internet. Огас1е9/ подтверждает продолжающееся длительное тсхноло! ическое
лидирование Oracle в областях управления информацией, обработки транзакции и хранилищ
данных, а также делает ею лидером в Internet. Встроенные непосредственно в базу данных Internet-
средства обеспечиваю! прорыв в создании систем Они помогают компаниям и разработчикам
создавать приложения в Internet с меньшей стоимостью, улучшаю! взаимосвязь между
покупателями и поставщиками, а также предоставляют i лобальный доступ к информации,
хранимой на разных платформах и предосчавляемои различными предприятиями.
Oiacle9; - это система управления объектно-реляционной базой данных Она имеет полный набор
возможностей и функций реляционной базы данных плюс свойства объемной базы данных.
Introduction to Oracle9/; SQL 1-7
Oracle9/: система управления объектно-
реляционной базой данных
• Типы данных и объекты, заданные
пользователями
• Полная совместимость с реляционной
базой данных
• Поддержка мультимедийных и больших
объектов
• Высококачественное оснащение сервера
баз данных
oi^ACue
1-3 Copyright © Oracle Corporation, 2001. All rights reserved
06 Oracle9/
В Oracle добавлена поддержка объектно-реляционной модели балл данных. Эю позволяет применять
объектно-ориентированное программирование, сложные тины данных и сложные бизнес-объекты
при полной совместимости с миром реляционных баз данных.
Oracle позволяет повысить производи!ельность и функциональные возможност приложений для
оперативной обработки транзакций (OLTP) за счет совместною использования структур данных во
время исполнения, большею размера кеш-буферов и применения о!раничсний, допускающих
отложенную проверку. Приложения, связанные с хранилищами данных, выиграю! oi таких
особенностей, как параллельное выполнение операций вставки, обновления и удаления,
секционирование данных, ошимизация запросов с учетом параллельной обрабюки. Действуя в
рамках Сетевой вычислительной архитектуры (NCA), Oracle9i поддерживает приложения,
работающие в архитектуре клиент-сервер, а также распределенные и mhoi оуровневые Wcb-
приложения.
Отас1е91 способен одновременно обслуживать десятки тысяч пользователей, поддерживает память
емкостью до 512 петабайтов (1024 терабайтов или 2 байтов). Oracle9i может хранить и
обрабатывать любые типы данных, включая текст, пространственные данные, образы, звук, видео и
временные ряды, а также традиционные структурированные данные.
Болес подробную информацию можно найти в документе Oracle9i Concepts.
Introduction to Oracle9Z; SQL 1-8
Интернет-платформа Oracle
Клиенты Почтовые
Браузеры клиенты FTP-клменты
Интернет-приложения
и бизнес-логика
Сетевые службы
Copyright © Oracle Corporation, 2001 All rights reserved.
ORACLE
Бизнес-логика ! Презентационная
и данные
о
2
Ф
I-
u
О
Ф
Ф
ra
Базы / Сервера
данных Приложении
И
CD
CD
W
CD
CD
О
Интернет-платформа Oracle
Oracle предлагает а высокопроизводительную Ии1ернегпла|форму для >лек троипои коммерции в
хранилищ данных Она включав! в себя все. что нужно для ра ipauoiKU, внедрения и управления
Ишернщ-нриложсннями Она содержи! грп основные часпс
• клиешы, работающие через браузеры, отображающие информ щшо;
• сервера приложении, рсалтующие бнзнес-ло1 нку н пре >енз.пшенную дошку для к iiiciiIOB.
работающих мере) браузеры,
• ба 1ы данных, реалпующис 6iiiiiec-;ioi нку с ишснсивным обращением к данным и хранящие
сами данные.
Oiaclc предлагает различные ере, кива внзуалыюй р гзрабо1Ки приложении и ютовые при южения для
различных областей бизнеса н отраслей промышленное (И Хранимые процедуры, функции н пакеты
moi ут быть написаны па SQL PL/SQL или Java
Introduction to Oracles/: SQL 1-9
Этапы разработки системы
Цикл разработки системы
Or зарождения концепции до ввода в жсплуататпно разработка базы данных осуществляется в
соответствие с циклом разработки системы, состоящим из нескольких стадии Такой системный
подход по принципу "сверху вниз" обеспечивает преобразование информационных потребностей
бизнеса в рабочую базу данных.
Стратегия и ана.тит
* Изучение и знали з информационных потребностей. Выяснение информационных
потребное гей из бесед с пользователями и менеджерами. Изучение документов, в которых
формулируются задачи предприятия и прикладных систем, а также любой другой
информации, полезной для разработки будущей системы.
11остроснпс модели системы. Словесные описания, полученные па зтаттс ратработкп стратег ни
и анализа, преобразуются в трафическос представление информационных потребностей и
правил предприятия. Модель обсуждается и совершенствуется совместно с аналитиками и
экспертами.
Проектирование
Проект ировапис схемы базы данных на основе модели, созданной на этапах выработки ст par ст ни и
знали за.
Создание зт документировапис
Создание опытной системы. 11аписаппс и выполнение команд для создания таблиц и
вспомогательных объектов базы данных.
• Разработка пользовательской документации, текстов справочных экранов и руководств по
эксплуатации системы.
Introduction to OracleS/: SQL 1-10
ORACLe
1-11
Copyright © Oracle Corporalion. 2001 AM rights reserved
Цикл разработки системы (продолжение)
Внедрение (отладка)
Совершенствование опытной системы Вне, т приложений в ткенлуатацню с юстированием и
приемкой пользователем. Преобразование существующих данных и параллельное использование
старой и новой систем. Внесение необходимых измсттсттий
Эксплуатация
Передача системы пользователям. Эксплуатация системы Наблюдение за ее произволитезытостыо.
расширение возможное гей п совершенствование системы
Примечание
Различные тгапьт цикла разработки системы мотут выполняться итеративно Основное внимание в
этом курсе сосредоточено на лапе топтания системы
Introduction to Огас1е9т; SQL 1-11
Хранение данных на различных носителях
DEPARTMENT ID DEPARTMENT NAME
10 .AdmmistMlion
20 Marketing
[ 50 Shipping
| 60 IT
| 60 Sales
90 Executive
HO Arcounlmg
>90 ConlraLling
MANAGERJD
200
201
>24
103
149
100
205
LOCATION.ID
1700
ieon
1503
urn
2500
Шкаф
j
I *
База
данных
Электронная
таблица
ORACLE"
Copyright © Oracle Corporation. 2001. All rights reserved
Хранение информации
Каждая организация нуждается в какой-то информации. Библиотека храниi список посетителей,
информацию о книгах, датах возврата и штрафах. Фирме требуется информация о служащих,
отделах и окладах. Эти элементы информации называются данными.
Ортанпзация может хранить данные на различных постелях и в различных форматах, например, в
виде бумажных документов в шкафу, электронных таблиц или баз данных
База данных - это упорядоченная совокупность информации.
Для управления базой данных требуется система управления базами данных (DBMS) DBMS это
программа, которая хранит, осуществляет выборку и модифицирует информацию в базе данных но
танросу. Существует четыре типа баз данных: иерархическая, сетевая,реляционная, а
сравнительно! о недавно появилась объектно-ре ищионная.
Примечание
Oracle? - это реляционная баш данных, а Огас1е8, 8г и 9i объектио-рсляцнотщые базы данных.
Introduction to OracleS/.- SQL 1-12
Концепция реляционной базы данных
• Доктор Е.Ф.Кодд предложил реляционную
модель для систем баз данных в 1970 г.
• Это основа системы управления
реляционными базами данных (RDBMS).
• Реляционная модель включает следующее:
- совокупность объектов или отношений;
- набор операторов для операций над
отношениями;
- целостность данных (точность и
согласованность).
ORACLE"
ИЗ Copyright © Oracle Corporahon. 2001 All nghls reserved
Реляционная модель
Принципы реляционной модели были впервые сформулированы Е Ф Кодлом в июне 1970 i. в
статье под заглавием ‘'Реляционная модель данных для больших совмсспю используемых банков
данных1' В угон сытье д-р Кодд предложил реляционную модель для снсюм баз данных
Наиболее распространенным и в то время были иерархические и соевые модели данных, а иногда п
нрос to двумерные файлы 11о системы управления реляционными базами данных вскоре пали
очень популярными -особенно блаюдаря простою н\ женлуагацпн н : нбкосш cipyxiypi.i Кроме
юн о, существовал ряд фирм-новаторов (и том числе Oiacle), коюрые дополнили RDBMS мощным
набором средств разработки приложений н конечных ноль товаютьских продух юн, обеспечив шкнм
образом комплексное решение.
Комни>1сн1ы рели шиш пи й мидели
• Совокупности объектов или о i ношений, коюрые храпя 1 дайны с
• Набор операторов, применяемых к о i ношениям для получении лрушч онюшенин
Сохранение целостности данных: их ючпосш и согласованности
Ьолее подробную информацию см в рабою ЕФ К<ыда The Refanonal Model for 1 kitabase
Management, Version 2 (Reading, Mass Addison-Wesley, 1990)
Introduction to Oracle9/; SQL 1-13
Определение реляционной базы
данных
Реляционная база данных - это совокупность
отношений или двумерных таблиц.
Сервер
Oracle
EMPLOYEE Ю'НДОГ KAM EAS1 NAME EMAIL
JOO Steven
10) [Neena
1112 fie»
kochhar
De На^
.-мг^ГаблйЦа йЙРЬЙгввв-Й
WIONL
SKING 515 123
NkOCHHAP 515 123
LDEHAAN 515 Г
DEPAHTMEHTJO DEPARTMENT KAME MANAGER Ю .LOCATION 10
10 lAdmmist ration zn 17ГГ1
20 'Marketing ЗЛ I 1030
50 'Shu- - 124 1 1500
ORACLE
Copynghl © Oracle Corporation. 2001 All rights reserved
Определение реляционном базы данных
Реляционная база данных: использует для храпения информации двумерные таблицы, нлыкасмыи
отношениями.
Например, фирме необходимо хранить информацию о всех сс служащих. В реляционной базе
данных создается несколько таблиц для хранения различных элемент» информации о служащих
таблица служащих, таблица отделов, таблица заработок платы и т.д.
Introduction to Oracled/.* SQL 1-14
Модели данных
Модель
сущностей
в виде
табличной
модели
Модель
заказчика,
представленная
в виде модели
сущностей
Модель
системы в
представлении
заказчика
Сервер
Oracle
Таблицы на
диске
ORACLE
1-16
Copyright © Oracle Corporation , 200t All rights reserved
Модели данных
Модели — это красу! ояьные камни проектирования Прежде чем ирис i у ишь к детальному
конструированию автомобиля, инженеры создаю! ею модель Точно гак же coviaioi модели н
проектировщики систем для проверки идей и более глубокого понимания проекта базы данных
Назначение моделей
Модели помо>ают обмениваться идеями Они нсполь»укнся ця
• взанмодсйстня;
• к шеенфи капни,
• описания,
• определения;
• исследования;
• развития,
• анализа,
- имитации.
Конечной целью является создание модели, ко юрам решает все ни ылачи н понята ноль юна гелю,
но одновременно содержит достаточно подробную информацию, на основе ко юрой разработчик
может созда<ь рабоюсписобиую систему и базу данных
Introduction to Огас!е9к SQL I 15
Модель “сущность-связь" (ER-модель)
• Создание ER-модели по документам или
словесным описаниям
• Сценарий:
- . Назначить одного или нескольких
служащих в отдел. . .”
- . Некоторые отделы пока не имеют
служащих...”
ORACLE
I |-1в Copyright © Oracle Corporation, 2001 All rights reserved
Моделирование “сущность-связь" (ER-моделирование)
В эффективной системе данные деля гея на отдельные категории пли сущности А7?-1««)е.ть
показывает различные сущности бизнеса и взаимосвязи между ними Она основана на информации,
собранной нз документов и интервью, а в цикле разработки системы создается па этане анализа
ER-модели отделяют информационные потребное пт орт апп защит от видов се деятельности Хотя
виды деятельности в организациях часто меняются, тин необходимой информации обычно
остается прежним. Следовательно, и структуры данных проявляют тенденцию к стабильности
Преимущества ЕК-модс.тироваиия
* Четкое и понят нос документирование информации орт атнт тащит
• Четкое представление об объеме информационных потребностей
* Попятное графическое представление системы для проск пронация ба ты данных
* Эффективные рамки для интеграции приложений
Основные компоненты
• Сущность (Entity) - значимая вещь, о которой ортанизацпя должна иметь информацию
Например, отделы, служащие н така ты
• Атрибут (Attribute) - нечто, что описывает или квалифицирует сущность Например,
атрибутами сущности СЛУЖАЩИЙ мотут быть номер служащею, имя, должность, дата
найма, номер отдела и т.д. Атрибут может быть обязательным пит необязательным. Это
свойство называется опциональностью (optionality)
• Связь (Relationship) именованная связь между сущностями, характеризуемая
опциона юностью и мощностью (degree). Например, связь между служащими и отделами,
заказами и товарами
Introduction to Огас1е9/.- SQL 1-16
Система обозначений в ER-моделях
Сущность
Скругленная рамка
Уникальное имя в
Атрибут
Имя в единственном числе
Строчные буквы
единственном числе
- символ обязательного
Уникальный идентификатор (UID)
- символ первичного UID
“(#)” - символ вторичного UID
ORACLe
Copyright © Oracle Corporation, 2001 All nghls reserved
Моделирование “сущность-связь" (продолжение)
Сущности
Для представлении сущности в модели иснользусчся следующая снегема обишачепин
• чстырехуюльпнк с гакрутлепными углами любою размера,
• уникальное имя в единственном числе згняавными буквами.
• необязшельиыс имеиа-ешкшнмы заглавными буквами в круглых скобках
Атрибуты
Для представления атрибуюв и модели нсиолыустся следующая сиоема обозначении
• уникальное имя счрочнымя буквами;
• обязательные атрибуты (шачсния которых должны был» и шесты) помечаются символом
• необя ыгсльные aipuCyw (значения коюры.х moiут бьпь и jbccihm) помечаю кя буквой ‘ о"
Свя in
Си mb o,i Описание
Пунктирная линяя Необязательный элемент (“может быть' )
Сплошная линия Обязательный элемент (“ щлжен быть”)
"Воронья лапа" Элемент, обозначающий мощность связи “один нлн более”
Одна линия )лсмент, обошачлюншй мощность связи “одни нлн только один”.
Introduction to Oracle9/; SQL 1-17
Система обозначений в ER-моделях
Сущность
Скругленная рамка
Уникальное имя в
единственном числе
Заглавные буквы
Синонимы в скобках
Атрибут
Имя в единственном числе
Строчные буквы
- символ обязательного
атрибута
“о” - символ необязательного
атрибута
СЛУЖАЩИЙ
номер
имя
должность
1аботает в
состоит из
ОТДЕЛ
#* *номер
* название
О местоположение
О
Уникальный идентификатор (UID)
- символ первичного UID
“(#)” - символ вторичного UID
ORACLe
1-18
Copyright © Oracle Corporation. 2001 All rights reserved
Моделирование “сущность-связь" (продолжение)
Связи
Для каждого направления связи имеется:
• имя, например, обучается у или работает «;
• опциональность; должен быть или может быть;
• степень, один и только один или один или более.
Примечание: синонимом термина мощность {degree) являсюя термин максимальная
кардинальность {cardinality), а термина опциональность - минимальная кардинальное!!.
Спи таксис для представления свяш
Каждая исходная сущность {может быть | должна быть} имя свяш {один и только одно | один или
более} конечная сущность.
Примечание
Традиционно святи читаются по часовой стрелке.
Уникальные идентификаторы
Уникальный идентификатор (UID) - это любое сочетание атрибутов, связей или того и другого,
используемое для различения экземпляров сущности. Каждый экземпляр сущности должен
однозначно идентифицироваться.
• Каждый атрибут, являющийся частью UID, помечается символом И
• Вторичные U1D помечаются символом # в скобках: (#).
Introduction to OracleSZ.- SQL 1-18
Установление связей между таблицами
Каждая строка данных однозначно
идентифицируется первичным ключом (РК).
Данные нескольких таблиц можно
логически связать с
ключей (FK).
помощью внешних
Таблица employees
EMTCOTTP. 10 HOST-NAME ILAST.HAUE
174 ;EUen (Abel
142 Curtis jC'avies
102 lew
104
De Haan
DEPARTMENT ID
Таблица departments
DEP/iRIMEHT ID jDEPARTMENT NAME MANAGER ID LOCATION It)
200
201
Bruc в
Pat
A till «ni
Ы1
ли
10 lAdnurnsli alien
ill eting
50 I Shipping
60 'IT
ffl jSaies
90 .E»ecu1iye
ГШ „Ar couni mg
190 {Contracting
103
10j
205
lft.0 I
151.1» I
1400
y® •
171V
l?U0
1ЛЮ
Главный ключ Внешним ключ
Главный ключ
ORACL&
Ы9
Copyright © Oracle Corporation, 2001 All rights reserved
Взаимосвязи между таблицами
Каждая таблица содержит данные, описывающие только одну сущность Например, галлина
EMPLOYEES содержит информацию о служащих В верхней строке каждой таблицы на слайде
укатаны категории данных, а пол ними перечислены конкретные данные Таблицы noMoiaior
увидеть, понять и использовать информацию.
Т.к данные о различных сущностях хранятся в разных таблицах, для ответа на некоторые запросы
может понадобиться соединение двух или более таблиц. Напр., требуется узнать, где находится
отдел, в котором работает служащий. В зтом случае нужна информация из таблицы EMPLOYEES,
содержащей данные о служащих, и таблицы DEPARTMENTS, содержащей данные об отделах
RDBMS позволяет связать данные одной таблицы с данными другой с помощью внешних ключей
Внешний ключ - это столбец или группа столбцов, ссылающихся па первичный ключ в той же или в
другой таблице
Возможность святать данные одной таблицы с таниыми друт ой позволяет орт апизовагь данные в
виде отдельных лет ко управляемых структур Логически можно разделить данные о служащих н
отделах, если хранить их в отдельных таблицах
Правила первичных и внешних ключей
• Значения первичного ключа не могут повторяться
• Обычно первичные ключи нельзя изменять
• Внешние ключи (foreign keys) основаны на данных и являются нс фи зпческимн, а чисто
лотнческими указателями
• Значение внешнего ключа должно соответствовать существующему значению первичною
ключа, уникального ключа или быть неопределенным (NULL).
* Внешние ключи могут ссылаться только на первичный или уникальный ключ
Introduction to Oracle9i: SQL 1-19
Терминология реляционной базы данных
! SALARY
1Л FAR1 Ml N I 111
COMMISSION НО
LAS I NAML
MOOO
iDe Haan
-Hunoid
104
Ernst
107
Lorentz
12< jMourgos
king
Kochhar
LMPLOYLLJU
.oq
lOtj
io|
103
UljjRajs
14^ ^Davies
14^ j',Maios
14^ |^argas
li^fZlDlkey"
174 llAbel
17001
66
ELI
50
BO
EC
ЫЛЮ
1ЛШ
“бзбб
^Higgins
•Gieiz
176 и Taylor
t7E«||Granl
20C jjV/halen
201' i Hartsteir
202
ли!
5BUU
3500
xoo
2500
1050П
HOOD
0600
7ПГ0
4400
31W
ORACLE
1-20
Copyright © Oracle Corporation, 2001. All rights reserved
Терминология реляционных баз данных
Реляционная БД может содержать одну или несколько таблиц Таблица (table) это основная
структура для хранения данных в RDBMS Она содержит все необходимые данные о чем-то in
реальною мира, например, служащих, счетах пли заказчиках
Сланл показывает таблицу или отношение EMPLOYEES Цифры означают следующее
I Одна строка (нт) пли кортеж (tuple) содержи! нее данные по конкретному служащему
Каждая строка таблицы должна идентифицироваться первичным ключом (primary key),
который ис может повторяться в разных строках. Последовательность строк значения нс
имеет; она указывается при выборке данных.
2 Столбец (column) или атрибут (attribute) содержит номер служащею, который является
также первичным ключом Он идентифицирует одного единственно! о служащего в таблице
EMPLOYEES Первичный ключ <)от.мен иметь шачсннс.
3 Столбец, не являющийся ключом Столбец представляет один пил данных в таблице,
например, должности всех служащих Поспелова тельное 1 ь столбцов для хранения
несущественна; ее можно задать ирн выборке данных
4. Столбец, содержащий номер отдела, является также внешним ключом (foreign key). Внешний
ключ это столбец, определяющий взаимосвязи между таблицами Внешний ключ
соответствует первичному или уникальному ключу в другой таблице Например,
DEPARTMENT ID однозначно идентифицирует отдел в таблице DEPARTMENTS.
5 Поле (field) может нс содержать значения. Это называется пеопредси-нным значением (null ) В
таблице EMPLOYEES поле COMMISSION РСТ(“компссио1Н1Ыс") содержит значение только
для служащих, являющихся продавцами (salesman)
6. Поле находится на пересечении строки и столбца В поле может быть только одно шаченис
Introduction to Oracle9/.' SQL 1-20
Свойства реляционной базы данных
Реляционная база данных:
• Обеспечивает доступ и модификацию с
помощью команд Языка структурированных
запросов (SQL)
• Содержит совокупность таблиц без физических
указателей
• Использует набор операторов
ORACue
1-21 Copyright © Oracle Corporation, 2001 All rights reserved
Свойства реляционном базы данных
В реляционной базе данных ист необходимости указывать путь доступа к забитым и шаз 1., как
организованы данные физически
Доступ к базе данных осуществляется путем выполнения команды языка SQL (язык
структурированных запросов) , соответствующего стандарту по операциям с реляционными ба ымн
данных Американского национального института стандартов (ANSI) Я зык SQL содержит
большой набор операторов для раьте.тения и комбинирования отношении С помощью команд SQL
можно модифицировать оазу данных
Introduction to Oracle!)/.' SQL 1-21
Связь с RDBMS с помощью SQL
Sales
,E«ecirtiye
|Ас Counting
[Contiarhng
8 rows selected
ORACl_e
1-22 Copyright © Oracle Corporalion 2001 All ng his reserved
Язык структурированных запросов
SQI. но/воляет осуществлять связь с сервером н ласт следующие преимущества
• эффективность,
• простота изучения и использования;
• функциональная законченность; SQL позволяет определять данные в таблицах, производить их
выборку и манипулировать ими.
Introduction to Oracle9Z; SQL 1-22
Система управления реляционной
базой данных (RDBMS)
ORACLG-
1-23 Copyright © Oracle Corporation, 2001 All rights reserved
Система управления реляционной базой данных
Корпорация Oracle предоставляет гибкую RDHMSOracle!?/. Она позволяет хранить да!.е н
управлять ими, пользуясь всеми преимуществами реляционной структуры плюс PL/SQL машиной,
что обеспечивает храпение и выполнение программных модулей Oracle!?! также поддерживает
языки Java и XML. Сервер Oracle предлагает пользователям возможность выборки данных,
основанной па методах оптимизации. Он включает средства танины, контролирующие доступ к
базе данных и се использование Еще одно преимущество- >ю обеспечение непротиворечивости и
защиты данных с помощью механизма блокировок
Сервер Огас1е9т по система управления объект ио-рсляционпой ба той данных, предостап тятощая
открытый, полный и интегрированный подход управления информацией ( ервер Oracle состоит пт
ба ты данных Oracle и экземпляра Oracle. Каждый par, когда запускается база данных, выделяется
память для системной .юба.лылой области (SOA) и стартуют фоновые процессы Системная
глобальная область - это область памяти, которая содержит информацию ба ты данных,
разделяемую пользователями ба ты Совокупность фоновых процессов и буферов памяти ооратует
лкземшнр Oracle
Introduction to Oracle9/. SQL 1 23
Команды SQL
SELECT Выборка данных
INSERT UPDATE DELETE MERGE Язык манипулирования данными (DML)
CREATE ALTER DROP RENAME TRUNCATE Язык определения данных (DDL)
COMMIT ROLLBACK SAVEPOINT Управление транзакциями
GRANT REVOKE Язык управления данными (DCL)
ORACLe
| 1-24 Copyright © Oracle Corporation. 2001. Al! rights reserved.
Команды SQL
Oracle SQL соответствует существующим отраслевым стандартам Cooibcictuhc с
развивающимися стандартами обеспечивается благодаря активному участию корпорации Oracle и
работе комитетов по разработке стандартов по SQL. Такими общепризнанными комитетами
являются А мериканский национальный институт стандартов (ANSI) и международная
организация стандартов (ISO) 11 ANSI, и ISO приняли SQL. в качестве стандартного я тыка для
реляционных баз данных.
Команда Описание
SELECT Производит выборку данных in базы данных
INSERT UPDATE DELETE MERGE Включают новые строки в таблицы базы данных, и iменяю г 1 существуют! ie i i удал я ют iici iyw пые Вмсс i е l оставляю г Язык манинулнрокання данными (DML)
CREATE ALTER DROP RENAME TRUNCATE Эти команды создаю!, и вменяют и удаляют структуры данных. В совокупности называются Языком определения данных (DDL).
COMMIT ROLLBACK SAVEPOINT Управляют изменениями, производимыми е помощью команд DML. Изменения можно группировать в логические трап «акции
GRANT REVOKE Предоставляет или и h.im.ic г права доступа как к базе данных, так и к структурам в ней В совокупности называкнея Языком управзения данными (DCL)
Introduction to Oracle9i; SQL 1-24
Таблицы, используемые в курсе
EMPLOYEES (СЛУЖАЩИЕ)
EMPLOYEE Ю
100
FIRST NAME
Steven
101
102
Nee па
Lex
103
Alexander
104
Bruce
107
Diana
124
hewn
141
Trenna
14
Curtis
143
Randall
144
Peter
DEPARIMtHT Ю
10
14? E--,
|lAST_HA»lt
[king
Jkochhar
De Haan
Ihunoid
[Ernst
(Lorentz
(Muurgos
(Rajs
panes
(Matos
|Vaigas
-tqtkev
EMAIL
.SkING
(NKOCHHAR
’LDEHAAN
AHUNOLD
BERNST
pLORENTZ
^MCURGuS
[TRAJS
CDAvlES
RMATOS
HIRE DATE
17 Jiff 4-67
[21 SEP 69
.13JA№3
03-JAIJ-90
II-MAY ?1
07. FtP ”9
.I6HUV-99
17 OCT 95
29-JAN91
,15 MAR 98
'PVARGAS
EZLJTP.EY
-JAfJ-Wi
50
60
60
90
no
190
DLPARlMLNTJtAML MANAGER JO LOCATION ID
Administration
Marketing
Shipping
IT
Sales
Executive
200 J
201 [
124 |
103 I
149 [
100 |
1700
iaro
1500
1400
2500
1700
MA 45
WAY
SEP-.
FEB
ILIN ч
Ac counling
Cent i acting
uno
1710
I IN
JOB JO
[AD-PRES
!ad vp
!ad vp
IT PROG
ITF'RQG
Ifl PROG
|ST_MAN
>ST_CLERI<
ST.CLERK
{ST CLERK
IST_CLERk
[SA_MAN
SALARY ; COMMISSION PC
240U0 ,
17000 |
17000 |
4X0 I
LUUO |
58OJ ,
3500 '
3100
2600;
2500 |
седо i
11ЙХ) j
LLOQ .
GRA t OWE ST SAI
3000
6000
ЮХ0
15000
2-5000
HIGHEST.SAL
W»
-3'»V3
1449?
41X00
В
D
DEPARTMENTS (ОТДЕЛЫ)
JOB_GRADES (КАТЕГОРИИ ЗАРПЛАТЫ
ORACL.e
1-26 Copyright © Oracle Corporation 2001 All rights reserved
Таблицы, используемые в курсе
В >том курсе исиолыуются гри основных таблицы
• таблица EMPLOYEES, содержащая данные о служащих,
• таблица DEPARTMENTS, содержащая данные об отделах;
• таблица JOB_GRADES, содержащая данные о шработиои нла1с раситных катсюрнн
Примечание
Структура и данные для всех таблиц содержатся в I Циетожеппн В
Introduction to Oracle9f.- SQL 1-25
Итоги
• OracleSz - база данных для Интернет-
приложений.
• Огас1е9/ базируется на объектно-реляционной
системе управления данными.
• Реляционные базы данных состоят из
отношений, управление которыми
осуществляется с помощью реляционных
операций и регулируется правилами
обеспечения целостности данных.
• Сервер Oracle позволяет хранить информацию
и управлять ею с помощью языка SQL и
PL/SQL- машины.
ORACLe
L28 CcpyrighI © Oracle Corporalion, 2001 All rights reserved
Итоги
Системы управления реляционными базами данных состоят из объектов пли отношении
Управление ими осуществляется с помощью операции н набора ограничений
Корпорация Oracle предлагает продукты п услуги для удовлетворения ваших iioipeGnocTcii в
системах управления реляционными базами данных. Основным продуктом является сервер Огас1е9г,
позволяющий хранить информацию и управлять сю с помощью языка SQL п Oracle9i Application
Server, которые лает возможность выполнять приложения
SQL
Сервер Oracle поддерживает стандарт ANSI для языка SQL и содержит дополнения SQL >то язык
используемый для связи с сервером в целях доступа к данным, манипулирования и управления ими.
Introduction to Oracle9<: SQL I-26
Базовые команды
выбора языка SQL
ORACLjE'
Copyright © Oracle Corporation, 2001 Al fights reserved
Рассматриваемые вопросы
* Возможности команды select языка SQL
* Выполнение базовой команды select
• Различия между командами SQL и zSQL*Plus
ORACI_e
1-2
Copyright © Oracle Corporation, 2001 All nghls reserved
Цели урока
Выборка данных из базы данных прон знодится с помощью команды SELECT языка SQL Ври
необходимости можно оз раиичнть выбираемые из таблицы столбцы Занятие посвящено командам
SQL, необходимым для выполнения згих действии.
Обсуждается создание команды SELECT для миоз окра i ною использования. Рассмазрнваюзся
также команды iSQL*Plus для выполнения команд SQL.
Примечание
/SQL*Plus - новый продукт в Огас1е9т, основанный па нспользовапнзз браузера, зз среде котороз о
выполняю|ся команды SQL В предыдущих версиях Oracle узилнта SQL*Plus использовалась ио
умолчанию для выполнения комаззд SQL. Пользовазслз. может все еще ззрззмсззязз>5{?/.*/7тю tin
описание приведено в приложении С
Introduction to Oracle97.- SQL 1-2
Возможности команды select
языка SQL
Выбор
Проекция
Таблица 1
Copyright © Oracle Corporation, 2001 All rights reserved
ORACLE'
Возможности команды select
Команда SELECT осущсств тяет выборку информации из базы данных С помощью пои команды
можно производить описанные ниже действия
• Проекция (projection), SQL позволяет задать спипОцы таблицы, возвращаемые запросом
Количество выходных столбцов может быть любым.
• Выбор (selection) SQL. позволяет осуществлять выборочный вывод чирок таблицы Для лото
можно задать различные критерии выборки
• Соединение (join). SQL позволяет объединять данные нт ратных таблиц па бате соединения
между ними Этому посвящено одно ит следующих занятий
Introduction to Oracle9i: SQL 1-3
Базовая команда select
SELECT * 1{[DISTINCT] столбец|выражение [псевдоним] , . . .}
FROM таблица/
• select указывает, какие столбцы;
• from указывает, из какой таблицы.
ORACLe
Copyright © Oracle Corporation, 2001. All rights reserved
Базовая команда select select
Простейшая команда SELECT должна включат следующее
• Предюжение SELECT, задает выходные столбцы
• Предложение FROM. указывает таблицу, которая содержит столбцы, заданные в
предложении SELECT.
Синтаксис :
SELECT список из одною или более си>лбцов
* выбирает все столбцы
DISTINCT ус граияст Дублина i ы
столбец | выражение выбирает заданный столбец или выражение
псевдоним FROM таблица Примечание присваивает ыданным столбцам дру| не имена указывае! 1аблнцу, содержащую столбцы
В курсе используются термины ключевое слово, предложение н команда
• Ключевое слово (keyword) - это отельный элемент SQI (например SELECT и FROM)
• Предложение (clause) - это часть команды SQL (например. SELECT employee_id,
last name, . . .
• Команда (slatenient) - это комбинация из двух или более предложении (например, SELECT
FROM employees)
Introduction to OracleSi. SQL 1-4
Выбор всех столбцов
SELECT *
FROM departments;
Ш РАК I Ml НI I!) ill РАИ [MINI..NAM I WIANAGi RJO
10 Administration 200
20 [Marketing 201
50 [Shipping 124
60 IT 103
00 Sales U9
90 Executive 100
110 Accounling 205
190 Conti acting
10(ДПГШ.!»
17ГН
160П
1500
14Ю
1/uO
170’1
1/tti
6 iows selected
ORACLG-
1-6
Copyright © Oracle Corporation, 2001 All righis reserved
Выборка всех столбцов и строк
Ди!Я вывода значений «сел столбцов таблицы досчаючцо поставить зветочку (*)после клвтчевото
слова SELECT В примере па слайде таблица отделов содержи! четыре с толбца DEPARTMENT ID.
DEPARTMENT NAME MANAGER_ID и LOCATION_ID. Количество строк семь, по одной на
каждый О1 дел.
Другой способ вывода всех столбцов |аблнны >ю перечисли>ь их после ключевою слова SELECT
Как и в примере на слайде, смелующая команда SQL выбирал'! все столбцы и строки 1аблпцы
DEPARTMENTS:
SELECT departnient id, department_name, managerid, location id
FROM departments;
Introduction to OracleSi SQL 15
Выбор конкретных столбцов
SELECT department_id, location_id
FROM departments;
| DEPARTMENT ID
I
г
I
I
I
I
I
I
tOCATlOH ID
10 1700
20 1OJJ
50 1‘JJi
EO ULTI
8П 2500
17CIJ
110 17СП
190 170П
8 selected
ORACLe
1-6 Copyright © Oracle Corporation, 2001 All rights reserved
Выбор заданных столбцов и всех строк
С помощью команды SELECT можно вывести конкретные с голбцы i аблицы. ука тав их имена через
занятые. В примере показан вывод всех номеров и местоположений О1де.тов из ыблпцы
DEPARTMENTS.
В предложении SELECT нужные ситлбны указываючгя в юй последои.11Слы1ОС111, в которой они
должны появиться на экране. Чтобы, например, местоположение шдела нредшес I лопало номеру
отдела, используется следующая команда :
SELECT locationid, FROM departments; depai -tmentid
| LOCATIONJD' I DEPARTMENTJD
I 1700 | 10
1800 [ 20
[ 1500 | 50
8 tows selected
Introduction to Oracle!)/.- SQL 1-6
Написание команд SQL
• Команды SQL не различают регистры символов
* Команды SQL могут занимать одну или
несколько строк
• Ключевые слова нельзя сокращать и
размещать на двух строках
• Предложения обычно пишутся на отдельных
строках
• Для облегчения чтения используются
табуляция и отступы
ORACL&
1-7 Copyright © Oracle Corporation, 2001 Ай rights reserved
Написание команд SQL
Простые правила поз волн ют создавать команды, удобные для «пения и редактировал ня.
• Команды SQL не различают penicipu символов, если не указано иною
• Команды SQL могу! заннмаи, одну или несколько cipoK.
• Ключевые слова нельзя сокращать и переносить с одной строки на apytyio.
• Для упрощения чтения и редактирования предложения обычно пишутся на отдельных
строках
• Для упрощения чтения команды можно использовать !абуляцию и отступы.
• Ключевые слова обычно вводятся заглавными буквами, а все остальные (например, имена
таблиц и столбцов) - строчными.
Выполнение команд SQL
Чтобы выполнить одну или несколько команд в окне редактирования i.SQL* *Phis, щелкни ic на
кнопке Execute
Introduction to Oracle9r SQL 1-7
Заголовки столбцов по умолчанию
• /SQL*Plus
- Выравнивание по умолчанию: по центру
- Вывод по умолчанию: в символах верхнего
регистра
• SQL*Plus
- Слева: даты и символьные данные
- Справа: цифровые данные
- Вывод по умолчанию: в символах верхнего
регистра
ORACLe
Copyright © Oracle Corporation, 2001. All rights reserved
Заголовки столбцов по умолчанию
В iSQL*Plus затоловки столбцов выводятся по центру и символах верхнего рет метра
SELECT lastname, hire_date, salary
FROM employees;
LAST_NAME | HiRE_DATE SAI ARY
|King |17-JUN-67 24000
|Kochhar [21-SEP-89 17000
[De Haan |13 JAN-93 17000
|Hunold |03-JAN-90 9000
|Ernst (21-MAY 91 6000
|Higgins |07-JUN94 I 12000
[Gielz [07-JUN-94 8300
20 rows selected
Изменить формат вывода таголовков, используемый но умолчанию, можно с помощью псевдонима
столбца (алиаса). Псевдонимы столбцов обсуждаются далее в ном уроке
Introduction to Oracle9f; SQL 1-B
Арифметические выражения
Создаются из данных типа number и date с
помощью арифметических операторов
Оператор Описание
+ Сложение
- Вычитание
* Умножение
/ Деление
ORACL-G
1 -fi Copyright © Oracle Corporation, 2001. All rights reserved
Арифметические выражения
Иногда требуется изменить формат вывода данных, произвести вычисления или выполни 1ь
сценарии тина “что, если ... Сделать эю можно с помощью арифметических выражений
Арифметическое выражение может включать имена столбцов, числовые константы и
арифметические операторы.
Арифметические операторы
Па слайде указаны арифметические операторы SQL. Все они могут нспольтоваться в любых
предложениях команды SQL, за исключением предложения FROM
Introduction to Огас1е9ь- SQL 1-9
Использование арифметических
операторов
SELECT last_name, salary, salary + 300
FROM employees;
Г IASI HAMt SALARY SALARY .300
king 24000 241jrj
ikochhar 17000 17<П
(Je Haan 17000 17ТГ
iHunold £'ЛС 930П
iEinst 6П00 6300
^Lorentz 4JTj 4Ч!¥) I
jUtelz 830Li 6«J»J
20 >nws selected
ORACLE"
1-10 Copyright © Oracle Corporation, 2001. All rights reserved
Использование арифметических операторов
В примере па слайде оперлюр сложении иенользуеюя для прибавлении 300 долларов к окладу всех
служащих; повыл оклад выводит си в столбце SALARY+300.
Следует oiMCritrb, чго столбец SALARY+300 не явлисюя новым сюлбцом таблицы EMPLOYEES, а
используется только для вывода рстулыаюв вычислений. 11о умолчанию имя зкио столбца
соответствует upon тедспным вычислениям - в данном случае “salaiy+300”
Примечание
Сервер Oracle9t ш норпрует пробелы до и после арифме1ичсского oitepatopa
Introduction to Oracle9r. SQL 1-10
Приоритеты операторов
• Умножение и деление имеют приоритет над
сложением м вычитанием
• Операторы с одинаковым приоритетом
выполняются слева направо
• Для выполнения операторов в определенном
порядке и упрощения их чтения используются
скобки
ог?АО_е
1-11 Copyright © Oracle Corporation, 2001 АН righis reserved
Приоритет операторов
Если арифметическое выражение содержит более одною онераюра, сначала в.олняюгся
умножение и деление. Ьсли операторы в выражении имеют одинаковый приоритет они
выполняются слева направо.
Для тиснения порядка выполнения оператора можно испольюват!. скобки, выражение в скобках
вычисляется первым
Introduction to Oracle9i. SQL 1-11
Приоритеты операторов
SELECT last_name, salary, 12*salary+100
FROM employees;
F ~~ I AST HAW! 7 SAIARY Г t? SAI ARY+1IUI
{king 2-ЗСОЭ । 288108
|kochhar 17000 ! 204100
|De Haan 170X1 204 KO
[Hunotd 9000 10810П
[Ernst 60Ui> I 72100
{Lorentz 4200 50500
iGielz
Л1 rows selected
HVC
£Г»7С1П |
ORACLe
Copyright © Oracle Corporation,, 2001 All rights reserved.
Приоритеты операторов (продолжение)
В зюм примере покашп вывод имени, оклада и годового дохода всех служащих Головой доход
равен окладу, умноженному на 12, плюс одноразовая премия в размере 100 долларов Следует
отметин,, чю сначала выполняется умножение, а потом - сложение
Примечание
Для изменения пос icOoeiiiiicnMiociiiu выпо шспия опера юров и унрон синя чтения псполмуюгся
скобки Результат вышеукатаииого выражения не изменится сели ыипеать сю в виде
(12*salary) +100.
Introduction to OracleS/; SQL 1-12
Использование скобок
SELECT last_name, salary, 12*(salary+100)
FROM employees;
I AS! JiAMF SAI AKY 1Z(SAI ARY» llllli
h mg 24000 28ЖЮ
jkochhar 17000 205200
{De Haan 17000 205200
fHunold 9000 109200
Ernst №00 73200
li-ureulz 4200 51600
iGietz R?ll Hjjj'Jl'i
20 >ows selected
ORACLE
1-13 Copyright © Oracle Corporation 2001 All rights reserved
Использование скобок
И вменить стандартный порядок выполнения операторов можно с помощью круглых скооок
Пример па слайде показывает вывод имени, зарабопюй платы п ютовою дохо ы всех служащих В
зюм случае годовой доход вычисляется путем умножения на 12 суммы ок тада и ежемесячной
премии в размере 100 долларов Благодаря скобкам сложение выполняется до умножения
Introduction to Oracle9i: SQL 1-13
Неопределенное значение (null)
• Неопределенное значение (null) - это значение,
которое недоступно, не присвоено, неизвестно
или неприменимо.
• Это не ноль и не пробел.
SELECT last_name, job_id, salary, commissionjpct
FROM employees;
f IASTNAMT Г JOBJO I SALARY COMMISSION РСГ
king AD PRES 24000
:Kcchhar ADVP 17QOO
iZIolkey |SA_MAN | HJbuu
[Abel [SAREP | 11ГО0
[Taylor jSA.REP I BbOQ
,i пучп» AL JWjh A.—
jc-ietz A' Al COUNT BJOH
20 rows selected
ORACUe
Copyright© Oracle Corporation. 2001 All rights reserved
Неопределенные значения
Если в строке отсутствует значение какого-либо столбца, CMin.ieicB, что столбец содержит
неопределенное значение (NULL)
Неопределенное значение - это значение, коюрос недоступно, не присвоено, пен iiiccnio или
неприменимо. Uro не ноль н нс пробел. Ноль это число, а пробел - символ.
Неопределенные значения допускаются в столбцах с данными нобою вша ta исключением
случаев, когда столбец бььч создан с О1ран1|ченнем NOT NULL или PRIMARY KEY.
Столбец CCMMISSICNPCT таблицы EMPLOYEES показывает, что получать комиссионные могут
только продавцы. Другие служащие нрава па комиссионные не имеют. Эю показано
неопределенным значением в столбце.
Introduction to Огас!е9Л- SQL 1-14
Неопределенные значения в
арифметических выражениях
Результат вычисления выражения, содержащего
неопределенное значение, также будет
неопределенным.
SELECT last_name, 12*salary*comm±ssion_pct
FROM employees;
lAST TTAUIT U'SATAIIYT.OIIMISSIOTI PCT
"•и
k nt hhar
Zlolkey . W
Taylor лДО
Higgins
C-iei:
Л» lows selected
ORACkje
1-15 Copyright © Oracle Corporal ton, 2001 Ail righl s reserved
Неопределенные значения (продолжение)
Если какой-либо столбец н арифметическом выражении содержит неопределенное итачснис.
результат вычисления также будет псопреде leiun-iu (NULL). Например, иоттытка деления па ноль
закапчивается ошибкой Посели попытаться разделить число на неопределенное значение,
результатом будет неопределенное значение
В примере па слайде служащий KING не является продавцом и нс получает комиссионных I к
столбец COMMISSION_PCT в арифметическом выражении содержит неопределенное значение,
результатом также будет неопределенное итачснис
Болес подробную информатике ем к руководстве OraeleVi S(Jl. Reference. Basic Elements of SQL ’
Introduction to Oracle9r. SQL 1-15
Псевдоним (алиас) столбца
• Альтернативный заголовок столбца.
• Удобен при вычислениях.
• Следует сразу за именем столбца; ключевое
слово AS между именем столбца и
псевдонимом необязательно.
• Заключается в двойные кавычки, если
содержит пробелы, специальные символы или
различает регистры символов.
ORACLe
vie
Copyright © Oracle Corporation, 2001 All rights reserved
Псевдонимы столбцов
Обычно при выводе результатов запросов iSQL*Plus исно n.iyei в качссшс заголовка выходного
столбца имя выбранною столбца таблицы Такой заюловок нс всегда озражаст содержимое
столбца и можс! быть непонятным Изменить за! оловок можно с помощью псевдоннмн столбца
(алиша).
Псевдоним указывается после имени столбца в списке SELECT через пробел. Ио умолчанию
псевдонимы выводятся заглавными буквами. Псевдоним, содержащий пробелы или специальные
символы (например, И пли $) или различающий регистры символов, заключается в двойные
кавычки (" ").
Introduction to Oracle!)/. SQL 116
1-1Э Copyright © Oracle Corporation 2001. All rights reserved.
Использование оператора конкатенации
В этом примере соединяются столбцы LAST NAME и JOB_ID ; они получают псевдоним
Employees Следует отметить, что соединенные столбцы (должность и имя служащего) поратуют
единый выходной столбец.
Ключевое слово AS перед псевдонимом упрощает чтение предложения SELECT.
Introduction to Oracle9<; SQL 1-19
Строка символов - литерал
• Литерал - это символ, число или дата,
включенные в select список.
* Даты и символьные литералы должны быть
заключены в апострофы.
* Каждая символьная строка выводится один раз
для каждой возвращаемой строки таблицы.
ORACLe-
1-20
Copyright © Oracle Corporation, 2001 All rights reserved
Символьные литералы
Литерал- эго любой символ, число или дата, включенные в SELECT список и не являющиеся
именем или псевдонимом столбца. Литерал выведшей для каждой возвращаемой строки.
Литеральные строки в виде свободного текста можно включай, в рсзульта1ы запросов, они
обрабатываются так же. как столбец из списка SELECT.
Символьные литералы и лшералы с да>ами должны быть заключены н одиночные апос!рофы (‘
цифровые литералы в апострофы нс заключаются
Introduction to Oracle9/.- SQL 1-20
Использование символьных литералов
SELECT last_name ||1 is a 'lljob_id
AS "Employee Details"
FROM employees;
finplnynr Oetaih
King is a AD_PRES
Kochhar is a AD VP
De Haan is a AD VP
Hunold is a IT_PROG
Emsl is a IT_PROG
Gietz isaAC-ACCOUNT
20 tows selected
OPACLe
1-21 Copyright О Oracle Corporation. 2001 All rights reserved.
Использование символьных литералов
На слайде покачан вывод имен и должностей всех служащих. Столбец называется Employee Details
Обратите внимание на пробелы, заключенные в апострофы, в команде SELECT. Эш пробелы
обличают чтение выходных данных.
В следующем примере имя н оклад каждого служащего соедпняюгся с литералом, чзо делает
выходные данные более понятыми
SELECT last name I I 1: 1 Month salary = ' I I salary Monthly
FROM employees;
Г~ — , MONTHLY
|King: 1 Month salary = 24000
|kochhar. 1 Month salary = 17000
|De Haan 1 Month salaty = 17000
|Hunold: 1 Month salaty = 9000
[Ernst 1 Month salary = 6000
[Lorentz: 1 Month salary = 4200
[Mourgos 1 Month salary = 5800
[Rajs: 1 Month salary = 3500
20 rows selected
Introduction to Oracle9r; SQL 1-21
Дублирование строк
По умолчанию выдаются все строки, включая
дубликаты.
SELECT department_id
FROM employees;
- - DEPARTMENT id
( 41
I 41
I CCI
I GO
w
I 60
I 50
Л0
70 tows selected
ORACLE
1-22 Copyright © Oracle Corporation, 2001 All rights reserved
Дублирование строк
Если не задано иного, »SQL*Plus нс устраняет дубликаты при выводе pciyai.TaioB запроса. На
слайде показан вывод всех номеров отделов из таблицы EMPLOYEES. Обраипс внимание на го,
что номера отделов повторяются
Introduction to OracleS)/.- SQL 122
Устранение строк-дубликатов
Дубликаты устраняются с помощью ключевого
слова distinct в команде select.
SELECT DISTINCT department_id
FROM employees;
DEPARTMENT ID
10
20
M
60
a.t
90
110
В rows selected
ORACLE
Copyright © Oracle Corporation 2001 All rights reserved
Устранение строк-дубликатов
Для устранения дубликатов в результатах запроса необходимо задать ключевое слово DISTINCT в
предложении SELECT сразу после ключевого слова SELECT. В примере на сланце таблица
EMPLOYEES содержит 20 строк, но номеров отделов в таблице всего семь.
После квалификатора DISTINCT можно указать несколько сюлбцов. DISTINCT влияет на все
выбранные столбцы, и резулыат запроса содержит нсповторяюн1исся комбинации их iiianeiiiiii
SELECT DISTINCT departmentid, job_id
FROM employees;
[ ” DEPARTMENTJD JOBJD
f 10 Iad^asst
[ 20’ |mk_man
[ 20~[MK_REP
I 50 [STCLERK.
Г 50 |ST_MAN
60 |lT_PROG
B0~|sA_MAN ~
I ’ 80~ [SA>EP
13 rows selected
Introduction to Oracle!)/.- SQL 1-23
Взаимодействие SQL и /SQL*Plus
~|t'SQL*Plus|~l___
Интернет-
браузер
I
Команды
»SQL‘Plus
Команды SQL
Сервер
Oracle
Клиент
Сформатированный отчет
Copyright © Oracle Corporation, 2001 All rights reserved
ORACLE
SQL и iSQL'Plus
SQI. - эго язык команд для связи с сервером Oracle из любого инструмента или приложения Oracle
SQL имеет много дополнений.
iSQI.*l'his - но тшетрумент Oracle, который распознает команды SQL, передаст их на исполнение
серверу Oracle и имеет свой собственный язык команд
Особенности SQL
• 11с трсбуег опыта программирования у пользователя.
• Непроцедурный язык.
• Сокращает время, необходимое для еотдаиия и сопровождения систем.
• близок к английскому языку.
Особенное г и i'SQL*Plns
• Доступен из брау тера.
• Допускает ввод нсрегламстттированных команд.
• Позволяет оперативно редактировать строки команд SQL
• Управляет параметрами среды.
• Позволяет форма тировать результаты запросов в виде простых отчетов
* Позволяет обращаться к местным и удаленным битам ла.....
Introduction to Oracle9<: SQL 1-24
Сравнение команд SQL и /SQL*Plus
SQL • Язык • Стандарт ANSI * Сокращать ключевые слова нельзя • Команды манипулируют данными и определениями таблиц в базе данных /SQL*Plus * Среда • Разработка Oracle • Сокращать ключевые слова можно • Команды не позволяют манипулировать данными в базе данных • Выполняется в браузере • Загружается централизованно, не должен быть размещен на каждой машине
Команды SQL Команды tSQL*Plus
ORACL€
| 1-26 Copyright © Oracle Corporation, 2001 All rights reserved
SQL и iSQL*Plus (продолжение)
В следующей таблице сравниваю гея SQL и iSQL*Plus:
SQL rSQL*Plus
Язык связи с сервером Oracle для доступа к данным Распознает команды SQL н передает их на сервер
Основан на SQL ANSI (Американского национального института стандартов) Интерфейс для выполнения команд SQL, разработанный корпорацией Oracle.
Манипулирует данными и определениями таблиц в базе данных Нс позволяет манипулировать значениями в базе данных
Нс имеет символа продолжения Использует символ продолжения (-), если команда занимает более одной строки.
Нс допускает сокращений Допускает сокращения
Использует функции для некоторого форматирования Использует команды для форматирования данных
Introduction to Oracle9r.- SQL 1-25
Обзор /SQL*Plus
После входа в /SQL*PIus можно:
• Получить описания структуры таблиц
* Отредактировать команды SQL
• Выполнить команды SQL из /SQL*Plus
* Сохранить команды SQL в файлах и добавить
команды SQL к файлам
• Выполнить сохраненные файлы
* Загрузить команды из файла в окно
редактирования zSQL*Plus
ORACLE*
1-2в Copyright © Oracle Corporation, 2001 All rights reserved
r’SQL'Plus
iSQL’PIus эго эго среда, в которой можно делай, следующее'
• Ныпоитть команды SQL для выборки, изменения, добавления и удаления данных в 1>Д
* Форматировать, результаты запроса, выполнять с ними вычисления, .хранить и печатать в виде
отчетов
• Создавать скритп-фай.1Ы с командами SQL для повторною использования.
Команды tSQL*PIhs можно разделить на следующие категории
Kaici орнн Назначение
Среда Влияет на общее поведение операторов SQL во время сеанса
Формат Форматирует результаты запросов
Работа с файлами Сохраняет команды в текстовом скрппт-файлс и выполняет команды пт таких файлов
Выполнение Передаст команды SQL из браузера на сервер Oracle
Рсдактпровалне Изменяет команды SQL в окне редактирования
Взаимодействие Позволяет создавать переменные, переливать их в команды SQL, печатать значения переменных и посылать сообщения на жран
I 1рочсс Различные команды для подключения к Б/l. манипулирования средой /SQL*Plus и вывода определений столбцов.
Introduction to Oracle9i.- SQL 1-26
Вызов /SQL*Plus
В браузере Windows:
О» fio £trr,nu*^ta
4’ 3 '5 «а- Тм! «Г О II Н
Вьск —ВеЬ«1 Пеле SmkH N*Uc<>e РггЧ Securty Shop мВ
: %jf * BwdyMffct -Л tOC*tm |http z/xboct aj aacte com/isdpim —} (f3* '*'’*'*** ReWed
ORACLG
1-27 Copyright © Oracle Corporation 2001 All rights reserved.
Вызов tSQL*Plus
1. Запустите браузер.
2. Введите адрес URL среды iSQL*l‘lus.
3. Введите имя пользова1сля, пароль и идет ифика гор соединения
После успешного вызова iSQL*PIus на экране появится следующее:
Introduction to Огас1е9<,- SQL 1-27
Среда /SQL*Plus
ORACU=
1-28 Copyright © Oracle Corporation, 2001 All rights reserved
Среда rSQL*Plus
В окис браузера iS{)L *Plus находя тся следующие основные области:
I Поле Enter statements; предназначено для ввода команд SQL н iSQL’Plus
2 Кнопка Execute; щелкннте на агон кнопке, чтобы выно ншть команды, коюрые находятся в
ноле Enter statements
3 Выпадающий список Output; но умолчанию установлено установлено значение Work Screen,
в соответствие с которым результаты выполнения команд SQL выводятся ниже тюля Enter
statements. Другие возможные значения - File (результаты выводятся в заданный файл) н
Window ( результаты выводятся на жран в отдельное окно).
4 Кнопка Clear Screen, используется для очистки ноля I nter statements
5 . Кнопка .Save Script; используется для сохранения в файле содержимого поля Enter statements
6 . Поле Script Location, предназначено для гадания имени и местоположения скрни-файла,
который необходимо выполнить.
7 Кнопка Browse; щелкните на згой кнопке, чтобы вызвать диалоговое окно Windows Elie Open
для поиска файла
8 Пиктограмма Exit, щелкните па этой пиктограмме, чюбы выйти и т сеанса iSQL*PIus и
вернуться в окно iSQL*Plus l.ogOn.
9 Пиктограмма Help, щелкните на этой пиктограмме, чтобы получи ть доступ к документации но
(SQL* Pins
10 Пиктот рамма Password, щелкните на згой пиктограмме, чтобы изменить ваш пароль
Introduction to Oracle9i; SQL 1-28
Вывод структуры таблицы
Вывод структуры таблицы производится с
помощью команды DESCRIBE zSQL*Plus
DESC[RIBE] имя_таблици
ORACLE1
1-29 Copyright © Oracle Corporation 2001 All lights reserved
Вывод структуры таблиц
В iSQL’PIus для вывода структуры таблицы иснольтуегся команда DESCRIBE. Эта команда выдаст
имена столбцов и типы данных, а также сведения о том, должен ли столбец содержать данные.
Синтаксис
имя таблицы имя любой существующей таблицы, представления или синонима.
доступного пользователю
Introduction to Oracle9r.- SQL 1-29
Вывод структуры таблицы
DESCRIBE employees
EMPLOYE EJD FIRST NAME LAST NAME EMAIL PHONE NUMBER HIRE DATE JOBJD SALARY COMMISSION_PCT MANAGERJD DEPARTMENIlD Hamit 1 Kull? Тура
NOT NULL ‘NOT NULL NOT NULL inch null NOT Nl Ц L NUMBER^) VARf HAR2(20) VARCHAR2(25) VARl.HAR2(25) :VARC HAR2p0) 'DATE VAR«.'.HAR2(101 №.WbER(82) Nl .IMEiLR(2.2) NUMfURib) NUMDER(4)
ORACLE
I 1-30 Copyright © Oracle Corporation, 2001. All rights reserved
Вывод структуры таблицы (продолжение)
Пример показывает вывод информации о структуре таблицы DEPARTMENTS
Результат•
Hull? покатывает, дочжен ли столбец содержать данные; NOT NULL означает. что
наличие данных в столбце обязательно;
7т/»е пока тывает тип данных для столбца
Ттнты данных описаны в следующей таблице:
Тин данных Описание
NUMBER(p,s) Числовое значение с максимальным количеством ра (рядов р и количеством разрядов после десятичион точки s
VARCHAR2(S) Символьное значение переменной длины, макс длина - s
DATE Дата и время в диапазоне с 1 января 14712 т до и э по 31 декабря 9999 г н.э
CHAR(s) Символьное значение постоянной длины s
Introduction to Oracle9i.- SQL 1-30
Использование скрипт-файлов
ог?АС1_е
ZSQL*l>lus
Passwx-J Loi'-'ul н?мр
script Locator. | Browse... | Lwil Script |
ORACLE'
1-31 Copyright © Oracle Corporation 2001 AH rights reserved
Создание скрипт-файлов
Чтобы сохранить команды и операторы, находящиеся в ноле Enter statements окна iSQL^Plus,
выполните следующие действия.
I Введите команды SQL в поле Enter statements.
2. Щелкните на кнопке Save Script В результате откроется диалоговое окно Winduivs Eile Save.
Задайте имя файла, ио умолчанию расширение файла . html Тип файла можно измени п> на
текстовый или . sql
Save As
QE3
Save kt |<~i|lemp T] f5| C$j [Ц EZl|
Rename: |emp_sql
Saveaslflxx JHTML Files
| Save |
"3 Cancel |
Introduction to Oracle9/.- SQL 1-31
Использование скрипт-файлов
ORACLE'
Helu
ORACLe
Copyright © Oracle Corporation. 2001 All rights reserved
Загрузка и выполнение скрипт-файлов
Чтобы использовать в i'SQL*Plus команды и операторы, коюрые бычн сохранены в скрннт-
файле:
I. Введите или найдите, щелкнув на кнопке Browse, имя и местоположение скрин i-файла.
2. Щелкните на кнопке Load Script; содержимое файла кпрутшея н поле Enter statements
3 Щелкните па кнопке Execute в результат команды, которые находятся в ноле Enter
statements, будут выполнены
Introduction to Oracle9/r SQL 1-32
Использование скрипт-файлов
ORACLE
/SQJ ,*Plus
Password
LlSlfi
Fnt»-r srat^rnent
DESCRIBE employees
SELECT first_name, last naiae, job_id
FROM employees;
Browse... J Load Script |
Execute | [pile
3
Clear Screen | Save Script |
ORACLE’
Copyright © Oracle Corporation, 2001 All rights reserved
Сохранение результатов выполнения в файле
Чтобы сохранить результаты работы команд SQL и iSQL*Plus в файле.
I. Введите команды SQL и rSQL*Plus в поле Enter statements.
2. Измените тип места вывода (Output) на File
3 Щелкните на кнопке Емсте для выполнения команд находящихся в ноле Enter statements
Откроется диалоговое окно Windows Etle Save Задан te имя файла, но умолчанию
расширение файла .html . Тип файла можно нзменшь Результат выполнения будут
записаны в указанный файл.
Introduction to Oracle91 SQL 1-33
Итоги
В этом уроке вы познакомились с тем, как:
• Задавать команду select, по которой:
- возвращаются все строки и столбцы таблицы
- возвращаются определенные столбцы таблицы
- используются псевдонимы для изменения
наименований заголовков столбцов
• Использовать среду /SQL*Plus для ввода,
сохранения и выполнения команд SQL и zSQL*Plus.
SELECT *|{[DISTINCT] столбец!выражение [псевдоним],...}
FROM таблица;
ORACLG
1-34 Copyright © Oracle С огр ore I юл, 2001 All rights reserved
Команда select
1 la ном шняrun вы научились производить выборку данных с немощью команды SELECT
SELECT * I( [DISTINCT] столбец [псевдоним],...}
FROM таблица;
Синтаксис:
SELECT
DISTINCT
столбец|выражение
псевдоним
FROM таблица
список, содержащим, но крайней мерс, один столбец
выбирает все столбцы
подавляет дубликаты
выбирает указанный сюлбеи или выражение
присваивает заданному столбцу друг oil заголовок
укашваст |аблнцу, содержащую сюлбцы
r'SQL*Plus
i'SQL*l’lus - это исполнительная среда, которую можно использовать для посылки команд SQL на
сервер баз данных, а также для редактровання и сохранения команд SQL в файле. Команды,
находящиеся в файле. Moiyi за1см бьпь вызваны для выполнения.
Примечание
Среда унинпы SQL’Plus рассматривается и ирилижеиип С.
Introduction to Oracle9/.- SQL 1-34
Обзор практического занятия 1
* Выборка данных из разных таблиц
• Описание структуры таблиц
• Выполнение арифметических вычислений и
задание имен столбцов
• Использование iSQL*Plus
ORACLE'
1-36
Copyright © Oracle Corporation, 2001. All rights reserved
Обзор практического занятия 1
Это первое из многочисленных практических занятий. Решения (если они потребуются)
содержатся в Приложении А Упражнения охватывают все темы лою урока Упражнения 2 4
выполняются на бумаге
В ходе многих практических занятий предлагаются упражнения повышенной сложности, а также
дополнительные упражнения, если осталось время Эти задания следует делать только после того,
как вы ответили па все основные вопросы в отведенное время
Выполняйте упражнения медленно и точно. Можно поэкспериментировать с созданием и
выполнением скрип г-файлов. С вопросами можно всегда обратиться к преподавателю.
Упражнения, выполняемые на бумаге
В вопросах 2-4 обведите кружком “Да" или “Нет"
Introduction to Oracle9i.- SQL 1-35
Практическое занятие 1
I. Вызовите rSQL*Plus. Пдсптпфнкатор цолыоттатсля п пароль сообщиi инструктор.
2. Команды rSQL*Plus помогал»! запрашивап. данные
Да/Нст -
3. Будет лн успешно выполнена зга команда SELECT?
SELECT lastname, job_id, salary AS Sal
FROM employees;
-t Да/Псг
4 Буде! ли успешно выполнена эта команда SELECT ?
SELECT *
FROM jobgrades;
4Да/Пег
5. Команда SELECT содержит 4 ошибки. Может ли вы их указан.?
SELECT employee_id, last_name^
sal x 12 ANNUAL SALARY
FROM employees;
6. Покажите структуру таблицы DEPARTMENTS . Выберите все данные пт таблицы
DEPARTMENTS.
| Name - I Null? type
[departments |not null |NUMBER(4)
|department_name [not null jvARC HAR2(30)
|manager_id r [NUMBERS)
[locationjd [ [number^)
[OCIWUMLNTJD [DLPARTMfNrjiAME [mANAGLRID |LOCATIONJD
10 [Administration 200 | 1700
| 20 (Marketing | 201 | 1800
| 50 (Shipping 124 ( 1500
I и (it j 103 I 1400
| 80 (Sales 149 | 2500
90 (Executive 100 [ 1700
110 (Accounting 205 | 1700
190 (Contiacting [ 1700
8 rows selected
Introduction to Oracle!)/; SQL 1-36
Практическое занятие 1 (продолжение)
7. Покажите структуру таблицы EMPLOYEES . Составьте запрос для вывода имени каждою
служащего, должности, даты найма и номера Номер служащего должен быть первым
Сохраните свою команду SELECT в файле 1аЫ_7 . sql
Name П Null? [ Type
[EMPLOYEEJO NOT NULL |NUMBER(6)
FIRST NAME |VARCHAR2(20)
[last_name [email NOT NULL |VARCHAR2(25)
NOT NULL [VARCHAR2(25)
[PHONENUMBER i |VARCHAR2(2O)
[HIRE_DATE NOT NULL (DATE
Ijobj'd NOT NULL |VARCHAR2(10)
SALARY [NUMBER(8,2)
[COMMISSION PCT |NUMBER(2.2)
[MANAGERJD I i |NUMBER(5)
DEPARTMENTJD I NUMBERS)
8 Выполните запрос из файла 1аЫ 7 . sql.
Г EMPLOYEEJD [~ LAS1HAME | JOUID [ StartOate
100 |King |ad_pres [l 7-JUN-87
101 |Kochhar |ad_vp [21 SEP 89
102 |De Haan |ad_vp |l3-JAN-93
| 103 |Hunold |lT_PROG [03-JAN-90
104 [Ernst |1T_PROG |21-MAY-9t
107 [Lorentz |lT_PROG [07 FEB-99
124 [Mourgos |ST_MAN [16-NOV-99
141 [Rajs [STCLERK [17-OCT-95
142 [Davies [ST_CLERK [29 JAN 97
143 [Matos |ST_CLERK |15 M.AR98
144 [Vargas [st CLERK [09-JUL-98
149 [Zlotkey |SA_MAN [29-JAN-00
| 205 [Higgins |ac_mgh [07 JUN94 ।
206 |Gietz |ac_account [07 JUN 94
20 rows selected
Introduction to Oracle9r; SQL 1-37
Практическое занятие 1 (продолжение)
Q CoLiaui.iL- laupoc гая вывода ненов 1орн|онц|хся до i/mivcicii hi iaf> iiuu.i EMPLOYEES
JOB ID
|AC_ACCOIJNT
|AC_MGR
|ad_asst
|ad_pres
|ad_vp
|lT_PROG
|mk_man
|Mk_REP
|SA_MAN
[sarep
|ST_CLERK
|ST_MAN
12 rows selected
Если спалось время, выполните следующие упражнения
10 Скопируйте команды нз файла 1аЫ_7. sql в окно редактирования rSQL*Plns 1 la iobiiic
столбцы Emp If, Employee, Job и Hire Date . Выполшпе запрос еще раз
Einp A | Employee .lull Hiie Datr
ICO (King 'AD_PRES 117-JUN-67
101 [kochhai !aD_VP >21-SEP-89
102 |De Haan |ad_vp [l3 JAN 93
103 |Hunold !ff_PROG (03-JAN-90
104 |Einst ,;IT_PROG |21-MAY-91
107 |Lorentz ,IT_PRDG [07 FEB-99
124 [Mourgos iST_MAN pb-NOV-99
141 |Rajs |ST_CLERK |17-ОСТ-Э5
142 |Davies |ST CLERK |29- JAN-97
143 [Matos |ST_CLERK |15 MAP-96.
144 |Vargas ‘ST.CLERK OS JUL-48
206 |Gietz [aC_ACCC'L1NT 07-JUN-94
20 rows selected
Introduction to Oracle9r. SQL 1-38
Практическое занятие 1 (продолжение)
11. Выведите на экран имя, соединенное с ндешпфикаюром должности через запягую и пробел
Назовите новый с голбец Employee and Title.
| Employee and Title
[king, AD_PRES
|kochhar, AD_VP
|Ое~НашТ[АсГ\/Р—
iHunold, IT J’ROG
[ErnstJT_PROG
[Lorentz, if PROG
Itvlourgos, ST MAN
|Rajs. ST_CLERk
[Davies, ST CLERK
IGietz, AC ACCOUNT
20 rows selected
Если вы хотите усложнить задачу, выполни ie следующие упражнения.
12. Создайте запрос для вывода всех данных из таблицы EMPLOYEES. Разделите столбцы
запятыми. Назовите столбец THE OUTPUT.
[ THEOUTPUT
[100, Steven, King, SKING.5I5.123.4567 .A0_PRES„17-JUN-87,24000, .90
[ioT^Neena.Kochhar.NKOCHHAR,515.123 4568[AD[vPj6o[2TsEP-89,17000,,90
[lO2.Lex.De Haan.LDEHAAN,515.123.4569 tAD_VPJ0d[f3-JAN-93[r7000790
[i 03 [Alexander .Hunold .AHUNOLD ,590.423 4567 ,IT_PROGJ02.03-JAN-90,9000, ,60
[l 04 .Bruce .Ernst ,BERNST59O423?45&0,lf_PROG~i0321 -MAY-91,6000 „60
[l 07 .Diana .Lorentz,DL ORENTZ.59U 423 5567 ,IT_PROG,103,07-FEB-99,4200, ,60
[i24,KevinlMourgos,kMOURGOS,650.f23.5234."sT_MAN.100,16-NOV-99.5800„50
|l41,Trenna.Rajs.TRAJS,650.121 6009,ST_CLERK,124,17-OCT-95,3500..50
|206,William.Gietz,WGIETZ,515.123 8181 ,AC_ACCOUNT.205.07-JUN-94,8300,.1 io”
20 rows selected
Introduction to Oracle9r.- SQL 1-39
Introduction to OracleSi.- SQL 1 -40
Ограничение и сортировка выходных
данных
ORACLE
Рассматриваемые вопросы
• Ограничение количества строк, возвращаемых
запросом.
• Сортировка возвращаемых строк.
ORACUe
2-2 Copyright © Oracle Corporalton. 2001. All righls reserved
Цели урока
Иногда при выборке информации hi базы данных необходимо ограничить количество выходных
строк или задать последовитолыюсть их вывода. В этом урокс обсуждаю юя команды, и помощью
которых выполняются эти действия.
Introduction to Oracled/.* SQL 2-2
Ограничение количества выбираемых
строк путем отбора
EMPLOYEES
lui'iorilio s| lASlHAUI i JOflja J l)U4U4f)llHlJI>
| 100 AC’PRES WJ
101 (kochhar !AD_VP 90
102 |0e Haan ;Ati W 90
103 |Hunold jTPROG 60
104 |Einst i|T_PROG 60
107 |lo.er.t; 'IT PROG 60
124 jMoufnos 'ST MA* 50
20 tows selected
“выбрать всех '
служащих отдела
90”
Р EMPLOYEE JD IAST_NAME | JOB ID DEPAflTWENTJD
100 |Kmg [aD_PRES 90 1
1... 101 Ikochhar >A0_VP 90 :
102 |De Haan |A£j_VP 90 |
i OPACLG
2-3 Copyright © Oracle Corporation, 2001. AH rtghls reserved.
Ограничение количества строк с помощью критериев выборки
В примере на слайде требуются данные о всех служащих отдела 90. В этом случае будут
возвращены только строки с значением 90 в столбце DEPARTMENT_ID . Этот метод ограничения
лежит в основе предложения WHERE языка SQL.
Introduction to OracleSt. SQL 2-3
Ограничение количества выбираемых
строк
• Количество возвращаемых строк можно
ограничить с помощью предложения where .
SELECT *|{[DISTINCT] столбец|выражение [псевдоним]}
FROM та блица
[WHERE условие(я)];
• Предложение where следует за предложением
FROM.
ORACLE
2-4 Copyright © Oracle Corporation, 2001. All rights reserved.
Ограничение количества выбираемых строк
Строки, выбираемые по запросу, можно граничить с помощью предложения WHERE
Предложение WHERE следует сразу за предложением EROM и содержит условие, коюрос должно
быть справедливо для выбираемых строк
Спи таксис
WHERE ограничивает количество выбираемых строк, задавая условие выборки
условие условие, состоящее из имен столбцов, выражении, коне tan г п оператора
сравнения.
Предложение WHERE может сравнивать значения в сюлонах, лн 1сралы, арифме! ичсскис
выражения в функции. Предложение WHERE состон i hi трех ысмснюв
имя столбца;
опера юр сравнения,
• имя столбца, копе тан га пли список значении
Introduction to Oracle9/,- SQL 2-4
Использование предложения where
SELECT employee_id, last_name, jot>_id, department_id
FRCM employees
WHERE departmant_id “90;
EMPLOYEE ID ? LASTJIAME JOB ID
100 King .AD_PRES
101 kochhar JADVP
102 De Haan !aD_VP
DEPARtMEbTJD
90
90
90
ORACLJ&
2-6 Copyright © Oracle Corporation 2001 All rights reserved
Использование предложения where
Команда SELECT в примере возвращает фамилию, идет пфпкатор должности и номер отдела
каждого служащего, работающею в отделе 90.
Следует отметить, что, если в предложении WHERE сравнивается значение символьного столбца,
например, должность па совпадение с SA_REP, необходимо учитываю ю, чю в символьных
строках различаются регистры символов.
Introduction to Oracle9/.- SQL 2-5
Символьные строки и даты
• Символьные строки и даты заключаются в
апострофы.
• В символьных значениях различаются
регистры символов, а в датах - форматы.
• Формат дат по умолчанию - DD-MON-RR
(число-месяц-год).
SELECT last_name, job_id, department_id
FROM employees
WHERE last name = ‘Goyal1;
ORACLG
2-6 Copyright © Oracle Corporation 2001 All rights reserved
Символьные строки и даты
Символьные строки и да>ы в предложении WHERE должны быть включены в апострофы (' *).
Числовые константы в апострофы не заключакнея.
Регистры символов различаю гея при любом поиске ио сiроке символов Запрос в следующем
примере нс возвращает ни o/iiioii строки, i к. в i а блице EMPLOYEES все имена хранятся в символах
соо1ветс1вующего pci ncipa
SELECT lastname, job_id, department id
FROM employees
WHERE lastname = ’GOYAL
Oracle хранит даты во внутреннем числовом формате, представляющем его теше, год, месяц, числи,
часы, минуты и секунды Формат даты по умолчанию - DD-MON-RR (число-мссяц-юд)
Примечание
Изменение ciainapinoro формата даты обсуждается в иавс 3
Introduction to Oracie9i; SQL 2-6
Операторы сравнения
Оператор Значение
= Равно
> Больше, чем
>= Больше или равно
< Меньше, чем
<= Меньше или равно
о Не равно
ORACLE
2-7 Copyright © Oracle Corporation, 2001 All rights reserved
Операторы сравнения
Операторы сравнения используются в условиях, где одно выражение сравнивается с другим
значением или выражением. Предложение WHERE имеет следующий формат
... WHERE выражение оператор значение
Примеры
... WHERE hire_date='01-JAN-95'
... WHERE salary>=6000
... WHERE last name= 1 Smith'
Псевдонимы не.могут использоваться в предложении WHERE .
Примечание
Символы ! = и Л= могут также применяться для проверки условия не ровно.
Introduction to Огас1е9/; SQL 2-7
Использование условий сравнения
SELECT last_name, salary
FROM employees
WHERE salary <= 3000;
LAS I НЛМЕ
SZ.IAHV
ORACl_€
2-8 Copyright © Oracle Corporation. 2001 All rights reserved
Использование условий сравнения
В примере на слайде команда SELECT выбирает пт таблицы EMPLOYEES фамилии и оклады всех
служащих, чей оклад меньше или равен $3000 Следует отмстить, что в предложении WHERE
указано явное значение $3000 для сравнения с окладом в столбце SALARY таблицы EMPLOYEES.
Introduction to Oracle9r: SQL 2-8
Другие условия сравнения
Оператор Значение
BETWEEN . . .AND. . . Находится в диапазоне от одного значения до другого (включительно)
IN(список) Совпадает с каким-либо значением списка
LIKE Соответствует символьному шаблону
IS NULL Является неопределенным значением
ORACL.G
2-9 Copyrighl © Oracle Corporalton, 2001. All rights reserved
Introduction to Oracle9Z.- SQL 2-9
Использование условия BETWEEN
Условие between используется для вывода строк
на основе диапазона значений
SELECT last_name, salary
FROM employees
WHERE salary BETWEEN 2500 AND 3500;
Нижняя Верхняя
граница граница
LAST.KAMl SAI ЛИТ
Рзд
[?a»tes
Malos
Varrps
ЗУ??
3iaj
2ЧЮ
2-10
Copyright © Oracle Corporation. 2001 All righis reserved
ORACLE
Условие between
С помощью условия BETWEEN можно проверял, строки па вхождение в заданный диапаюп
значений Диапазон имеет нижнюю и верхнюю i ранним.
Команда SELECT в примере выбирает из за6л|щы EMPLOYEES сгрокп дтя всех служащих, чьи
оклады находятся в диапазоне or $2500 до $3500
Граничные значения, задаваемые с помощью условия BETWEEN, exoihim в дпаиа юн (i с.
указывакися включишечыю}. Сначала необходимо задать нижнюю границу.
Introduction to Oracle9r: SQL 2-10
Использование условия in
Условие принадлежности in используется для
проверки на вхождение значений в список.
SELECT employee_id, last_name, salary, manager_id
FROM employees
WHERE manager id IN (100, 101, 201);
Г EURLaYEEJO £ CUJ • LAST.HAUr Г
| 202 ,Fa,
I 200 iWhalen
205 Higgins
| 101 Kochhar
102 [De Haan
124 [Mourgos
149 Hotkey
201 iitartslem
SALARY" V-Fl. MANAGER-ID
6000 201
4400 1 101
12000 1OI
17СП0 100 ’
17000 ' 100 ,
5000 100 I
10500 100
13000 too i
8 rows selected
ORACLE
2-11 Copyright О Oracle Corporation, 2001 All rights reserved
Использование условия in
Для проверки принадлежности значений к заданному списку нсполыуе1ся условие IN. Данное
условие также называют условием принадлежности.
В вышеуказанном примере запрашиваются данные о всех служащих, менеджерами которых
являются служащие иод номерами 100, 101 или 201. По каждому такому служащему выводится
номер служащего, фамилия, оклад и номер менеджера.
Условие IN может использоваться с данными любого типа. Следующий запрос возвращает строки
таблицы EMPLOYEES для всех служащих, чья фамилия входит в список фамилий в предложении
WHERE.
SELECT employee_id, manager_id, department_id
FROM employees
WHERE last_name IN (Hartstein', 'Vargas');
Если в список входят символьные строки и да1Ы, они должны быть заключены в апострофы (' ').
Introduction to Oracle!)/.- SQL 2-11
Использование условия like
• Условие like используется для поиска
символьных значений по шаблону с
метасимволами.
• Условия поиска могут включать алфавитные и
цифровые символы:
- % обозначает ноль или много символов;
— _ обозначает один символ.
SELECT first_name
FROM employees
WHERE first name LIKE 'S%';
ORACLE
2-12 Copyright © Oracle Corporation, 2001. All rights reserved
Условие like
Иногда точное искомое значение неизвестно. Условие LIKE позволяет выбрать строки,
соответствующие определенному символьному шаблону. Такая операция поиска называется
поиском по метасимволам (wildcardsearch).
Символ Описание
% Прсдоавлясг любую иоследова1елы!ОС1Ь из нуля или более символов
11 редей» вл яс i любой одиночный символ
Вышеуказанная команда SELECT возвращает пт |аблицы EMPLOYEES все фамилии служащих,
начинающиеся с буквы “S" Следует оьмешть, что буква “S”- заглавная Строки с фамилиями,
начинающимися со строчной буквы “s”, в выходные данные не попадут.
Условие LIKE может использоваться в качестве быстрого эквивалента искоюрых операции
сравнения BETWEEN. В следующим примере выводятся фамилии и типы найма всех служащих,
поступивших па paGoty с января по декабрь 1995 г.
SELECT last_name, hire_date
FROM employees
WHERE hire date LIKE '$95';
Introduction to Oracle9<; SQL 2-12
Использование условия like
* Метасимволы можно комбинировать.
SELECT last_name
FROM employees
WHERE last name LIKE
LASTJWUE ~ j/» Л . - ^.’2-
kochhar
Lorentz
Mourgos
• Для поиска "%" или можно использовать
идентификатор escape .
ORACLE
2-13 Copyright © Oracle Corporation. 2001. All rights reserved.
Комбинирование метасимволов
The Символы % и можно комбинировать с литеральными символами. Пример па слайде
показывает вывод всех фамилий служащих, вторая буква в которых - “о”.
Опция ESCAPE
Если поиск производится не по метасимволам, а по действительным символам “%” и ,
необходимо использовать опцию ESCAPE. 'Jia опция задает символ, присутствие которого
превращает метасимвол в обычный символ. Следующая команда SQL производи гея поиск по
с । роке, содержащей SA_ :
SELECT employeeid, last_name, job_id
FROM employees
WHERE job_id LIKE 1%SA\_%' ESCAPE 1\’;
| EMPLOYEE JD pT/" LAST.NAME □ Г J0B JD
149 Iziolkey ~ [SAMAN
| ’ 74 [Abel ” SA_REP
176 [Taylor SAREP
| 178 [Giant ,SA_REP
В опции ESCAPE задан символ обратной косой черня (\). Т.к. в шаблоне косая черта предшествует
символу подчеркивания (_), сервер Oracle воспринимает символ подчеркивания нс как метасимвол,
а буквально
Introduction to Oracle9Z: SQL 2-13
Использование условия null
С помощью оператора is null производится
проверка на неопределенные значения._
SELECT last_name, manager_id
FROM employees
WHERE manager id IS NULL;
| IASI НЛМ1 МЛНАЫВ in
'King
ORACL-6
2-14 Copyright © Oracle Corporation, 2001. All rights reserved
Условие NULL
Условие NULL имеет кпд IS NULL или IS NOT NULL.
Условие IS NULL проверяет па неопределенные значения Если условие верно, но говорит о том,
что шачеппе недоступно, нс присвоено, псп звесгно или неприменимо Проверка па равепсню ( ) в
атом случае невозможна гак как неопределенное значение не можег бьнь равно или неравно чему-
либо. В вышеуказанном примере занрашиванися фамилии и менеджеры всех служащих, не
имеющих менеджера
Следующая команда SQL запрашивает фамилии, должности и комиссионные всех служащих, не
имеющих нрава на комиссионные
SELECT lastname, job_id, commissionpct
FROM employees
WHERE commission_pct IS NULL;
Г LASTNAME j JOB ID I COMMISSION PCT
(king |ad_pres
kochliar |ad_vp
|De Haan [ad_vp I
|Gietz ' [AC_ACCOUNT
16 rows selected
Introduction to Oracle9r: SQL 2-14
Логические условия
Оператор Значение
AND Возвращает результат истинно, если выполняются оба условия.
OR Возвращает результат истинно, если выполняется любое из условий.
NOT Возвращает результат истинно, если следующее условие не выполняется.
ORACLS
2-16 Copyright © Oracle Corporation 2001 All rights reserved
Логические условия
Логическое условие формирует единый результат в зависимости от выполнения или невыполнения
двух условий или инвертирует результат оненкп одного условия В SQL имеется три логических
оператора:
• AND
• OR
• NOT
До сих пор в предложениях WHERE указывалось только одно условие С помощью операторов AND
(И) и OR (ИЛИ) можно задать несколько условий в одном предложении WHERE .
Introduction to Oracle9i. SQL 2-15
Использование оператора and
Оператор and (“И“) требует выполнения обоих условий.
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >=10000
AND job id LIKE ’%MAN%';
EMPLOYEE ID I LAST NAME JOB 10 SALAHY
149 IZtelkey (SA_MAM 10500
201 (Hartslmn MAN 1XOJ
ORACLE
2-16 Copyright © Oracle Corporation, 2001 All rights reserved.
Оператор AND
В эюм примере должны выполняться оба условия любы строка попала в результат. Следовательно,
в выходные данные войдут строки о служащих, должиосш которых содержат сроку MAN , и с
окладом более $10000
Любой поиск по символам различает верхний и нпжннй реперы Если не уклагь МАП з;н данными
буквами, ни одна строка не будет выбрана Символьные строки должны быть 11КЛЮЧСИЫ в
апострофы
Таблица iicihiiiiociii дли oiicpaiopa AND
Следующая таблпны показывает результаты сочоанкя двух выражений с оператором AND
AND TRUE FALSE NULL
TRUE TRUE FALSE NULL
FALSE FALSE FALSE FALSE
NULL NULL FALSE NULL
Introduction to Огас1е9/: SQL 2 16
Использование оператора or
Оператор or (“ИЛИ") требует выполнения любого
из условий.___________________________________
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >= 10000
OR job id LIKE 1%MAN%';
E twrcovetjo ft lASTjiAMe Г JOB JO { SALARY
Г 100 king |AD_PRES 24000
I0I ;kochhar ;AD VP 17000
102 De Haan [AD_VP 17000
[ 124 Mourgos !st_man 5800
149 Zlotkef jSAMAN 10500
[ 174 ,Abel SA_REP nooo
201 ,Hart stein Mk MAN 13000
I 205 Higgins A© MGR 12000
8 rows selected
ORACLE
2-17 Copyright © Oracle Corporation, 2001. AH rights reserved
Оператор or
В этом примере для выборки строки достаточно выполнения одного из условий. Следовательно,
будут выбраны строки для всех служащих с окладом более $10000 или должностью, в наименование
которой входит строка MAN .
Таблица истинности для оператора OR
Следующая таблицы показывает результаты сочетания двух выражений с оператором OR:
OR TRUE FALSE NULL
TRUE TRUE TRUE TRUE
FALSE TRUE FALSE NULL
NULL TRUE NULL NULL
Introduction to Oracle!)/.- SQL 2-17
Использование оператора not
SELECT last_name, job__id
FROM emp1oyees
WHERE job id NOT IN (’IT PROG’f ’ST CLERK’, ’SA REP');
Г “5^ lASTNAMf JOflJD
[king jADPRES
jkochhai lAD_VP
|d« Haan lAD_VP
(Mourgos jST_MAN
jzioU-ey ‘5A MAN
jWhalen -AD ASST
|ha‘t stern MI’.MAN
IF ay MJ ._REP
|Hiqgins A' _MbR
[п-ietz Ai-ACCOUin
10 rows selected
ORACLfi
Copyright © Oracle Corporation, 2001. All rights reserved
Оператор not
В этом примере запрашиваю гея фамилии и должности всех служащих, идензнфикаюр должности
которых не IT PROG, ST_CLERK или SA_REP.
Таблица истинное in для онсраюра NOT
Следующая таблица показывает резульин применения oneimmoiui NOT к условию
NOT TRUE FALSE NULL
FALSE TRUE NULL
Примечание
Оператор NOT может также использоваться е такими операторами SQL, как IN, BETWEEN, LIKE и
NULL.
WHERE job_id NOT IN ('ACACCOUNT’, ' AD_ V P ’ )
WHERE salary NOT BETWEEN 10000 AND 15000
WHERE last name NOT LIKE '%A%'
WHERE commissionpct IS NOT NULL
Introduction to Oracled/: SQL 2-18
Приоритеты операторов
Порядок вычисления Оператор
1 Арифметические операторы
2 Оператор конкатенации
3 Операторы сравнения
4 IS [NOT] NULL, LIKE, [NOT] IN
5 [NOT] BETWEEN
6 NOT
7 AND
8 OR
Изменить стандартную последовательность
вычислений можно с помощью круглых скобок.
ORACLe
2-19 Copyright © Oracle Corporation, 2001. All rights reserved.
Приоритеты операторов
Порядок, в коюром обрабатываются н вычисляются выражения, опрсдсляс1ся приоритетами
операторов. В таблице приведен действующий но умолчанию порядок обработки операторов.
Изменить стандартную последовательность вычислений можно с помощью круглых скобок, в
которые заключаются выражения, обрабатываемые первыми
Introduction to Oracle!)/.- SQL 2-19
Приоритеты операторов
SELECT
FROM
WHERE
last_name, job_id, salary
employees
job_id = 'SA_REP'
-job_id = 1AD_PRES'
salary > 15000;
LAST NAME.
=Abd
Taylor
Grant
JOB ID
A0_PRES
SAREP
SA REP
SA RLP
SALARY
гад,
I urn I
ton I
C?* *= '
2-20
Copyright © Oracle Corporation, 2001 All rights reserved
Пример приоритета оператора and
В этом примере два условия .
• Первое условие - идентификатор должное ! u AD_PRES и оклад более $15000
• Вюрос условие идентификатор должности SA REP.
Таким обратом, команда SELECT читается следующим образом :
“Выбран, строку, сели служащий-президент п зарабатывав! более $15000 ши если он
т opt овын представит ель ”
Introduction to Oracle9i; SQL 2-20
Приоритеты операторов
Использование скобок для изменения порядка
вычислений.
SELECT last_name, job_id, salary
FROM employees
WHERE)-* * (j ob_id = 1 SA_REP 1
OR ~job_id = 'AD_PRES')
AND salary > 15000;
[ TASTHAUT ., JIlHin VUARY
Ring PRES 24000
ORACLE
2-21 Copyright © Oracle Corporation, 2001. All rrghts reserved
Использование скобок
В этом примере два условия
• Первое условие - идентификатор должности AD_PRES или SA_REP.
• Второе условие - оклад более 15000
Таким образом, команда SELECT читается следующим образом:
“Выбрать строку, если служащий - президент или тортовый представитель и если он зарабатывает
более $15000."
Introduction to Oracle!)/.- SQL 2-21
Предложение order by
• Предложение order by используется для
сортировки строк
- asc: сортировка по возрастанию (используется по
умолчанию)
DESC: сортировка по убыванию
• В команде select предложение order by
указывается последним.
SELECT last_name, job-id, department id, hire date
FROM employees
ORDER BY hire date;
Г LASTHAME
| King
Iwhalen
ikochtiai
jHunold
jEinsI
ir
JOO JD
AD_PRES
ADASST
AD_VP
IT PROG
IT PROG
АГ’ '"
DLPARTMCNr ID
I
I
HIRE DATE
90 J7-JUN-87
10 17-SEP87
90 .21 SEP №
60 O3-JAN.90
60 U‘1 MAY 91
ОП
ORACLe
Copyright © Oracle Corporation. 2001 All rights reserved
Предложение order by
11оследова1пеяыи>стъ строк, возвращаемых запросом, не определена Отсортировать строки можно
с помощью пред.юлсения ORDER BY Если оно нснольтустся, то в команде оно должно быть
последним. Для сортировки можно задать выражение, псевдонимы или столбцы
Син таксис
SELECT выражение
FROM таблица
[WHERE условие (я) )
[ORDER BY (столбец, выражение)
[ASCIDESC]1;
ORDER BY
ASC
DESC
задает порядок вывода выбранных строк
упорядочивает строки в порядке возрастания ( нетто тыусгся по
умолчанию)
упорядочивает строки в порядке убывания
Если предложение ORDER BY ттс используется, порядок соргнроикн ис определен, н при повторе
запроса сервер Oracle может выдать строки в друзой последовательности. Для сортировки
выходных строк следует использовать предложение ORDER BY
Introduction to Oracle9i.- SQL 2-22
Сортировка в порядке убывания
SELECT last name, job id, department id, hire date
FROM employees
ORDER BY hire date DESC;
Zloikey JSA_MAN
.Mourgos :Grant JST_MAN )SAREP
Lorenlz JlT_PROG
Vargas ISTCLERK
Taylor |SA_REP
Malos !ST_CLERK
Fay Jmk REP
Davies |ST_CLERK
Abel ]SA_REP
King ADPRES
20 rows selected
JOHJO
r HiRtjmif’
BO ,29-JAN-00
50 16-N0V-99
24-MAY-99
ЬО C7-FEB-99
50 iO9-JUL96
ВО 24-MAP96
50 45-MAR-96
20 J7-AUG-97
50 29-JAN-97
B0 .) I-MAY 96
90 .1/ JUN-67
OPPAIUMEHIJI)
ORACLE
2-23
Copyright © Oracle Corporation, 2001 All rights reserved
Сортировка данных по умолчанию
По умолчанию данные сортируются в порядке возрастания.
• Числовые значения выводятся, начиная с самых малых, например, с I но 999.
• Даты выводятся, начиная с самых ранних, например, дата 0I-JAN-92 предшествует дате
01-JAN-95.
• Символьные значения выводятся в алфавитном порядке, например, от А до Z.
• Неопределенные значения при сортировке но возрастанию выводятся последними, а при
сортировке по убыванию - первыми.
Изменение порядка сортировки, используемого по умолчанию
Для изменения порядка сортировки на обратный у кажи i е ключевое слово DESC после названия
столбца в предложении ORDER BY. В примере на слайде первыми в списке появляются недавно
принятые служащие.
Introduction to Oracle!)/.- SQL 2-23
Сортировка по псевдониму столбца
SELECT employee_id, last_name, salary*12 annsal
FROM employees
ORDER BY annsal;
Г~ tMPUmtjo’ IAS1NAMI ANNSAL
144 Vargas 30UJ0 I
143 MaluS 31J.XJ
142 Djviss 3721X1
141 Rap 42fWt
107 Lorenl г JIJ41t
20U Whalen 5201»
124 Moutyus Ь'4'J.H
104 Emsl 7ЛТС
202 Fay 72СП1
178 Grant &4'.Л1
206 Gieli 99bW
100 king 280i««.
20 tows setecied
ORACLE
2-24 Copyright © Oracle Corporation. 2001 All rights reserved
Сортировка по псевдонимам столбцов
В прсдюжснии ORDER BY можно нсиользовагь псевдоним спюлГч1<1 В вышеуказанном примере
данные соршруются но годовому доходу
Introduction to Oracle9i: SQL 2-24
Сортировка по нескольким столбцам
Последовательность сортировки определяется
порядком столбцов в предложении order by.
SELECT last_name, department_id, salary
FROM employees
ORDER BY department_id, salary DESC;
[ IASI NAME DEPARTMENTJD lJH- % SALARY
{Wialen 10 I 44LI.I :
jHartslem 20 | 13000 ;
Ta, 20 I EO00
Mouigos 50 | 5000
Rajs 50 | 3500 :
.Higgins
|Gietz
Gt ant
110 lAnu
ио е.зоо ।
7000
20 rows selected
* Можно сортировать по столбцу, не входящему в
SELECT СПИСОК. ______ _________
ORACLE
Copyright © Oracle Corporation, 2001. All rights reserved.
Сортировка по нескольким столбцам
Результаты запроса можно сортировать по нескольким столбцам Предельным количеством
столбцов для сортировки является количество столбцов в данной таблице.
В предложении ORDER BY задайте столбцы через занятые Чтобы изменить порядок соршровкп
столбца на обратный, укажите DESC после названия столбца. Сортировку можно производить и по
столбцам, не указанным в предложении SELECT
Пример
Вывод фамилии и окладов всех служащих Результаты сортируются но номерам отделов, а внузри
отделов - в порядке убывания
SELECT lastname, salary
FROM employees
ORDER BY department_id, salary DESC;
Introduction to Oracle9>; SQL 2-25
Итоги
Использование предложения where для
ограничения количества выводимых строк
- Условия сравнения
- Условия BETWEEN, IN, LIKE И NULL
- Логические операторы AND, OR и NOT
• Использование предложения order by для
сортировки выходных результатов
SELECT * I{[DISTINCT] столбец]выражение [псевдоним],. }
FROM [WHERE [ORDER BY таблица условие(я)] [столбец, выражение, псевдоним} [ASCIDESC]];
ORACLE
2-26 Copyright © Oracle Corporation, 2001. All rights reserved
Итоги
На этом урокс вы научились ограничивать количество строк, выбираемых командой SELECT,
сортировав выходные строки и пользоваться различными опера юрами и условиями.
Introduction to OracleSr. SQL 2-26
Обзор практического занятия 2
• Выборка данных и изменение
последовательности вывода строк
• Ограничение количества возвращаемых
строк с помощью предложения where
• Сортировка строк с помощью предложения
ORDER BY
ORACL-S
2-27 Copyright © Oracle Corporation, 2001 AH rights reserved
Обзор практического занятия 2
Упражнения этого занятия прививают навыки использования предложений WHERE и ORDER BY.
Introduction to Oracle9f.* SQL 2-27
Практическое занятие 2
1 Создайте запрос для вывода имени и зараишпой плана служащих, тарана капающих более
$12000 Сохраните команду SQL в файле 1аЬ2_1. sql. Выполниie запрос
LASTNAME SALARY
[King | 24000
[kochhar | 17000
[De Haan 17000
[Hartstein 13000
2 Создайте запрос для вывода фамилии и номера 01дсла служащего иод номером 176
I LASI_NAMt
[Taylor
DEPARTMENT ID
80
3 Нзмсшкс файл 1аЬ2 1. sql и выведите фамилии в оклады всех служащих, чей оклад не
входит в дианаion о1 $5000 до $12000 Сохрапшс команду SQL в файле lab2_3.sql
[King LAST_NAME SALARY 24000
[kochhar 17000
|De Haan 1 17000
[Lorentz г 1 4200
[Rajs 3500
[Davies 31 CO
[Matos 2600
[Vargas 1 2500
[Whalen 4400
[Hartstein 13000
10 rows selected
Introduction to Oracle9r. SQL 2 28
Практическое занятие 2 (продолжение)
4. Выведите фамилию, идентификатор должности и да1у начала района всех служащих,
нанятых в период с 20 февраля 1998 г но I мая 1998 г. ОтсоргируГнс данные в порядке
возрастания даты найма.
| LAST.NAME [ JOBID HIRE DATE
[Matos |ST_CLERK |i 5-MAR-98
[Taylor [SA_REP [24-MAR-98
5. Выведите фамилию и номер отдела всех служащих из отделов 20 и 50. Отсортируйте данные
по фамилиям в алфавитном порядке.
. LASTJ4AME DEPARTMENTJD
[Davies 50
[Fay 20
Hartstein 20
[Matos 50
[Mourgos 50
|Rajs 50
[Vargas 50
7 rows selected
6 Измените файл 1аЬ2_3. sql для вывода фамилий и окладов служащих отделов 20 и 50 ,
зарабатывающих от $5000 до $12,000. Назовите столбцы Employee и Monthly Salary,
соответственно. Вновь сохраните команду SQL в файле 1аЬ2 6. sql. Выполните запрос
Employee | Monthly Salary
[Mourgos 5800
|Fay | 6000
introduction to Oracle9/_- SQL 2-29
Практическое занятие 2 (продолжение)
7 Выведите фамилию и дату найма всех служащих, иаияпах в 1994 i
IAS IN AML J HIRE DA It
[Higgins |O7-JIJN-ci4
Gietz [07-JUN-94
8 Выведите фамилии и должное hi всех служащих, не имеющих менеджера.
[ “ " LAST-NAME’ Г JOU 10
{king |aD_PRES
9 Выведи ic фамилию, оклад и комиссионные всех служащих, тарабаниваюших комиссионные Oicopnipyiiie данные и порядке убывания окладов и комиссионных
LAST_NAME SALARY COMMISSION-PCT
(Abel 11007 | 3
jziotkey 10500 [ 2
[Taylor 8600 | 2
[Giant 7000 [ 15
Если осталось время, выполите следующие упражнения.
10 , Выведите все фамилии служащих, в коюрых ipeibM оуква - а
LAST NAME
[Grant
(Whalen
II Выведите все фамилии служащих, в коюрых сеть буквы "п н‘е
LAST NAME
|De Haan
[Davies
[Whalen
Hailstein
Introduction to Oracle!)/.’ SQL 2-30
Практическое занятие 2 (продолжение)
Если вы желаете усложнить задачу, выполните следующие упражнении
12. Запросите фамилии, должности и оклады всех служащих , работающих торговыми
представителя (SA_REP) или клерками на складе (STCLERK) и с окладом не $2500 $3500
или $7000
I LAST.NAME . . [ JOBJD [ SALARY
[Davies [ST_CLERK 3100
[Matos ST.CLERK [ 2600
|Abel ;sa REP [ 11000
[Taylor SAREP | 8600
13. Измените 1аЬ2_6. sql так, чтобы получить фамилии, оклады н комиссионные всех
служащих, у которых сумма комиссионных превышает оклад плюс 20 % Выполните запрос
еще раз. Сохраните запрос в файле 1аЬ2_13, sql
Employee [ Monthly Salaty f COMMISSION_PCT
Zotkey J" 10500 | .. 2
[Taylor [ 8600 2
Introduction to OracleSr; SQL 2-31
Introduction to Oracle9i: SQL 2-32
Однострочные функции
OPACLG
Copyright © Oracle Corporation, 2001 All nghls reserved
Рассматриваемые вопросы
• Различные типы функций в SQL.
• Использование функций различных типов:
символьных, числовых и типа “дата" в
командах select.
• Функции преобразования данных и их
использование.
ORACLe
3 2
Copyright © Oracle Corporation, 200 f Al! rights reserved
Цели урока
Функции увеличивают мощность upocioio блока запроса и нспользутоюя для
манипулирования значениями данных. Эю первое из двух занято, посвященных
функциям. Вы узнаете об однострочных функциях для работы с числами сроками и
датами, а также о функциях преобразования данных нз одного типа в другой, например, из
символьных в числовые.
Introduction to Oracled/.* SQL 3-2
3-3 Copyright © Oracle Corporalion, 2001 AN nghls reserved
Функции SQL
Функции являются очень мощным средством SQL и используются в следующих целях:
Вычисления над данными.
Изменение отдельных единиц данных.
• Управление выводом групп езрок.
• Форматирование чисел и дат для вывода.
• Преобразование типов данных.
Функции SQL принимают один или несколько аргументов и веет да возвращают значение.
Примечание
Большинство описанных здесь функций взяты из версии SQL фирмы Oracle.
Introduction to Огас1е9Л- SQL 3-3
3-4 Copyrighi © Oracle Corporation, 2001. All rights reserved.
Типы функций SQL
Имеется два типа функций :
• Однострочные
• Многострочные
ОДНОСсрочные функции
Эш функции рабокног юлько с одной строкой и возвращаю j но одном) рстулы.ну для
каждой строки. Однострочные функции мог>т бьиь рашых типов. На ном занятии
рассматриваю]ся следующие типы функции:
• Снлгво-зьные
• Чис юные
• Для работы с датами
• Функции преобразования
Миш порочные функции
Эт 11 функции работают с i рупион строк п выдают но одному реилыагу для каждой j руины.
Их часю называют групповыми ф)нкциями. Они буду г рассмшрсны в следующем урокс.
Полный список функций и их синтаксис см. в руководи'i вс OraclcVi SQL Reference.
Introduction to OracleS/.- SQL 3-4
Однострочные функции
• Манипулируют элементами данных.
Принимают аргументы и возвращают одно
значение.
• Работают с каждой строкой, возвращаемой
запросом.
• Возвращают один результат на строку.
• Могут изменять тип данных.
• Могут быть вложенными.
• Принимают аргументы, которые могут быть
столбцами или выражениями.____________
имя функции [(aprl, арг2,...)]
ОРАС1_е
3-5 Copynght © Oracle Corporation, 2001. All rights reserved
Однострочные функции
Однострочные функции используются для работы с элементами данных. Они принимают
один или несколько ар1умсптов и возвращают по одному значению для каждой строки,
выдаваемой запросом. Аргументом может быть;
• константа, заданная пользователем;
• значение переменной;
- имя столбца;
• выражение.
Особенности однострочных функций;
• Обрабатывают каждую строку, возвращенную запросом.
• Возвращают по одному результату для строки.
• Могут изменять пш данных: тип данных на выводе может отличи«ьси от типа данных,
к которым обращается пользователь.
• Могут принимать один или несколько аргумсиюв.
• Могут использоваться в предложениях SELECT, WHERE и ORDER BY. Могу 1 быть
вложенными
Сишакснс;
функции
aprl, арг2
имя
имя функции.
любой аргумеш, используемый функцией, apt уметом может бьнь
столбца или выражение.
Introduction to Oracle9/.* SQL 3-5
Однострочные функции
3-6 Copyright ©Oracle Corporation. 2001 All nghis reserved
Однострочные функции (продолжение)
Урок охватывает следующие однострочные функции:
• Символьные функции, принимаю! па входе символьные данные, а возвращаю! как
символьные, так и числовые значения.
• Числовые функции, принимаю! па входе числовые данные и возвращают числовые
значения.
• Функции для обработки дат; paGotaior с значениями типа DATE. Все функции для
работ с датами возвращают значение вша DATE за исключением функции
MONTHS BETWEEN, коюрая возвращас! число.
• Функции преобразования; преобразую! значение из одно!о вша данных вдр^юн.
• Общие функции:
- NVL
~ NVL2
- NULL IF'
- COALSECE
- CASE
- DECODE
introduction to Oracle9/. SQL 3-6
Символьные функции
LOWER CONCAT
UPPER SUBSTR
INITCAP LENGTH
INSTR
LPAD | RPAD
TRIM
REPLACE
ORACLE
Copynghl © Oracle Corporation. 2001 All nghls reserved
Символьные функции
Однострочные символьные функции принимают на входе символьные данные, а
возвращают символьное пли числовое значение. Символьные функции делязся па.
функции преобразования регистра символов:
• функции манипулирования символами.
Столбец Назначение
LOWER(столбец!выражение) Преобразует алфавитные символы в нижний регистр
UPPER(столбец!выражение) Преобразует алфавитные символы в верхний регистр
INITCAP(столбец|выражение) Преобразует символьные значения: первая буква каждого слова становнгся заглавной, остальные - арочные
CONCAT(столбец!|выражение!, столбец2\ выражение2) Присоединяет нцяюй символьное значение ко второму. Эквиваленте оператору конкатенации (||)
SUBSTR(столбец|выражение, т[,п]) Возвращаег п символов символьного значения, начиная с символа т. Если ш отрицательно, отсчет начинается с конца символьного значения. Если н orcyiciuycr, возвращаются все символы до конца строки.
Примечание
Это только часть имеющихся символьных функций
Introduction to Oracle9i: SQL 3-7
Символьные функции
LOWER CONCAT
UPPER
INITCAP
SUBSTR
LENGTH
INSTR
LPAD | RPAD
TRIM
REPLACE
ORACLE
3-8 Copyright © Oracle Corporation, 2001 All rights reserved
Символьные функции (продолжение)
Функция Назначение
LENGTH(столбец|выражение) Вошращаст количество символов в значении параметра
INSTR(столбец|выражение, 'строка', [,m], [n] ) Возвращает помер позиции указанной строки в символьном значении первого параметра. Дополнительно можно задать позицию л; начала поиска в первом параметре н число обнаружении > строки. Но умолчанию /п и п равны 1, что означает выполнение поиска в первом параметре, начиная с перво!! познцнн до первого обнаружения строки
LPAD (столбец]выражение, n, ’строка’) RP&D(столбец]выражение, n, 'строка') Дополняет символьное значение первого параметра слева до длины п заданными символами строки. Дополняет символьное значение нервен о параметра справа до длины л заданными символами строки.
TRIM (-leading! trailing] both , удаляемыйсимвол FROM исхсдная_строка) Позволяет вырезать из исходной строки начальные (leading) или конечные (trail ing) символы или и тс, и другие (both). Если удаляемый^символ или исходная_строка являются символьными литералами, то их нужно заключить в апострофы. Эта функция доступна, начиная с версии ()тас1сХт.
REPLACE(текст, искомая_строка, заменяющая строка) Выполняется поиск искомой строки ио текстовому значению первого параметра н в случае обнаружение производится се замена на заменяющую^ строку.
Introduction to Oracle9f.~§QL 3 8
Функции преобразования регистра
символов
Эти функции преобразуют регистр символьных
строк
Функция Результат
LOWER('SQL Course') sql course
UPPER('SQL Course') SQL COURSE
INITCAP('SQL Course * 1) Sql Course
ORACLe
3-9 Copyright © Oracle Corporation, 2001 All rights reserved.
Функции преобразования регистра символов
Три функции преобразования pet истра символов. LOWER UPPER и INITCAP.
• LOWER; преобразует строку символов верхнею регистра или обоих регистров в
символы нижнею регистра.
• UPPER; преобразует строку символов нижнего регистра или обоих регистров в
символы верхнего pet истра.
• INITCAP; преобразует первую букву каждого слова в заглавную, а остальные буквы
в строчные.
SELECT ’The job id for 'I I UPPER(iast_name)II’ is ’
I I LOWER (job id) AS ’’EMPLOYEE DETAILS"
FROM employees;
| EMPLOYEE PETAILS ~
The job id foi KING is ad pres
The job id for KOCHHAR is advp
Jhe job id for DE HAAN is ad_vp
'The job id for HUNOLD is it prog
The 10b id for ERNST is it urea
.jo id tor is ac_mgr
|The job id for GIETZ is ac_accounl
20 rows selected
Introduction to OracleSr; SQL 3-9
Использование функций преобразования
регистра
Вывод номера служащего по фамилии Higgins, его
фамилии и отдела:
SELECT employee_rd, last_name, department_id
FROM employees
WHERE last_name = 'biggins';
no rows selected
SELECT employee_rd, last_name, department_id
FROM employees
WHERE LOWER(last_name) = 'biggins';
J FMriontje lAST.HAMF ВСРАЛТМГШ.Ю
I 205 [Уччи'Д"" *"" | 110
OPACLG
3-10 Copyright ©Oracle Corporation. 2001 Al) rights reserved
Функции преобразования регистра символов (продолжение)
Пример показывает номер, фамилию и номер отдела служащего Higgins.
Предложение WHERE в первой команде SQL задасч фамилию служащею biggins. Г к. нес
данные в таблице EMPLOYEES хранятся в символах cooiBciciByiomci о регистра, совпадения с
фамилией higgins не будет, вследствие чего ни одна cipoKa нс будс! выбрана.
Предложение WHERE во второй команде SQL укаплвает, что фамилия служащего из i.iGjhhm
EMPLOYEES должна быть преобразована в строчные буквы и только ноете Э1ого сравииванэся
с higgins. Т.к. обе фамилии теперь представлены в символах нижнею регистра, совпадение
будет обнаружено н будс! вобрана одна строка. Следующее предложение WHERE дас! 1акон
же результат:
...WHERE lastname = 'Higgins'
В выходных данных фамилия вьн лядтп так, как храни i ся в ба тс данных. Ч юбы вывеет и
фамилию в символах верхнею регистра, пенс 1ьзуйтс функцию UPPER в списке выбора
команды SELECT
SELECT employee—id, UPPER(last_name), departmentid
FROM employees
WHERE INITCAP(last—name) = 'Higgins';
Introduction to Oracle9i. SQL 3 10
Функции манипулирования символами
Эти функции манипулируют символьными строками:
Функция Результат
CONCAT('Hello', ' World') SUBSTR('HelloWorld',1,5) LENGTH('HelloWorld') INSTR('HelloWorld', ’ W') LPAD(salary,10,'* * * * *') RPAD(salary, 10, '*') TRIM('H’ FROM 'HelloWorld') HelloWorld Hello 10 6 *****24000 24000***** elloWorld
ORACLe
ЗЛ1 Copyright © Oracle Corporation. 2001 AH nghts reserved
Функции манипулирования символами
CONCAT, SUBSTR, LENGTH, INSTR, LPAD, RPAD и TRIM - jh> функции манипулирования
символами, которые обсуждаются в этом урокс.
• CONCAT: соединяет значения. Для функции CONCAT можно использовать нс более
двух параметров.
• SUBSTR: возвращает подстроку заданной длины.
• LENGTH: возвращает длину строки в виде числового значения.
• INSTR: возвращает номер позиции указанною символа.
• LPAD: дополняет символьное значение, выровненное справа, до заданной длины.
• RPAD: дополняет символьное значение, выровненное слева, до заданной длины.
TRIM: удаляет из символьной строки начальные и/или конечные символы. (Если
удаляемыйсимвол или исходная_строка являются символьными литералами,
то их нужно заключить в апострофы.)
Introduction to Oracle9>.- SQL 3-11
Использование функций
манипулирования символами
SELECT employee_id, CONCAT(first_name, last_name) NAME, job_id,
LENGTH (last_name), INSTR(last_name, ’a’) "Contains ’a'?"
FROM employees
WHERE SUBSTR(job_id, 4) = 'REP';
[ IMPLOYEEJD KAMI JOBJD
174 tllenAbel ,SA_REP
176 jJofialliunTaylor SA REP
178 i<imbereiy Giant SA REP
202 patFay Ml- _REP
Contains Vr
0 !
3l
V
ORACLE’
3-12 Copyright © Oracle Corporation, 2001 All rights reserved
Функции манипулирования символами (продолжение)
В примере па слайде для всех служащих, у которых ндептификагор должности содержи!,
начиная с четвертой пошипи, строку REP, выводятся следующие данные: имя и фамилия
служащего, соединенные в одно целое, длина фамилии и номер пошипи буквы "и" и
фамилии.
Пример
Измените команду SQL так, чтобы получить данные по служащим, чьи фамилии
закапчиваются буквой “л ”.
SELECT employee_id, CONCAT(first_nime, lastjiame) NAME,
LENGTH (Jastname), INSTR(last name, ’a’) "Contains
'a' ?"
FROM employees
| EMPLOYEE ID ! NAME | LEHGIH(LAST NAME) Contains‘a?
102 LexDe Haan [ 7 5
200 JenniferWhalen | 6 3
201 MichaelHartstein i 9 2 :
Introduction to Oracle9r; SQL 3-12
Числовые функции
* ROUND: округляет значение до заданной
точности
ROUND (45.926, 2) -----► 45.93
* TRUNC: усекает значение до заданного
количества десятичных знаков
TRUNC(45.926, 2) ------► 45.92
* MOD: возвращает остаток от деления
MOD (1600, 300) ------► 100
ORACL&
3-13 Copyright © Oracle Corporation, 2001 АП rights reserved
Числовые функции
Числовые функции принимают на входе числовые данные и возвращают числовые значения.
Некоторые из числовых функций описаны в этом разделе.
Функция Назначение
ROUND(столбец!выражение, л) Округляет столбец, выражение или значение дол десятичных разрядов, а если л опущено, то до целого. Если п отрицательно, округляются разряды слева от десяшчной ючкн.
TRUNC(столбец!выражение, п) Усекается столбец, выражение или значение дол десятичных разрядов, а если л опущено, то до целого. Если /г отрицательно, усекаются разряды слева от десятичной точки.
MOD (m, n) Возвращает оста i ок от деления m на г.
Примечание
Это только некоторые из имеющихся числовых функций. Болес подробную информацию
см. в руководстве OracleViSQL Reference, "Number Functions.”
Introduction to Oracle9i.’ SQL 3-13
Использование функции ROUND
SELECT ROUND(45.923,2), ROUND(45.923,О),
ROUND(45.923,-1)
FROM DUAL;
ноннврз зад ввоиковзхвзгзд Г нойпввхйзЛ)
45 92 46 Ч)
dual - это фиктивная таблица, используемая для
получения результатов выполнения функций и
вычислений.
ORACUe’
3-14 Copyright © Oracle Corporation. 2001. All rights reserved
Функция ROUND
Функция ROUND окруз лист столбов, выражение пли значение до п деся в ввчвзьвх разрядов.
Если второй apiyMcin равен пулю или отсутствует, значение окрувляевся до нуля
десятичных разрядов. Если второй ара умен в равен 2, значение окрутляеюя до двух
леем питых разрядов. Если взорой артумеш равен -2. значсззис окрут вясзся с зева от
дсеязнчввозз точки - до сотевз (до нслово числа с двумя звулямвв)
Фупкввия ROUND может исввользовазься и с функввнямва даты Примеры прицелены позже в
этом уроке.
Таблица DUAL
ТаЬлица DUAL принадлежит пользовзавслво SYS bi доступна всем пользователям. Она
содержит одни сзолбевв DUMMY и одну строку со значением X. Таблнзва DUAL полезна,
ковда необходимо получить разовый результат например: вынесен зввачевввве константы,
псевдостоввбвва взлез выражения, которые нс выбнравотся ваз забавна пользователя Фнкпввнпя
габливва DUAL используется для тот о, чтобы не был нарушен синтаксис команды SELECT,
в которовв ввредложевзввя SELECT н FROM обязательные. Эва таблица иозволясв выполнять
вычисления, для которых нс ввужны данные из рса вьввьвх ваб зивв
Introduction to Oracle9i.- SQL 3-14
Использование функции TRUNC
ОГ?АС1_£
3-15 Copyright © Oracle Corporalion, 2001 AH nghls reserved
Функция TRUNC
Функция TRUNC усекает столбец, выражение или значение до /I десятичных разрядов.
Аргументы функции TRUNC аналитичны аргументам функции ROUND. Если второй
аргумент равен нулю нлн отсутствует, значение усекается до нуля десятичных разрядов.
Если второй аргумент равен 2, значение усекается до двух десятичных ратрядов. Если
второй аргумент равен -2, значение усекается до сотен (до целого числа с двумя нулями).
Функция TRUNC , как и функция ROUND, может использоваться с функциями даты .
Introduction to OracleS)/.- SQL 3-15
Использование функции MOD
Вычисление остатка отделения оклада на 5000 для
всех служащих, работающих в должности торгового
представителя.
SELECT last_name, salary, MOD(salary, 5000)
FROM employees
WHERE job_id = 'SA_RE₽';
IASI.IIAM1 | SAIAIIY MOU(SAIAnV,MUII)
jAbel HLW , 1000 i
llaylot 3600
|в»ап| 'ООО 20U0 1
ORACLE
3-16
Copynghl © Oracle Corporation, 2001 All rights reserved
Функция MOD
Функция MOD вычисляет оскнок oi деления значения! па значение?. Пример сверку
показывает остагок отделения оклада па 5000 для всех служащих, плен шфпка top
должности которых SA REP.
Примечание
Функция MOD часто применяется для определения чснюго или печснюго значения
Introduction to Oraclc9r.' SQL 3-16
Работа с датами
• Oracle хранит данные во внутреннем цифровом
формате.
- Век, год, месяц, число, часы, минуты, секунды
• По умолчанию дата выдается в формате
DD-MON-RR (число- месяц-год).
- Можно задавать год двумя цифрами и хранить
дату 21 века, если текущая дата 20 века.
- Можно хранить д^ту 20 века в 21 веке тем же
способом.
3-17 Copyright © Oracle Corporation, 2001 .• Ail rights reserved
Формат даты Oracle
Oracle хранит даты во внутреннем числовом формате, предо авляющем столетие, год,
месяц, число, часы, минуты н секунды.
По умолчанию выходной и входной форма гы любой даты - DD-MON RR (число-месяц
год). Действительные даты Oracle лежат в диапазоне от 1 января 4712 до из. до 31 декабря
9999 н.э.
В примере на слайде дата найма HIRE_DATE служащего Gietz выводится по умолчанию в
формате DD-MON-RR. Однако в базе данных хранятся все компоненты даты и времени, а
не только указанные в лом формле. Поэтому, хотя для даты 07-JLTN-94 из столбца
HIRE DATE выводится день, месяц и год, в базе данных содержится также информация о
времени и веке. Полная дата может иметь вид: June 7lh, 1994 5:10:43 p in.
Эта дата внутренне хранится следующим образом:
ВЕК ГОД МЕСЯЦ ДЕНЬ ЧАС МИНУТА
СЕКУНДА
19 94 06 07 5 10 43
Компонента века в дате и 2000 i од
Сервер Oracle решает проблему 2000 года. При вводе строки, содержащей столбец с датой,
информация о веке получается из функции SYSDATE. Однако при выводе даты на экран
компонента века по умолчанию не выводится.
Тип данных DATE всегда хранит внутренне информацию о годе в виде четырех цифр: 2
цифры для века и 2 цифры для года. 11апример. бела данных Oracle хранит год в виде 1996
или 2001, а не 96 или 01.
Introduction to Oracle9c SQL 3 17
Работа с датами
SYSDATE - эта функция, которая возвращает:
• Дату
• время
ORACLE
3-18 Copyright © Oracfp Corporation. 2001 AH rights reserved
Функция SYSDATE
SYSDATE - но функция, возвращающая 1екущую д«пу и время сервера базы данных Вы
можсле использован. SYSDATE также, как любое другое имя сюлбца. Например, можно
вывеет 1екущую дату при выполнении запроса из таблицы. Обычно выполняют выбор
SYSDATE из фиктивном таблицы, имеющей имя DUAL.
Пример
Вывод текущей даты с использованием таблицы DUAL
SELECT SYSDATE
FROM DUAL;
SYSDAIl
|CB-MAR-0I
Introduction to OracleSi: SQL 3 18
Арифметические операции с датами
• Результатом прибавления числа к дате и
вычитания числа из даты является дата.
• Результатом вычитания одной даты из другой
является количество дней, разделяющих эти
даты.
• Прибавление часов к дате производится путем
деления количества часов на 24.
opacus
3-19 Copyright © Oracle Corporalion. 2001 All nghls reserved
Арифметические операции с датами
Т.к. в базе данных даты хранятся в виде чисел, с ними можно выполнять такие
арифметические операции, как сложение и вычитание. Прибавляз ь и вычитать можно как
числовые константы, так и даты.
Возможны следующие операции .
Операция Результат Описание
дата + число Дата Добавляет количество дней к дате
дата - число Дата Вычитает количество дней из даты
дата - дата Количество дней Вычитает одну дату из другой
дата + число/24 Дата Прибавляет часы к дате
Introduction to Oracle9/.- SQL 3-19
Использование арифметических
операторов с датами
SELECT last_name, (SYSDATE-hire_date)/7 AS WEEKS
FROM employees
WHERE departmen t id = 90;
LAST^NAMI:
[king
Jkochhar
jDe Haan
wi IKS
716 227563
^'«№4703
425.227563
ORACLE
3-20 Copyright © Oracle Corporation, 2001 All righls reserved
Использование арифметических операторов с датами
Пример сверху показывает вывод фамилии и количества отработанных педель всех
служащих оглсла 90 И) текущей даты (SYSDATE) вычитается лага найма, а затем для
вычисления количества недель результат делится на 7.
Примечание
SYtWATE - это функция SQL, возвращающая теку щпс лагу п время, но ному вы можете
получить не такие результаты, как в примере.
Если ботес ранняя лага вычитается из более поздней, результатом будет отрицательное
число.
Introduction to 0racle9c SQL 3-20
Функции для работы с датами
Функция Описание
MONTHS_BETWEEN Число месяцев, разделяющих две даты
ADD_MONTHS Добавление календарных месяцев к дате
NEXT_DAY Ближайшая дата, когда наступит заданный день недели
LAST_DAY Последняя дата текущего месяца
ROUND Округление даты
TRUNC Усечение даты
OPACLG'
3-21 Copyright © Oracle Corporation, 2001 All rights reserved
Функции для работы с датами
Эти функции работают с датами Oracle. Все функции для работы с датами возвращают
значение типа DATE за исключением функции MONTHS_BETWEEN, возвращающей числовое
значение.
• MONTHS_BETWEEN (дата!, дата2): вычисляет количество месяцев между
датой! и датой2. Результат может быть положительным или отрицательным. Если
дата! позже даты2, результат положителен; если дата! предшествует дате2,
результат отрицателен. Дробная часть результата представляет часть месяца.
• ADD MONTHS (дата, п): прибавляет п календарных месяцев к дате ; л должно
быть целым и может быть отрицательным.
• NEXT DAY (дата, 1 chat:' ): возвращает дату после параметра дата , когда
наступит заданный день недели (1 char’); 1 char' может быть числом,
представляющим день недели, или строкой символов.
• LAST DAY (дата): возвращает последнюю дату месяца, которому принадлежит
дата.
• ROUND (дата [, ' формат’ 1 ): возвращает дату, округленную до единицы,
заданной моделью формата. Если формат отсутствует, дата округляется до
ближайшего дня.
• TRUNC(дата[, ’ формат’ ]): возвращает дату, в которой время усечено до
единицы, заданной моделью формата. Если формат отсутствует, дата усекается до
ближайшего дня.
Это только некоторые из имеющихся функций. Модели формата обсуждаются далее в этом
уроке. Примерами моделей формата являются месяц (MONTH) или год (YEAR).
Introduction to Огас1е9ь- SQL 3-21
Использование функций для работы с
датами
• MONTHS_BETWEEN ('01-SEP-9511-JAN-94')
—19.6774194
• ADDJMONTHS ('ll-JAN-94' ,6) —' 11-JUL-94 '
• NEXT_DAY ('01-SEP-95','FRIDAY')
—> ' 08-SEP-95'
• LAST_DAY('01-FEB-95') —'28-FEB-95'
ORACLG
3-22 Copyright © Oracle Corporation 2001 All rights reserved
Использование функций для работы с датами
Для всех служащих, проработавших мепсс 36 месяцев, выводтся номер служащею, даьа
найма, колпчесгво ограбокншых месяцев, лага ai icciainni после 6 месяцев рабол.1, дага
первой пяпшцы после даня найма и последний день месяца, когда служащий был паши на
работу.
SELECT employee_id, hire_date,
MONTHSBETWEEN (SYSDATE, hi;e_date) TENURE,
ADD_MONTHS (hire_date, 6) REVIEW,
NEXT DAY (hire_date, 'FRIDAY'), LAST_DAY(hiredate)
FROM employees
M LOYEEJD HIRE_DATE Г TENURE Г REVIEW | NEXE_DAY( LASTDAYi
107 'iO7-FEB-99 | 250548529 l07-Al>-99 [12-FEB-99 128-FEB-99
124 |16-NOV-99 Г 15 7645303 '16-MA.Y-OO I19-NOV-99 '30-NOV-99
143 115-MAR-98 [~35 7967884 J5-SEP-98 [2D- MAR-98 ;31 -MAR-98
144 I09-JUL-98 [ 31 9903368 to-JAN-99 |lO-JUL-98 31-JUL-98
149 (29-JAN-00 [ 13.3451755 29-JUL00 |04-FEB-00 |31-JAN-00
176 |24-MAR-98 | 35.5064658 24-SEP-98 [27-MAR-98 |31-MAR-98
178 |24-MAY-99 j 21.5064658 ;24-NOV-99 28-MAY-99 31-MAY-99
7 rows selected
Introduction to Oracle!)/.' SQL 3-22
Использование функций для работы с
датами
Предположим, ЧТО SYSDATE = '25-JUL-95':
• ROUND(SYSDATE,'MONTH') 01-AUG-9 5
• ROUND (SYSDATE /YEAR') ---01-JAN-96
• TRUNCfSYSDATE , 'MONTH') -01-JUL-95
• TRUNC(SYSDATE , 'YEAR') --01-JAN-95
ORACLE
3-23 Copyright © Oracle Corporation, 2001. All rights reserved
Использование функций для работы с датами (продолжение)
Функции ROUND и TRUNC мы уг использования для числовых значении и дат. Если они
используются с датами, даты округляются или усекаются в соответствии с заданной маской
формата. Следовательно, можно округлять даты до ближайшего юда или месяца.
Пример
Сравните даты найма всех служащих, нанятых в 1987 г. Выведите на экран номер каждого
служащего, дату и месяц найма с помощью функций ROUND и TRUNC.
SELECT employee_id, hire_date,
ROUND(hire_date, 'MONTH'), TRUNC(hire_date, 'MONTH')
FROM employees
WHERE hire date LIKE '%97';
EMPLOYEEJD HIRE DATE ; ROUND(HIR | 1RUNC(HIR
142 29-JA.N-97 '01-FEB-97~ OLJAN-97
I
202’117-AUG-97 '01-SEP-97 ’ |oi-AUG-97
Introduction to Oracle9z.* SQL 3-23
Обзор практического занятия 3, часть 1
• Составление запроса для вывода текущей даты.
• Составление запросов, требующих использования
числовых, символьных функций и функций для
работы с датами.
• Вычисление продолжительности работы служащего
в месяцах и годах.
Copyright © Oracle Corporation, 2001 All rights reserved.
Практического занятия 3, часть 1
Эго занятие содержит многочисленные упражнения, в которых используются символьные и
числовые функции, а также функций для работы с датами.
Выполните приведенные в конце урока задачи I-5 практически! о задания 3.
Introduction to Oraclc9/.- SQL 3-24
3-25 Copyright © Oracle Corporation, 2001 All rights reserved.
Функции преобразования
Помимо типов данных Oracle, столбцам таблиц в базе данных Огас1с9/ можно назначать
типы данных ANSI, DB2 и SQL/DS. Но внутри системы сервер Oracle преобразует эти типы
данных в типы данных Огас1с9/.
В некоторых случаях сервер Oracle допускает данные какою-то типа там, i де он ожидает
данные другого типа. Это допускас1ся, если сервер Oracle может автоматически привести
данные к определенному тину. Такое преобразование типов данных может производиться
неявно сервером Oracle или явно пользователем.
Неявные преобразования типов данных производятся в соответствии с правилами,
изложенными на следующих двух слайдах.
Явное преобразование типов данных производится с помощью функций преобра зования.
Функции преобразования преобразуют один тип данных в другой. Обычно эти функции
следуют общепринятому правилу тпп_данных ТО тмп_ данных. Первый тип данных
является входным, а второй - выходным.
Примечание
Хотя неявное преобразование типов данных возможно, для упрощения чтения команд SQL
рекомендуется делать это явно.
Introduction to Oracle9/; SQL 3-25
Неявное преобразование типов данных
Для операций присваивания Oracle может
автоматически выполнять следующие
преобразования:
Исходный формат Новый формат
VARCHAR2 или CHAR NUMBER
VARCHAR2 или CHAR DATE
NUMBER VARCHAR2
DATE VARCHAR2
Неявное преобразование типов данных
Присваивание значения будет успешным, если сервер Oracle сможет привссзи пш данных
значения, расположенною справа от оператора присваивания, к тит переменной.
Introduction to Oracle9/. SQL 3-26
4
Неявное преобразование типов данных
При вычислении выражений Oracle может
автоматически выполнять следующие
преобразования:
Исходный формат Новый формат
VARCHAR2 или CHAR NUMBER
VARCHAR2 или CHAR
DATE
ORACLC
3-27
Copyright © Oracle Corporation, 2001 All rights reserved.
Неявное преобразование типов данных
Обычно сервер Oracle использует правила для выражения, когда необходимое
преобразование нс охвачено правилом преобразования типов данных для операций
присваивания.
Примечание
Преобразования из CHAR в NUMBER успешны только в случае, если символьная строка
представляет действительное число.
introduction to Огас1е9Л* SQL 3-27
Явное преобразование типов данных
TO_NUMBER TO_DATE
ЧИСЛО СИМВОЛ ДАТА
Явное преобразование типов данных
Для прсобра ювания значения из одного чипа данных в другой SQL предлагает ipn функции:
Функция Назначение
'ГО CHAR ( число | дата, [ формат] , Прсобра ост число или дату в строку символов
[nlsparams] ) VARCHAR2 в соответствие с моделью формата
Преобразование чисел
Параметр п 1 spa rams определят следующие
символы при преобразовании:
• Знак отделения десятичных разрядов.
• Знак отделения групп символов (например,
тысяч; 1000,000.00).
• Знак обозначения национальной валюты,
• Знак обозначения валюты.
Если парамщр nlsparams или формат
опущены, го функция использус! иарамс1ры по
умолчанию, установленные для данной сессии.
____________________________.____ _____. Т - Г ----- ------------
Introduction to Oracle9/.- SQL 3-28
Явное преобразование типов данных
TO_NUMBER TO_DATE
ЧИСЛО СИМВОЛ ДАТА
ORACLG
3-29 Copyright © Oracle Corporation, 2001 All rights reserved
Явное преобразование типов данных (продолжение)
Функция Назначение
ТО_СНAR(число|дата,[ формат], [nlsparams]) Преобразование дат Параметр nlsparams устанавливает язык, на котором будут отображаться наименования месяцев и дней. Если параметр не указан, то будут использоваться параметры по умолчанию, установленные для данной сессии.
ТО_NUMBER(строка,[формат], [nlsparams]) 11реобразует символьную строку, содержащую цифры, в число в соответствие с форматом. 1Ьраметр nlsparams имеет тот же смысл, что и для функции ТО CHAR при преобразовании чисел.
Т0_DATE(строка,[формат] ,[nlsparams]) Преобразует символьную строку, содержащую дату, в дату в соответствие с форматом. Параметр nlsparams имссг тот же смысл, что и для функции TO CHAR при преобразовании.
Introduction to Oracle9/.- SQL 3-29
Явное преобразование типов данных (продолжение)
Примечание
Это только часть имеющихся функций преобразования.
Болес подробную информацию см. в руководсше OracleVi SQL Refvrcn<-c.
Functions.”
“Com cision
Introduction to Oracle9/; SQL 3-30
Функция to_char с датами
Модель формата:
* Должна быть заключена в апострофы. Различает
символы верхнего и нижнего регистров.
• Может включать любые разрешенные элементы
формата даты.
• Использует элемент fin для удаления конечных
пробелов и ведущих нулей.
• Отделяется от значения даты запятой
оРАСье
3-31 Copyright © Oracle Corporation, 2001. АП nghts reserved
Вывод данных в заданном формате
До сих пор для вывода всех дат Oracle использовался стандартный формат DD-M0N-YY
(число-мссяц-год). Функция TO_CHAR позволяет преобразовать дату из этою стандартною
формата в формат, заданный пользователем.
Указания
Модель формата различает символы верхнею и нижнею pei петров и должна бып.
заключена в апострофы.
Модель формата может включать любой действительный элемент формата даты. Да1а
обязательно отделяется oi модели формата запятой.
Названия дней и месяцев на выводе автоматически заполняются до нужной длины
пробелами.
Для удаления вставленных пробелов и ведущих нулей используйте элемент fm
режима заполнения (fill mode).
Изменить ширину выходною символьною столбца можно с помощью команды
COLUMN ;SQL*Plus, которая рассматривается далее в курсе.
SELECT employee_id, TO_CHAR(hire_date, 'MM/YY') Month Hired
FROM employees
WHERE last name = 'Hiqqins’;
’ EMPLOYEE JO ' "Bf
205
....Ж ЯЮ1
Ob/94
Introduction to Oracle9/.- SQL 3-31
Элементы формата даты
YYYY Полный год цифрами
YEAR Год прописью
MM Двузначное цифровое обозначение месяца
MONTH Полное название месяца
DY Трехзначное алфавитное сокращенное название дня недели
DAY Полное название дня недели
DD Номер дня месяца
3-32 Copyright © Oracle Corporation, 2001 ЛИ rights reserved
Introduction to Oracle9/.- SQL 3-32
Примеры элементов формата даты
Элемент Описание
SCC or CO Век; если задано S, дате до н.э. предшествует “ - ”
Years in dates YYYY or SYYYY Год; если задано S, дате до н.э. предшествует “ - ”
YYY or YY or Y Последние 3, 2 или 1 цифра года
Y.YYY Год с запятой в указанной позиции
IYYY, IYY, 1Y, 1 4, 3, 2 или 1 цифра года по стандарту ISO
SYEARor YEAR Год прописью; если задано S, дате до н.э. предшествует “ - ”
BC or AD Индикатор даты до новой эры/новой эры
B.C. or A.D. Индикатор даты до новой эры/новой эры с точками
Q Квартал года
MM Месяц, двузначное число
MONTI 1 .. . . , л п , -- , .т_тгж.г.. . .. .. Название месяца, дополненное пробелами до 9 символов
MON Трехбуквенное сокращенное название месяца
RM Месяц римскими цифрами
WWor W Неделя года или месяца
DDD or DD or D День года, месяца или недели
DAY Название дня, дополненное пробелами до 9 символов
DY Сокращенное название дня из трех символов
J Юлианская дата; количество дней с 31 декабря 4713 до н.э.
Introduction to Oracled/.* SQL 3-33
Элементы модели формата даты
• Элементы, которые задают формат части даты,
обозначающей время._________
HH24:MI:SS AM 115:45:32 PM
• Символьные строки добавляются в кавычках.
DP "of" MONTH_________112 of OCTOBER______
• Числовые суффиксы используются для вывода
числительных прописью.____________________
ddspth______________I fourteenth________
3-34 Copyright © Oracle Corporation. 2001. All rights reserved
Элементы форматов даты: форматы времени
Дня вывода времени и литералов, а также для преобразования цифровых дач в даты
прописью польз) iiiecb следующими форматами.
Элемент Формаг
AM или PM Ипдикаюр “до полудня/послс полудня11
A.M. или P.M. Индикатор “до полудня/послс полудня" - обозначение с точками
НИ или HHI2 или HH24 Время суток в 12- или 24-часовом диапазоне
Ml Минуты (0-59)
Секунды (0-59)
sssss Секунды после полуночи (0-863с>9)
Introduction to Oracle9/.- SQL 3-34
Другие форматы
Элемент Описание
/ • , Знаки пунктуации воспроизводятся в результате
“of the” Строка, указанная в кавычках, воспроизводится в результате
Использование суффиксов для вывода чисел
Элемент Описание
TH Порядковый номер (напр., DDTH для 4ТН)
SP Число прописью (напр., DDSP для FOUR)
SPTH or THSP Порядковое число прописью (напр., DDSPTH для FOURTH)
Introduction to Oracle9/.- SQL 3-35
Использование функции to_char с
датами
SELECT last_name,
TO_CHAR(hire_date, ’fmDD Month YYYY') HIREDATE
FROM employees;
' hiredaie’
King :17 June 1987
kochhar 21 September 143^
Do Ha*n 13 January 1993
HunoH 3 January 1990
Ernst 21 May 1391
Lorentz 7 February 1939
iMourgus .16 November V-OQ
Rats 17 October 1996
Gietz |7 June 1ЭЭД
20 rows selected
3-36
Copyright © Oracle Corporation, 2001 All rights reserved
Функция to_char с датами
Команда SQL на слайде выводи! фамилии и даты найма всех служащих. Выходной форма!
даты найма -“17 June 1987".
Пример
И вмените пример для вывода да! в формате “Seventh ol June 1994 12 00:00 AM”.
SELECT last_name,
TO_CHAR(hire_date,
’fmDdsplh "of" Month YYYY fmHH:MI:SS AM')
HIREDATE
EROM employees;
" LAST NAME’ 3 HIREDAIL.
MM I
|King Seventeenth of June 1987 12 00:00 AM
[Kochhar iTwenty-First of September 1989 12 00.00 AM
|De Haan iTIiirteenlh of January 1993 12 00 00 AM
20 rows selected.
Обратите внимание на ю, чю название месяца соотвслствусг заданной модели форма! а.
Иными словами первая буква стала заглавной, а остальные буквы - строчными.
Introduction to Oracle9/: SQL 3-36
Использование функции to__CHAR с
числами
TO_CHAR (число, ' моде ль_ форма та ')
Форматы, используемые с функцией TO_CHAR
для вывода числового значения в виде
символьной строки:________________
9 Цифра
0 Вывод нуля
$ Плавающий знак доллара
L Плавающий символ местной валюты
• Вывод десятичной точки
J Вывод разделителя троек цифр
3-37 Copyright © Oracle Corporation, 2001. AH rights reserved.
ORACL.G*
Функция TO CHAR с числами
Функция TO—CHAR преобразует данные шипа NUMBER в данные тина VARCHAR2. Это
особенно полезно при конкатенации
Элементы числового формата
Преобразуя число в символьный тип данных, можно пользоваться следующими
элементами:
Элемент Описание Пример Результат
9 Цифровой разряд (количество девяток определяет ширину поля вывода) 999999 1234
0 Вывод ведущих нулей 099999 00I234
S Плавающий символ дол iapa $999999 $1234
L Плавающий символ местной валимы L999999 EFI234
• Десятичная точка в указанной позиции 999999.99 1234.00
Запятая в указанной позиции 999,999 1,234
Ml Знак “минус4* справа (отрицательные значения) 999999М1 1234-
PR Отрицательные числа в скобках 999999PR | э
ЕЕ ЕЕ Научное обозначение (обязательны четыре Е) 99.999LEEE 1.234ЕЮЗ
V Умножить на Юл раз (п - кол-во девяюк после V) 9999V99 123400
в Вывод нулей пробелами (не нулями) В9999.99 1234 00
Introduction to Oracle9A SQL 3-37
Указания
• Если количество цифровых разрядов числа превышай количество разрядов,
пред}смотренное моделью форма!а, сервер Oracle выводи! вместо всею числа строку
символов #.
Сервер Oracle округлясз хранимое дссяi ичнос значение до количес!ва десятичных
разрядов, заданное в модели форма!а.
Introduction to Oracle9z; SQL 3-38
-4
Использование функций
TO_NUMBER И TO_DATE
• Преобразование символьной строки в числовой
формат с использованием функции то number:
• Преобразование символьной строки в формат
даты с использованием функции to_date:
ТО DATE (char [, ' модель формата' ])
• В этих функциях можно использовать
модификатор fx. В функции to_date он задает
точное соответствие символьного аргумента и
модели формата даты.
3-39 Copyright © Oracle Corporation, 2001 All rights reserved.
Функции TO NUMBER И TO DATE
Для преобразования символьной строки в числовой формат или формат даты можно
использовать функции ТО NUMBER и ТО DATE. Выбираемая модель формата основывается
на рассмотренных раннее элементах формата.
Модификатор fx задает точное соответствие символьного api смеша и модели формата
дани в функции TO_DATE:
• Знаки пунктуации и текст, заключенный в кавычки, в символьном аргументе должны
точно соответствовать (без учета регистра) модели формата.
• Символьный аргумент нс может содержать дополнительные пробелы. Если не
используется модификатор fx, сервер Oracle игнорирует дополнительные пробелы.
• Числовые данные в символьном аргументе должны содержать такое же количество
цифр, которое указано в модели формата. Если не используется модификатор Гх,
сервер Oracle ш норирусг ведущие нули.
Пример
Вывод фамилии и даты найма всех служащих, которые были приняты на работу 24 мая 1999
т. Так как использование модификатора fx требует точного соответствия между
аргументами, наличие дополнительных пробелов после месяца в первом аргументе приведет
к ошибке.
SELECT last_name, hire_date
FROM employees
WHERE hire_date = TO_DATE('May 24, 1999', ’ f xMonth DD,
YYY ERROR at line 3:
ORA-01858' anon-numeric character was found where a numeric was expected
Introduction to Oracle9/.- SQL 3-39
Формат даты RR
Текущий год Заданная дата Формат RR Формат YY
1995 27-ОСТ-95 1995 1995
1995 27-ОСТ-17 2017 1917
2001 27-ОСТ-17 2017 2017
2001 27-ОСТ-95 1995 2095
Год, заданный двузначным числом
0-49 50-99
Если две последних цифры текущего года равны: 0-49 Возвращаемая дата относится к текущему столетию Возвращаемая дата относится к столетию перед текущим.
50-99 Возвращаемая дата относится к столетию после текущего. Возвращаемая дата относится к текущему столетию.
3-40 Copyright © Oracle Corporation, 20c’ I All rights reserved
Элемент RR в формате даты
Элемент RR аналогичен элемент} YY, но позволяет задавать разные столетия. Элсмстп RR
можно использовать вместо YY, чтобы столетие в возвращаемом значении варьировалось в
зависимости от заданного двузначного года и двух последних цифр текущего года.
Поведение элемента RR суммируется в таблице на слайде.
Текущий го г Заданная дата Интерпретированная дата (RR) Ин герп per ирона иная дата (YY)
1994 27-ОСТ-95 1995 1995 1
1994 27-ОСТ-17 2017 1917
2001 27-ОС Т-17 2017 2017
Introduction to Oraclc9/. SQL 3-40
Пример формата даты RR
Чтобы найти сотрудников, принятых на работу до
1990 года, используйте формат rr. Выполнение
команды даст одинаковый результат, независимо
от того, когда выполнялась команда (сейчас или в
1999 году):
SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-YYYY')
FROM employees
WHERE hire_date < TO_DATE('01-Jan-90', 'DD-Mon-RR');
I’ * - LASTJMAME' ’ ' TO^CHARtHiR
[l-ing jl7-Jun-1987
|Kochhar i21-Sep-1989
jwhalen I7-Sep-I987
ORACLe
3-41
Copyright © Oracle Corporation, 2001. All rights reserved.
Пример формата даты rr
Чтобы найти сотрудников, принятых на работу до 1990 года, можно использовать формат
RR . Так как текущий год больше 1999, формат RR интерпретирует год в дате в интервале от
1950 до 1999 года.
Напротив, следующая команда не выдаст результатов, так как формат YY интерпретирует
год в дате как год текущего столетия (2090).
SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-yyyy')
FROM employees
WHERE TO_DATE(hire_date, ’DD-Mon-yy’) < ’01-Jan-1990’;
no rows selected
Introduction to Oracle9/.* SQL 3-41
Вложенные функции
• Однострочные функции могут быть вложены
на любую глубину.
• Вложенные функции вычисляются от самого
глубокого уровня к внешнему.
F3(F2(Fl(col,argl),arg2),arg3)
Шаг 3 = Результат 3
Copyright СО Oracle corporation. ZUU I мн путь itbuivtiu
Вложенные функции
() IHOCipO’llihlC функции MOI \ I бы 1Ь BjiO/КСИЫ на люоую Г 1\оину. Л l().)k CllllbIC </>\ нкцнн
вычисляюIся oi самой вщ ipciincii к самой внешней. ( лсд} ющне примеры демоне ipups lot
I ибкосн» 'НИХ ф\ нкций.
Introduction to OracleQz: SQL 3-42
Вложенные функции
SELECT last_name,
NVL(TO_CHAR(manager_id) , 'No Manager')
FROM employees
WHERE manager_id IS NULL;
last_name '’’Пс hvl(to„char(managerjd),’nqmabager)
King No Manager
ORACLe
3-43 Copyright © Oracle Corporation, 2001. All rights reserved
Вложенные функции (продолжение)
В примере на слайде на экран выводится фамилия i лавы компании, который не имеет
менеджера. Работа команды SQL включает два шага:
1. Вычисление внутренней функции для преобразования числа в символьную строку.
Результат! = TO_CHAR(manager_id)
2. Вычисление внешней функции для замены неопределенного значения текстовой
строкой.
- NVL(Результат!, 'No Manager')
Т.к. псевдоним не задан, все выражение становится заголовком столбца.
Пример
Вывод даты первой пятницы через 6 месяцев после даты найма. Формат даты - “Friday,
August 13th, 1999”. Результат упорядочен податам найма.
SELECT
FROM
ORDER BY
TO_CHAR(NEXT_DAY(ADD_MONTHS
(hire_date, 6), 'FRIDAY'),
'fmDay, Month DDth, YYYY')
"Next 6 Month Review"
employees
hire_date;
Introduction to Oracle9/.* SQL 3-43
Общие функции
Эти функции работают с любыми типами данных
и обрабатывают неопределенные значения.
• NVL (выражение!, выражение2)
• NVL2 (выражение!, выражение2, выражениеЗ)
• NULLIF (выражение!, выражение2)
• COALESCE (выражение!, выражение2, ...,
выражениеп)
3 44
Copyright (?) Oracle Corporation ?001 All rights reserved
Общие функции
)ih функции paooiaioi с любыми иными данных и нсно п»г клея для обработки
неопределенных пычений списка выражений.
<I>\ IIKIUBI Описание
NVL Преобразуег неопределенное значение в 'iciiciBii ie и.пое
NVL 2 Lc.iii вы}’аж<'нир 1 опреде iciiiio (is not null), ,1V],? иошр.ши ’.i i’ ’ 11 они' 2 1 chi HiWd + нир 1 не определено (is null). NVL, возврати! выр а кснис ?>. AprxMCin вы pa то нм* ] можез быль любо! о । ина.
NIH 1,1 P Сравниваем два выражения и Bompamaci неонре (еденное <начснис (null), ее in выражения равны, или вошращас! первое выражение в про! ивном сл\чае. ..... - .. — .....— —
1 Uttвра।иасг первое определе!i11ое выражс1iнс и т синека выражеiinji
I 1римсчание
ДОПОЛНИ II ЛЬН\ IO информацию О IOC I \ ИНЫХ ф\ НКЦНЯХ, КО 1ИЧССIBO коюрых исчисвясня
сшними, см. к (?/(/(Ic9i Rejercfk с. 'I unctions."
Introduction to Oracle9Z SQL 3-44
Функция NVL
• Преобразует неопределенное значение в
действительное
• Используемые типы данных - date,
символьные (character) и числовые (number).
• Типы данных должны совпадать:
- NVL (corranission__pct, 0)
- NVL (hire_date, ’ 01-JAN-97 ' )
- NVL(job_id,'No Job Yet')
ORACLe
3-45 Copyright © Oracle Corporation, 2001. All rights reserved.
Функция NVL
Функция NVL используется для преобразования неопределенного значения (NULL) в
дейез ви тел ьнос.
Синтаксис
NVL (выражение!, выражение?)
где:
выражение! исходное значение или выражение, которое можез содержать
неопределенное значение;
выражение? конечное значение для преобразования неопределенно! о
значения.
Функцию NVL можно использовать для преобразования данных любого тина, по тип
данных возвращаемого значения всегда такой, как у выражения!.
Преобразования NVL для различных типов данных
Тип данных Пример преобразования
NUMBER NVL(числовой_столбец,9)
DATE NVL(стобец_даты, '01-JAN-95')
CHAR или VARCHAR2 NVL (символьный__столбец, 'Unavailable' )
Introduction to Oracle9/.- SQL 3-45
Использование функции NVL
SELECT lastname, salary, NVL(commission_pct, 0),
(salary*12) 4- (salary*12*NVL (commission_jpct, 0)) AN_SAL
FROM employees;
i LAST-NAME SALARY JTT NVL (COM MISSION „РСТДО AH SAL
{king : 24000 oi 286000
iknchhdii 17000 ! 0 ? 204СЮ0
|De Haan 17000 0 • 2124ГГЮ
[Hunuld 9000 ~ . «.a ............. o i 1ПОЛОС
'Ernst E4TO 0 72000
iLoientz 4200 n I 504П0
jMourgos 5300 0 i t.%00
«Rajs 3500 • • »• • • . . ..... . □ , i 0 42000
navies 3100 I 0 •• 37200
IM al os 20Л0 1 0 • 312130
Varg-is 2500 ! ' о \ Vejno
|Zloll<pj 10500 [ * 15120С»
/4» el noon । i i 17 П-ini
20 tovvs selected
3-46 Copyright © Oracle Corporation, 2001 All rights reserved
Функция NVL
Для вычисления юдовсно дохода служащих необходимо умножить их оклад на 12, а гагем
прибавить сумму комиссионных.
SELECT last_namc,
(salary*12)
FROM employees;
salary, commi.ssion_pct,
4 (sala г у * 12 * conimi ssion_ pct.) AN_SAL
I - LAST NAME >1 SALARY [................COMMISSION PCT
I *4— I i
AN SAL......।
I
20 .,,j selected
Следует отменив, что годовой доход вычисляется только для служащих, зарабатывающих
комиссионные. Если какой-либо столбец в выражении содержи! неонре юлснпос значение,
результатом также будет неопределенное значение. Чтобы вычисли!!. результаты но всем
служащим, необходимо преобразовать неопределенное значение в число прежде, чем
применять арифметический оператор. В примере на слайде функция NVL используется для
преобразования неопределенных значений в ноль.
Introduction to Oracle9r; SQL 3-46
Использование функции NVL2
SELECT last_narae, salary, commisoion_jpct, j
•NVL2(commission_pct,
•SAL+COMM', 'SAL') income
FROM employees WHERE department_id IN (50, 80) ;
ж о ,,n o oc, •• оЖ o«o о • ••.••••••«•o»-»»,”»*»» ••• • seoaaa#'! • •• • • * ® a ««••• о »•••• ° 1 •• • eoca аожааав. • • •
Zlolkey .....................;............. 10500 [ " 2 jSAL+COMM '
а »• • •• « * •«жж•• • *«>< «а ° • ж»« • а • • • . Ж. • » ж • ж а» ж> • • ж а* •• ж® мж а жж жж а о • о • «ж *••• • • а »ж« жжчо • •• о «• ж жж • жЛ ж чч. »м ж ж-жж жж ж жж > ж '•«• i «чжжмч « а ж «ж ® ча ® ж > ж ж • жж « • аж ж < •- • • ♦ «••••1•••••••»••• ч .«•«••• I
Abel > 11000 I 3 iSAL+COMM ।
(Taylor ' Г 8600 [ 2 iSAL+COMM
'Mourgos 581X1 SAL
(Rxj; : 3600 [ SAL
'Davies i 31u0 I SAL j
Matos j 2600 (SAL
{Vargas 2500 SAL
8 rows selected
ORACLE'
Copyright © Oracle Corporation, 2001. All rights reserved.
Функция NVL2
Функция NVL2 проверяет первое выражение. Если оно определенно, ioi да функция NVL2
возвращает второе выражение. Если первое выражение нс определено, результатом работы
функции будет третье выражение.
Синтаксис
NVL2(выражение!, выражение2, выражениеЗ)
где:
выражение!
содержать
выражение 2
выражение 3
исходное значение или выражение, которое может
неопределенное значение
возвращаемое значение, если выражение! определенно
возвращаемое значение, если выражение! нс определено
В приведенном примере проверяется столбец COMMISSION__PCT. Если значение
существует, возвращается величина второго выражения SAL+COMM . Если в столбце
COMMISSION_PCT значение не определено, на выходе функции будет величина третьею
параметра SAL .
Аргумент выражение! может быть любого типа. Аргуменш выражение2 и
выражениеЗ могут быть также любого типа, но кроме типа LONG. Если типы данных
выражения2 и выраженияЗ различаются, сервер Oracle преобразует выражениеЗ в тин
данных выражения2 перед сравнением, если только выражениеЗ нс является
неопределенной константой. В этом случае преобразование не требуется.
Тип возвращаемо! о значения всегда совпадает с типом данных выражения2 , за
исключением случая, когда второй аргумент - символьное данное. В этом случае
возвращается значение типа VARCHAR2.
Introduction to Oracle9/.- SQL 3-47
Использование функции nullif
SELECT first_name, LENGTH(first_namej
last name, LENGTH(last name) "expr2",
LENGTH(last name)) resul
II
NULLIF(LENGTH(first_name)
FROM employees;
expd ! : LAST HAISIt. ’ i»xpi2 RLSULT J
'iWilliam 7 •Gietz 1 51 ' - T f t
Shelley 7 / •Higgins ’ / i
— • ~ «*• «»— • - — . »* . — . ‘ !* — •— - - — - . 1
Pal 3 ;Fay 3 1
Mir h^el 7 Hirl pin i Q 7 i
Jennifer 8 Wlnlen 6 A ! I
Kimberely 9 •’-rani s Л 1 i
Jon jlhon 8 T^yliir ' 6 R ! i
Ellen г At pI 4 s ,
Ek-ni г Hotkey « 5 !
Peter s jvdig «ъ G 6 i
Randall 7 Mil DS 5 7 1 1
Curtis D iDavies 6 1
Tienna Б jRais 1 4 I ;
Л1 row<; selected
3-48
Copyright © Oracle Corporation. 2001 All rights reserved
Функция NULLIF
Функция WULLIFcpantiiiBaci два выражения. Если они равны, функция возвращает
неопределенное значение, если пег - первое выражение. Нельзя указать лиюрал NULL в
качестве первого выражения.
С ин Iаксис
NULL!F
(ныражс/пгс 1,
mjpaveuiiCc)
где:
выражение! исходное значение, сравниваемое с выражением: ;
выражение? исходное значение, сравниваемое с выражением! (если
выражения нс равны , возвращается выражение!).
В приведенном на слайде примере сравниваются имена и фамилии служащих из иблицы
EMPLOYEES . Если длины этих имен нс совпадаю!, выдастся длина имени, в прошвном
случае - неопределенное значение.
Примечание
Функция NULLIF логически эквивалентна слсдхкнцему выражению CASE , которое
рассматривается далее в этом урокс.
CASE WHEN выражение! = выражение? THEN NULL ELSE выражение! END
Introduction to Oracle9i: SQL 3-48
4
Использование функции COALESCE
* Преимущество функции coalesce по
сравнению с функцией nvl состоит в том, что
функция coalesce может обрабатывать
несколько альтернативных значений.
• Если первое выражение определенно, функция
возвращает это выражение; в противном
случает она проверяет оставшиеся выражения.
Использование функции COALESCE
Функция COALESCE возвращав! нервов определенное выражение в списке.
Синтаксис
COALESCE (выражение!, выражение2, ... выражениеп)
где:
выражение! возвращаемое выражение, если оно hmcci определенное значение;
выражение2 во {вращаемое выражение, сели первое выражение нс определено, а
эго выражение имеет определенное значение;
выражениеп возвращаемое выражение, если предыдущее выражение нс
определено.
Introduction to Oracled/.- SQL 3-49
3-50
Использование функции coalesce
SELECT las t_name,
COALESCE (conunission_pct, salary, 10) conun
FROM employees
ORDER BY commission pct;
p ................... . ... '' " ‘‘ '"'J ...........KMM ..........
[Gram 15 I
iZIclkoy 2 !
...... . . f 1
1 aylor z
*Ahel 3
King : MOiXi =
kochhar 1/iWi j
(’e Haan
Hunold
1 ’i.O3
II in
M <los
Vargas
20 ro*s selected
i*1 >1 H..
JI If I
Copyright © Oracle Corporation. 2001 All rights reserved
Использование функции COALESCE (продолжение)
В примере на слайде выводятся комиссионные COMMISSION^ PCT, если они определенны.
Если комиссионные нс установлены, выводится оклад SALARY. Если не определены ни
комиссионные, ни оклад, выводится Ю.
Introduction to Oracle9/.- SQL 3-50
Условные выражения
• Позволяют применять логические конструкции
ЕСЛИ-ТО-ИНАЧЕ (IF-THEN-ELSE) внутри
команды SQL
• Два метода:
- выражение case
- функция DECODE
ORACL.GT
3-51 Copyright © Oracle Corporation, 2001. All rights reserved.
Условные выражения
Два метода используются для выполнения условной обработки (логическая конструкция IF-
THEN-ELSE) в команде SQL. Это - выражение CASE и функция DECODE.
Примечание
Выражение CASE-эхо новая возможность сервера Огас1е9/, которая удовлетворяет
стандарту ANSI SQL; функция DECODE имеет особый синтаксис, разработанный Oracle.
Introduction to Oracled/.* SQL 3-51
Выражение case
Помогает создавать условные запросы, которые
выполняют действия логического оператора
IF-THEN-ELSE.
CASE выражение
WHEN сравН—Выражение1 THEN возвр_выражение!
[WHEN сравн_выражение2 THEN возвр_выражение2
WHEN сравн_выражениеп THEN возвр_выражениеп
ELSE е1зе_выражение]
END
3-52
Copyright © Oracle Corporation, 2001 ЛИ rights reserved
Выражение case
Выражение CASE позволяет производить логическ} ю обработку оператора Н-l HEN-ELSE
в командах SQL, нс вызывая процедуры.
В простом выражении CASE сервер Oracle inner первую пару WHEN . . . THEN, в которой
совпадают выражение и сравн_выражсние и возвращает возвр выражение. Если
нет совпадений ни в одной из сравниваемых пар WHEN . . . THEN и есть пред тоженпе
ELSE, возвращается е1зе_выражение. Если такою предложения ELSE нет, возвращается
неопределенное значение. Нельзя задавать литерал NULL для тзозвр выражений и
е1зе_выражений.
Все выражения (выражение, сравн_выражение и возвр_ выражение ) должны
быть одного тиа. Допустимые iihii.i: CHAP., VARCHAR?. NCHAR и NVARCHAR2.
Introduction to Oracle9/; SQL 3-52
Использование выражения CASE
Помогает создавать условные запросы, которые
выполняют действия логического оператора
IF-THEN-ELSE .
SELECT last_name, job_id, salary,
CASE job_id WHEN JIT_PROG\ - THEN 1.10*salary
Ж WHEN \ST~CLERK ’THEN 1.15*salary
' WHEN SA^REP ’ t THEN 1.20*salary
ELSE / Дsalary’'ENp'^ 'T.\. J’lREVISEDjSALARY''
FROM employees;
Lorentz jITPROG
Mouryos SI MAN
Rajs ST_CLERk |
Gietz .AC ACCOUNT
< 48«Лз
5800 5000
3500 : 4025 |
830U : 8300 J
20 rows selected
ORACLe
3-53
Copyright © Oracle Corporation, 2001. All nghts reserved.
Использование выражения case
В приведенной команде SQL расшифровывается значение идентификатора должности
JOB_ID. Если значение JOB_ID совпадает с IT_PROG, оклад повышается на 10%; если
JOB_ID равно ST_CLERK, повышение составляет 15%; если JOB ID равно SA REP, оклад
увеличивается на 20Уо. Для всех остальных должностей оклад нс изменяется.
Такую же команду можно написать с помошыо функции DECODE.
introduction to OracleS)/.- SQL 3-53
Функция DECODE
Помогает создавать условные запросы, которые
выполняют действия логического условия case
или оператора if-then-else .
DECODE(столбец\выражение, вариант!, результат!
[, вариант2, результат2,...
[, результат_по умолчанию] )
3-54
Copyright © Oracle Corporation, 2001. All rights reserved
Функция DECODE
Функция DECODE действу er подобно IE-TIIEN-ELSE в раз личных языках. Функция DECODE
расшифровывает столбец или выражение после сравнения ею с каждым искомым
значением варианта. Если выражение равно искомому значению, функция возвращаем
cooI вс 1 с । вующий результ<
Если выражение нс совпадает ни с одним из искомых значений, а
результат поумолчанию нс задан, функция возвращае! неопределенное значение.
Introduction to OracleS)/.- SQL 3-54
3-55
ORACLE-’
Copyright © Oracle Corporation, 2001. All rights reserved
Использование функции DECODE
В вышеуказанной команде SQL расшифровывается значение столбца JOB_ID . Если
значение J0B_ID равно IT_PROG, прибавка к окладу составляет 10%; сели значение
JOB_ID равно ST_CLERK, прибавка к окладу составляет 15%; если значение JOB_ID равно
SA_REP, прибавка к окладу составляет 20%. Для остальных должностей оклады нс
увеличиваются.
То же самое можно сделать с помощью оператора IF-THEN-ELSE :
IF job_id =
IF job_id =
IF job_id =
ELSE salary
'1T_PROG'
'ST_CLERK'
'SA_REP'
= salary
THEN
THEN
THEN
salary = salary*!.10
salary = salary*!.15
salart = salary*!.20
Introduction to Oracie9/; SQL 3-55
Использование функции decode
Показать ставку налога на заработную плату для
сотрудников 80 отдела
Пример
На слайде показан один из примеров использования функции DECODE. В этом примере мы
получаем ставку npoi рессивного налога на заработную плату для каждого сотрудника 80
отдела. Ставки рассчитываются по шкале:
Диана son месячного оклада Ставка
$0.00 -1999.99 00%
$2,000.00 - 3,999.99 09%
$4,000.00 - 5,999 99 20%
$6,000.00 - 7,999.99 30%
$8,000.00 -9,999.99 40%
$10,000.00 - 11,999.99 42%
$12,200.00 -13,999.99 44%
$ 14,000.00 or greater 45%
f --------------.......- - г >*--** - —- — — .— - • -* ..--------- • - -ем-
I LAST NAME f SALARY TAX RAH
(Zlotkey | 10500 | - - -
Abel [ 11000 i .42
* I
Taylor I 0600 ! .4
Introduction to Oracle9/.- SQL 3-56
Итоги
С помощью функций осуществляются:
• Вычисления с данными
• Изменение отдельных элементов данных
• Манипулирование выводом групп строк
• Изменение форматов дат для вывода
• Преобразование формата данных столбцов
• Обработка неопределенных значений
• Логическая обработка IF-THEN-ELSE, которая
может быть также выполнена с помощью
условного выражение case
ORACLG* *
3-57 Copyright © Oracle Corporation, 2001 All rights reserved
Однострочные функции
Однострочные функции MOI у г быть вложены на любую глубину. С ИХ ПОМОЩЬЮ МОЖНО
манипулировать следующими данными:
• Символьные данные
- LOWER, UPPER, INITCAP, CONCAT, SUBSTR, INSTR, LENGTH
• Числовые данные
- ROUND, TRUNC, MOD
• Дат ы
- MONTHS_BETWEEN, ADD MONTHS, NEXT DAY, LAST_DAY, ROUND, TRUNC
- Выражения с датами могут 1акже использовать арифметические операторы.
• Функции преобразования могут использоваться для преобразования символьных
данных, даг и чисел.
- TO_CHAR, TO_DATE, TO_NUMBER
• Функции обрабо!ки неопределенных значений
- NVL, NVL2, NULLIF и COALESCE
• Логическая обработка IF-THEN-ELSE может быть определена внут ри команды SQL е
помощью выражения CASE или функции DECODE.
SYSDATE and DUAL
SYSDATE - это функция, возвращающая текущую дату и время. Обычно SYSDATE
выбираося из фиктивной таблицы DUAL.
Introduction to Oracle9/.- SQL 3-57
Обзор практического занятия 3 , часть 2
• Составление запросов, требующих
использования числовых, символьных
функций и функций для работы с датами.
• Использование конкатенации с функциями.
• Составление запросов, нечувствительных к
регистру символов, для проверки полезности
символьных функций.
• Вычисление продолжительности работы
служащего в месяцах и годах.
• Определение даты аттестации служащего
3-58
Copyright © Oracle Corporation. 2001. All rights reserved
Обзор практического занятия 3 , часть 2
Это занятие содержит многочисленные упражнения, в которых используются символьные
и числовые функции, а также функций для работы с датами.
Помните о том, что в случае вложенных функций результаты вычисляются от вложенных
функций к внешним.
Introduction to Огас1е9к SQL 3-58
Практическое занятие 3, часть 1
I. Напишите запрос для вывода текущей даты. Назовите столбец Date.
Date
08-MAR-01
2. Выведите номер служащего, его фамилию, оклад и новый оклад, повышенный на 15%
и округленный до целого. Назовите столбец New Salary. Сохраните команду SQL в
текстовом файле 1аЬЗ 2.sql.
3. Выполните запрос из файла 1аЬЗ_2 . sql.
EMPLOYEE 1D '| lAST NAME | SALARY Г' New Salary
100 [King j 24000 ( 27600
101 [Kochhar
102 IDe Haan
103 Hunold
104 lErnst
17000 j 19550
17000 | 19550
9000 |..............10350
6000 i 6900
20 tows selected
4. Измените lab3_2 . sql . Добавьте еще один столбец, который будет содержал,
результат вычитания старого оклада из нового. Назовите столбец Increase.
Сохраните измененный запрос в 1аЬЗ 4 . sql. Выполните запрос еще раз .
EMPLOYEE ID . 1 loo h /LAST NAME J Л5* V. a- - jMjr , SALARY : l New Salary J | Increase
<mg i 24000 j 27600 3600 j
101 ^Kochhar 17000 | 19550 I 2550 j
102 De Haan 17000 j 19550 i 2550 |
103 jHunold 104 .Ernst 9000 10350 ! 6000 j 6900 1350 I 3 900 j г ЧЙ1 » « « 1 » «ЧЧ.Ч — »
107 Lorentz 4200 i 4830 I 630 | j
j 124 jMourgos j 5800 j 6670 870 j 525 |
141 jl Rajs i 3500 j 4025
142 pavies 143 iMatos | 3100 35b5 । 2600 | 2990 | 4&5 | ; 390 |
144 •• V э I у э s • 2500 j 2875 375 |
149 j. 206 Zlotkey Gietz 1 10500 12075 I 8300 s 9545 i 1575 I I 12ч.
20 tows selected.
Introduction to Oracle?)/; SQL 3-59
Практическое занятие 3, часть 1 (продолжение)
5. Выведи гс фамилии с зужащих (первая буква каждой фамилии должна бы и, низанной,
а остальные - строчными) и длину каждой фамилии для icx служащих, фами шя
коюрых начинаемся с символа./,Л или М. Присвойic соответствующие заголовки
Г*'» r\ < В t О « в
Name i Length
Abel д У
Matos cj
iMourgos -r
Introduction to Oracle9/; SQL 3-60
Практическое занятие 3, часть 2
6. Для каждою служащего выведите фамилию и вычислите количество месяцев со дня
найма до настоящего времени, округленное до ближайшего целого. Назовите столбец
MONTHS WORKED. Результаты отсортируйте но количеству отработанных месяцев.
Округлите число месяцев до ближайшего целого.
Примечание: ваш результат может отличаться.
LAST NAME ' ЙВ1ЙВО MONTHS WORKED
Zlotkey I 13
. .'....'...I’V’V.X.' .. J.J.O. ... .... .,v„ ...... .... ... ...... ........ . **"««* ... o, .... ............... .. ... ..............
Mourgos i 16
|.oo. ........... ......... ........ ..... ,a .«.««. . ....
|Grant | 22
Lorentz i 25
Varqas = 32
|Taylor i 36
Matos :: 36
............................*............ .................................................................... .
Fay 43
jDavies s 49
Abel j 58
Hartstein j 61
Rajs 65
f .гл.. «.л. V ЧМ« » -J» Я • **----V». twv. »= . • - —— ° чл* - А» •»<•..••. ... к* - ..... «» . . .. .« >>«•«*.> -»* ...... ,ч1лг
Higgins । 81
Gietz j 81
- LAST-NAME О i MONTHS WORKED
De Haan * 98
Ernst 118
. ллллглыихм Ar-* ,ЧАл*л,и.л*,, HJ*. НИИИМИ » .^r--r--ffni -.-r,-fly-,-L-.-nrr.. .T,m.-r- -jru-ir x, ,r.v,--.t,-r..rirj-.TL J -, - - -_ ^-u-.-w-f. -V-. ,-- -. "
Hunold ; 134
Kochhar • 138
АчмллААлА^ач’ЛлчлмА' 4*v*A4.-M«A^...vv - 4^>.w • • «М. *M>J> v#A--_-|-L-_-_----rv.-r.-.Ar 1-T.-r.-v -J- -j-ir-r x~-~-,г r . , _-AAA- - --- -.- - -.-JU- , -.__-._- ~ _X- - U_ -_-_r - X - -,_r T - — AT - X- - ~ - ТГ.1 - -I-.----- .= -z-...-
Whalen I 162
20 rows selected.
Introduction to Oracle9/.- SQL 3-61
Практическое занятие 3, часть 2 (продолжение)
7. Получше по каждому служащему отчет в следующем виде;
<Фамилия> зарабатывает <оклад • в месяц, по желает
оклад>. 11азовигс столбец Dream Sal a t ies.
«.утроенный
Dream Salaries
King earns $24,000.00 monthly but wants $72,000.00.
kochhar earns $17,000.00 monthly but wants $51,000.00
De Haan earns $17,000.00 monthly but wants $51,000.00
Hunold earns $9,000 00 monthly but wants $27,000.00
Ernst earns $6,000.00 monthly but 'wants $18,000.00
Lorentz earns $4,200.00 monthly but wants $12,600.00.
Mourgos earns $5,800.00 monthly but wants $17,400 00.
Rajs earns $3,500 00 monthly but wants $10,500 00
Davies earns $3,100.00 monthly but wants $9,300.00.
iGietz earns $0,390 00 monthly but wants $24,900 00
20 rows selected
Если осталось время, сделайте следующие упражнения.
8. I laiiHiiiMic запрос для вывода фамилий и окладов всех служащих. Назовите выходной
столбец SALARY. Длина столбца SALARY - 15 символов с заполнением символом 5.
I LAST NAME
iking
IKochhar
f............—.................
jDe Haan
jHunold
[Ernst
--- J- | -1 ----«---Г.-Ц J J»rL J-|J- -Л ~L~J« ! ~ «» > -W.
iLorentz
|Mouigos
|Rajs
a« M •о Я О О О О О О п о ... =- , Я п » • • • • • - » - - «
[Davies
’.Matos
Vaiqas
jZlotkey
iAbel "
[7 “......... 7"" SALARY
J$$$$$$$$$$24000~~
[$$$$$$$$$$17000’
[$$$$$$$$$$17000..........
[$.$$$$$$$$$$9000
[$$$$$$$$$$$(5000
[$$$$$$$$$$$4200
[$$$$$$$$$$$5800
$$$$$$$$$$$3jU0
[$$$$$$$$$$$3100
[$$$$$$ $$$$$2bL4J
$$$$$$$$$$$2500.......
[$$$$$$$$$$10500~
!$$$$$$$$$$!1000
[$$$$$$$$$$$8300
20 rows selected
Introduction to Oracle9/.- SQL 3-62
Практическое занятие 3, часть 2 (продолжение)
9. Для каждого служащего выведите фамилию, да<у найма и дату пересмотра зарплат,
которая приходится на первый понедельник после шее in месяцев работы. Назовше
столбец REVIEW. Формат даты при выводе имеет вид: “Monday, the Thirty-First of
LAST NAME
King
HIREJ3ATE
I17-JUN-87
•REVIEW
|Kochhar
De Haan
Hunold
I13-JAN-93
I
Monday, the Twenty-First of December, 1987
[Monday, the Twenty-Sixth of March, 1990
Monday, the Nineteenth of July, 1993
Ernst
Lorentz
Г-------
iMourao
03-JAN-90
[2VMAYWI
t
O7-FEB-99
r
h6-NO\A99
Monday, the Ninth of July, 1990
Monday, the Twenty-Fifth of November, I991
Monday, the Ninth of August, 1999
[Monday. the Twentv-Second of May. 2000
J
jGietz :07-JUN-94 [Monday, the Twelfth of December, 1994
20 rows selected.
10. По каждому служащему выведите фамилию, дату найма и день недели, когда он был
нанят на работу. 11азовите последний столбец DAY. Отсортируйте результаты по дням
Г" • LAST NAME Г HIRE DATE ---J— ' оду '
Grant -24-MAY-99 ..."’’(MONDAY
Ernst ' [21 -MAY-91 TUESDAY
Mourgos [16-NOV-99 (TUESDAY
mm*» a rm •••»•.» *«««. ««a • a a a •• a • a • • . . * * - • • - - a - . - • - • M. g • • *• -Z. • aa >.,<• >>.r •••.*••••*>*>< < •aawoa-aa .«a.o.aao^eooi I »e*as.aaaaatf> ••• • a . aa« •••
Taylor I24-MAR-98 ’TUESDAY
[Rajs (17-OCT-95 -TUESDAY
Gietz 07-JUN-94 (TUESDAY
Higgins O7-JUN-94 (TUESDAY
[King |l 7 JUN-87 WEDNESDAY
[De Haan [13-JAN-93 WEDNESDAY
[Davies ’ i29-JAN-97 WEDNESDAY
I t
Hunold 03-JAN-90 WEDNESDAY
.waa a .1 a,...a.* >— -4>aa. ^av.,>,Z' IH‘W » » »» »»» w< .mm I .ча. Iа ^аам**а*а^« mm-w.-irfwam—mm»» *** - i.mai - m-v.i . .. *• >a -mrimm а
,'Kochhar [21 -SEP-89 THURSDAY
[Whalen H7-SEP-87 THURSDAY
IVataas 09-JUL-98 [THURSDAY
iMatos |l5-MAR-98 [SUNDAY
20 rows selected
Introduction to Oracle9/.- SQL 3-63
Выборка данных из нескольких таблиц
Ж йй
ORACLe
Copyright © Oracle Corporation, 2001. All rights reserved.
Выборка данных из нескольких таблиц
Ж йй
ORACLe
Copyright © Oracle Corporation, 2001. All rights reserved.
Introduction to 0racle9/.- SQL 3-66
Выборка данных из нескольких таблиц
Ж йй
ORACLe
Copyright © Oracle Corporation, 2001. All rights reserved.
Рассматриваемые вопросы
• Команды SELECT для выборки данных из
нескольких таблиц, с помощью
эквисоединений и прочих видов соединений.
• Использование внешних соединений для
просмотра данных, не удовлетворяющих
обычным условиям соединения.
• Соединение таблицы с собой.
Copyright© Oracle Corporation. 2001. All rights reserved. j
Цели урока
Урок посвящен методам выборки данных из нескольких 1аблиц.
Introduction to Oracle9z: SQL 4-2
4
Выборка данных из нескольких таблиц
EMPLOYEES
DEPARTMENTS
20 rows selected
DEPARTMENT Ю )£,РДй1МНЙ WAMt OCATiON ID •
i 10 Administration 1700 •
! 20 I Harkebng 1800
[ " 50 ! Shipping 1500
j 190 ontrarbnq 1700
8 rows selected
I
I M!’l onIII) T)f HAft I MI H I JI) [lH PAH I Ml N tJiAMI’ I
200 \ Г 10 jAdmiHistration
201 [ 20 [Marketing
202 j 20 {Marketing
124 f 50 Shipping
141 i 50 Shtooinii
205 Г 110 uunling
206 Г 110 Accounting
19 rows selected
ORACLe
Copyright © Oracle Corporation, 2001. All rights reserved.
Выборка данных из нескольких таблиц
Иногда требуются данные из более, чем одной таблицы. Отчет в примере на слайде содержи!
данные из двух разных таблиц.
• Employee IDs существует в таблице EMPLOYEES.
• Department IDs существует как в таблице EMPLOYEES, так и в таблице DEPARTMENTS.
• Location IDs существует в таблице DEPARTMENTS.
Для получения отчета необходимо соедини!ь таблицы EMPLOYEES и DEPARTMENTS и произвести
выборку данных из обеих таблиц.
Introduction to Oracled/.- SQL 4-3
Декартово произведение
• Декартово произведение образуется , если:
- опущено условие соединения;
- условие соединения недействительно;
- все строки первой таблицы соединяются со
всеми строками второй таблицы.
• Во избежание получения декартова
произведения предложение where всегда
должно включать правильное условие
соединения.
Декартово произведение
Если условие соединения недействительно или опущено, результатом запроса будет декартово
произведение двух таблиц, включающее все комбинации строк. Все строки первой таблицы
соединяются со всеми строками второй таблицы.
Как правило, декартово произведение содержит большое количество строк, и результат получается
не очень полезным. Поэтому если вывод всех комбинаций строк нс требуется, следует
использовать предложение WHERE с правильным условием соединения.
Декартово произведение может быть полезным для генерации большого количества тестовых строк,
если необходимо смоделирован, выбор большого объема информации.
Introduction to Oracle9/.- SQL 4-4
Получение дека EMPLOYEES (20 СТРОК) ИМИ l»Yl I 11) 1 Ahl .NAME DtkARlMl N1 1 | 100 iking ’ 90 i 101 -Kochhar 90 j 205 Higgins 110 i 20b JGietz j 110 20 rows selected employee id ! 200 i [ 201 1 Декартово (- произведение: —>- f 141 20x8=160 строк 20b 160 tows selectee i ртов а произведем DEPARTMENTS (8 CTp #ЕРЙПМЕНТ.!Р OtPjARIMt«T_NAMt 10 ^Administration 20 Marketing 50 ’Shipping 190 {Connecting 8 rows selected 1 1 DEPARTMENTJD [OEPARTMENTJIAME 10 Administration 20 Maiketing 20 -Maikelmg 50 Shipping 50 Shmninn . । ..ng | 110 {Contracting 1Я ok) Location jo 170) \ 1800 j 1500 1 1700
г ORACLE
Copyright © Oracle Corporation, 2001. All rights reserved
Получение декартова произведения
Декартово произведение образуется при отсутствии условия соединения таблиц. Пример на сланце
показывает вывод фамилии служащего и названия отдела из таблиц EMPLOYEES и DEPARTMENTS.
Т.к. предложение WHERE О1сутсгвуе1, все строки таблицы EMPLOYEES (20 строк) соединяются со
всеми строками таблицы DEPARTMENTS (8 строки), что даст 160 выходных строк.
SELECT last_name, department_name dept_name
FROM employees, departments;
LAST NAME
jKochhar
DEPT NAME
* * *—4
Administration
(Administration
IA flminictratinn
unirau..
160 rows selected.
Introduction to Oracle9/: SQL 4-5
Виды соединений
Разработанные Oracle
соединения (версии
до 8/ включительно):
• Эквисоединение
• Не-эквисоединение
• Внешнее соединение
• Соединение таблицы с
собой
SQL: 1999
Различные типы
соединений:
Перекрестные
соединения
Натуральные
соединения
опция USING
Полное или
двухстороннее внешнее
соединение
Произвольные условия
соединения для
внешнего соединения
ORACLG' г \
Copyright © Oracle Corporation, 2001 All rights reserved
Виды соединений
База данных Огас1е9/ позволяв! использован, синтаксис SQL99. До версии 9/ синтаксис соединений
отличался от стандартов ANSI. Новый синтаксис соединений, удовлсзворяющий стандарту SQL99
нс даст каких-либо преимуществ по производительное! и ио сравнению с синтаксисом, который
существовал в предыдущих версиях.
Introduction to Oracle9/.- SQL 4-6
Соединение таблиц с использованием
синтаксиса, разработанного Oracle
Соединение используется для выборки
данных из нескольких таблиц.
b
SELECT таблица!.столбец, таблица2.столбец I
FROM таблица!, таблица 2 I
WHERE таблица!.столбец! = таблица2.столбец2; I
• Условие соединения указывается в
предложении where.
• Если одно и то же имя столбца присутствует
более, чем в одной таблице, к имени столбца
добавляется имя таблицы в виде префикса.
ORACLe
4-7 Copyright © Oracle Corporation, 2001. All rights reserved.
Определение соединении
Для выборки данных из нескольких таблиц требуется условие соединения. Строки одной таблицы
соединяются со строками другой с помощью общих значений в соответствующих столбцах -
обычно в столбцах первичных и внешних ключей.
Для вывода данных из двух или более взаимосвязанных таблиц можно задать простое условие
соединения в предложении WHERE.
Синтаксис:
таблица! . столбец таблица и столбец, из которых производится выборка
таблица! . столбец! = условие, которое соединяет (или связывает) таблицы
таблица 1.столбец2
Указания
• Для упрощения чтения команд SELECT, соединяющих таблицы, и облегчения доступа к БД
всегда указывайте имена таблиц перед именами столбцов.
• Если в нескольких таблицах есть столбцы с одинаковыми именами, указание имени таблицы
перед именем столбца обязательно.
• Для соединения п таблиц требуется, по крайней мере, (п-!) условий соединения.
Следовательно, для соединения четырех таблиц требуются, по крайней мере, три условия. Эю
правило не распространяется на таблицы с составным первичным ключом. В этом случае для
однозначной идентификации строки требуется более одного столбца.
Более подробную информацию смотри в Oracle9i SQL Reference, “SELECT”
Introduction to Oracled/; SQL 4-7
Что такое эквисоединение?
DEPARTMENTS
EMPLOYEES
DLI’AKIMLNr ID
10
20
50
50
50
so
60
60
МО
IMI’AHIMFNl NAWt
Administration
Marketing
Marketing
Shipping
Shipping
Shipping
Shipping
IT
Внешний ключ
Главный ключ
4-8
Copyright © Oracle Corporation, 2001 All rights reserved.
Эквисоединения
Для определения названия отдела, в котором работает служащий, значение столбца
DEPARTMENT_ID в таблице EMPLOYEES сравнивается со значениями DEPARTMENT_ID в таблице
DEPARTMENTS . Отношение между таблицами EMPLOYEES и DEPARTMENTS представляет собой
эквисосдинсние equijoin), т.е. значения столбца DEPARTMENT ID в обеих таблицах должны быть
равны. Часю эти столбцы являются компонентами главного и внешнего ключа.
Примечание
Зквисосдипения называются также простыми (simple) или внутренними (inner) соединениями.
Introduction to OracleS)/.* SQL 4-8
Выборка записей с помощью
эквисоединений
О SWlK if DLPARTMCHJJD DLPARfMfMIJD LOCATION ID x
| 200 jWhalen 10 I 10 1700
201 [Hailsiem 20 \ 20 1000
202 'fay 20 20 1800
, 124 iMoutgos 50 ? 50 1500
i 141 -Rajs 50 50 1500
142 Davies ' 50Г 50 15ГО
5Л : 41 I5i Щ
। Zlb Higgins 110 1 1Ю 1 г
206 Gitlz 1 no i 110 1700
19 rows selected
ORACLE
4-9 Copyright © Oracle Corporation, 2001. All rights reserved.
Выборка записей с помощью эквисоединений
В примере на слайде:
• Предложение SELECT задает имена столбцов для выборки:
- фамилия служащею, номер служащею и номер отдела (столбцы таблицы
EMPLOYEES)
- номер отдела, название отдела и местоположение отдела (столбцы таблицы
DEPARTMENTS)
• Предложение FROM задаст две таблицы, к которым должна обращайся база
данных:
- Таблица EMPLOYEES
- Таблица DEPARTMENTS
• Предложение WHERE указывает, как соединяются таблицы:
EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT ID
1 к. столбец DEPARTMENT_ID присутствует в обеих таблицах, имени столбца должно
предшествовать имя таблицы во избежание путаницы.
Introduction to Oracle!)/.- SQL 4-9
Дополнительные условия поиска с
оператором and
EMPLOYEES
DEPARTMENTS
LASlNAML DLPAHIMLNI ID
Vvhalen
DL РАН I ML H I ID
DLPAKIMLN! НЛЫ1
10
Hi
Administration
Harlstein
Marketing
50
50
5П
.Shipping
•Shipping
Mourgos
:-R*js
Davies
[Malos 4J "TTY ;J upping
Vargas 50 50 Shipping
Hunold 60 E-0 IT
Lrnst ЕЮ Г ЕЮ IT
Lorentz 60 60 IT
Zlotkev 80 RH r»aloc I
’’Э- • 1 ^countii.^
Gielz 110 ] 110 Ar con Ming
1Э rows selected
Дополнительные условия поиска с оператором and
Предложение WHERE позволяет задавать не только условия соединения таблиц, но и друт не
критерии поиска. Например, чтобы вывести фамилию, номер отдела и месюиоложсиис отдела для
служащего Matos, требуется дополнительное условие в предложении WHERE
SELECT last_name, employees . department_id,
department_name
FROM employees, departments
WHERE employees.department_id - departments.department_id
AND last_name = 'Matos';
LASTJIAME ’[ DEPARTMENT ID I DEPARTMENT NAME
|Matos | 50 (Shipping
Introduction to Oracle9/.- SQL 4-10
-4
Различение столбцов с одинаковыми
именами
* Для различения одноименных столбцов из
разных таблиц используются префиксы в виде
имен таблиц.
• Использование префиксов в виде имен таблиц
увеличивает производительность.
• Одноименные столбцы из разных таблиц
можно различать по их псевдонимам.
ORACLe
4-11 Copyright © Oracle Corporation, 2001 All rights reserved.
Различение одноименных столбцов
Во избежание путаницы именам столбцов в предложении WHERE должны предшествовать имена
таблиц. Без такого префикса столбец DEPARTMENT ID может принадлежать как таблице
DEPARTMENTS, так и таблице EMPLOYEES. Для выполнения запроса необходимо добавить
префиксы.
Если одноименных столбцов в таблицах нет, то для различения столбцов указание имен таблиц нс
требуется Но благодаря префиксам увеличивается производительность, так как в этом случае
сервер Oracle точно знает, i де искать столбцы.
Необходимость различения одноименных столбцов может возникнуть и в дру1 их предложениях,
например, SELECT или ORDER BY.
Introduction to Oracled/.- SQL 4-11
Использование псевдонимов таблиц
• Упрощает запросы
• Повышает производительность
SELECT е.employee_id, e.last_name, е.department id
d.department_id, d.location id
FROM employees e, departments d
WHERE e.department id = d.department id;
4-12 Copyright © Oracle Corporation, 2001. All rights reserved
Псевдонимы таблиц
Задание столбцов с именами таблиц требует времени, особенно если имена у таблиц длинные
Поэтому вместо имен таблиц можно использовать их псевдонимы (aliases). Как и псевдонимы
столбцов, которые дают альтернативное имя столбцу, псевдонимы таблиц дают альтернативное
имя таблице. Использование псевдонимов таблиц уменьшает объем кода SQL и, следовательно,
экономит память.
В примере на слайде обратите внимание на указание псевдонимов inad.iuii в команде SELECT:
полное имя таблицы, пробел, а затем псевдоним таблицы. Для таблицы EMPLOYEES задан
псевдоним е , а для таблицы DEPARTMENTS - псевдоним d.
Указания
• Псевдонимы таблиц могут быть длиной до тридцати символов, но чем они короче, тем
лучше
• Если в предложении FROM для указания таблицы используется псевдоним, этот псевдоним
таблицы должен использоваться вместо имени таблицы во всем предложении SELECT.
• Следует выбирать осмысленные псевдонимы.
• Действие псевдонима таблицы распространяется лишь на текущую команду SELECT.
Introduction to Oracle9/.- SQL 4-12
Соединение более, чем двух таблиц
EMPLOYEES DEPARTMENTS LOCATIONS
..DEPARTMEHTJD «V fDEPARTMTNTJP LOCATION ID [LOCATlOflJP
.King 90 1 ’0 1700 1400 Southlake
Kochhar > 90 1 20 1800 1500 South San Francisco
|De Haan 90 I 50 1500 1700 Seattle
•Hunold 60 1 GO 1400 1800 Toronto
ferns! 60 1 80 2500 2500 Oxford
feorentz 60 [ 90 1700
j 110 1700
;Gram | 190 1700
Whalen 10 8 lows selected
Hartstein 20
F ay 20
^Higgins 110
•Gietz 110
Для соединения п таблиц требуется, по крайней
мере, (п-1) условий соединения. Следовательно,
для соединения трех таблиц требуются, по
крайней мере, два условия._________________
OPACLC
4-13 Copyright © Oracle Corporation. 2001. All rights reserved
Дополнительные условия поиска
Иногда требуется соединить более двух таблиц. Например, чтобы получить фамилию,
наименование подразделения и юрод, в котором оно находится, необходимо соединить таблицы
EMPLOYEES, DEPARTMENTS и LOCATIONS.
SELECT e.last_name, d.department_name, l.city
FROM employees e, departments d, locations 1
WHERE e.department_id = d.department_id
AND d.location_id = 1.location_rd;
[ I^AST^NAME Я f DEP|\RTMENTNAME Hunold IT Ernst IT Lorentz IT Mourgos Shipping foais IShiooina -«»- 1 1 — a.® « . ->—». —» »- * — a J _ - — w a * »»- • • •»- .«..a. wm- * „aa •*> а wa 11 aylor (Sales 19 tows selected. Southlake (Southlake Southlake внга -v « чгЛл .<••« о • • *••• .а . ч •• •••о •• ®ч> •= • «о • • о □ »а • а о о •** * а*4- . • South San Francisco South San Francisco (Oxford
Introduction to Oracle9Z.- SQL 4-13
Не-эквисоединения
EMPLOYEES
SALARY
King 24000
.kochhar 17000
De Haan 17000
Hunold 9000
Ernst 6800
~ - Lnientz 4200
Mouigos 5800
Rajs 3500
Davies '3100
Matos 2600
Varqas 2500
,.j0
.Higgms 12000
|Gielz 8300
20 rows selected
JOB GRADES
[ GRA LOWLSISALH HIGHIS1 SAL
A 1000 ? 2999
В 3000 : 5999
fc 6000 | QWi
D 10000 14QQQ
E 15-000 •
F 25П00 40000
6 rows selected
Оклад в таблице employees
находится между нижней и
верхней границами окладов
в таблице job_grades
ORACLE
4-14
Copyright © Oracle Corporation, 2001. All rights reserved
Не-эквисоединения
Не-эквисосдинение - эго условие соединения, содержащее оператор, отличный от
оператора равенства
Отношение между таблицами EMPLOYEES и JOB_GRADES не является
эквисосдинением. поскольку ни один столбец таблицы EMPLOYEES не соответствует
точно какому-либо с толбиу в таблице SALGRADE. Связь между двумя таблицами
такова, что значение столбца SALARY в таблице EMPLOYEES находится между
значениями столбцов LOWEST_SALARY и HIGHESTJSALARY таблицы JOB_GRADES
Для такого соединения оператор “равно" (=) использоваться не может
Introduction to Oracle9/; SQL 4-14
Выборка записей с помощью
не-эквисоединении
SELECT e. las t__name,
FROM
WHERE
employees e, job_grades j
e,salary BETWEEN j.lowest_sal AND j.highest_sal
й-
LAST ПАМЕ
• * * -•
SALAHY
GRA
Malos
•Vargas
Lorenlz
Mouigos
Davies
2600
2500
4200
5800
3500
3100
rsochhar
De Haan
17000
1 /000
20 tows selected
ORACUe
E
E
Copyright © Oracle Corporation, 2001. All rights reserved.
Выборка записей с помощью не-эквисоединений
В примере на слайде не-эквисоединение создастся для оценки категории заработной платы
служащего. Она должна быть между любой нарой нижней и верхней границ диапазона.
Важно отметить, что при выполнении запроса каждый служащий появляется только один раз. Ни
один служащий в списке нс повторяется. Для этого существует две причины:
’ Ни одна строка в таблице JOB_GRADES не содержит категорий зарплат, перекрывающих друг
друга. Т.е. заработная плата служащего может быть между нижним и верхнем значениями
зарплат только одной сгроки таблицы JOB_GRADES .
• Заработная плата всех служащих находится в пределах, обозначенных таблицей
JOB_GRADES. Т е. ни один служащий не зарабатывает меньше, чем самое малое значение в
столбце LOWEST SAL , или больше, чем самое большое значение в столбце HIGHEST_SAL.
Примечание
Можно было бы использован, и другие операторы (например, <- и >= ), но оператор BETWEEN
является самым простым. Не забудьте, что в операторе BETWEEN сначала указывается нижняя
граница, а затем - верхняя. Псевдонимы таблиц использованы нс для различения столбцов, а для
повышения производительности.
Introduction to Oracle9/.- SQL 4-15
г
Внешние
соединения
DEPARTMENTS
EMPLOYEES
Г DFPARIMHH НАМГ I ВТРАВИМ НГ 10
Administration j 10 i
.................... t ;
Marketing.............20
BLCAHIMLHT I»
90
LAS I NAML
Г"
Shipping
60
Sales
Executive
’Contracting
110
191
8 rows selected
90
60
EO
10
J.i
110
110
l< mg
k'ochhai
De Hain
Huncild
V»» .eh
Had stem
Higgins
j _
। Met г
... {
r
20 row* selected
В отделе 190
нет служащих
Copyright © Oracle Corporation, 2001. All rights reserved.
Выборка записей, не имеющих прямых совпадений, с помощью внешних соединений
Если строки нс удовлетворяет условию соединения, она не включается в результат запроса.
Например, при эквисосдинении таблиц EMPLOYEES и DEPARTMENTS сотрудница Grant нс войдез в
результат, поскольку для нес пе определен столбец department ID в таблице EMPLOYEES. Вместо 20
записей будет выбрано 19.
SELECT e.last_name, e.department_id,
FROM employees e, departments d
WHERE e.department_id = d.department_id
;TASOAME,
DEPARTMENT ID
d.department_name
DEPARTMENT NAME
Whalen
Hartstem
Fay
Mourgos
f____---
,. .iggins
Gietz
~ ~ r~ -----------
10 Administration
20 Marketing
r
110 ’Accounting
J -J
110 Accounting
19 tows selected.
Introduction to OracleS/.- SQL 4-16
Синтаксис внешнего соединения
• Внешнее соединение используется для
выборки строк, не удовлетворяющих обычным
условиям соединения.
• Оператором внешнего соединения является
знак плюс (+).
SELECT таблица!.столбец, таблица2.столбец
FROM таблица!, таблица2
WHERE таблица!.столбец(+) = таблица2.столбец;
SELECT таблица!.столбец, таблица2.столбец
FROM таблица!, таблица2
WHERE таблица!.столбец = таблица2.столбец(+) ;
ОРАСие
4-17 Copyright О Oracle Corporation, 2001. All rights reserved.
Выборка записей, не имеющих прямых совпадений, с помощью внешних соединений
Недостающие строки можно получить, если использовать в условии соединения оператор внешнего
соединения (outer join). Этим оператором является символ “плюс" в скобках (+), и помещается он на
"стороне" соединения у таблицы с недостающей информацией. В результате применения
оператора в этой таблице создается одна или более строк с неопределенными значениями, к
которым можно присоединить одну или более строк из таблицы, где имеется вся необходимая
информация.
Синтаксис:
tablel.столбец =
Cable2.столбец (+)
условие соединения(или связи)габлиц;
символ внешнего соединения; он можег находиться на любой
стороне условия в предложении WHERE , но нс на обеих сторонах
одновременно; символ внешнего соединения помещается сразу за
именем столбца таблицы с недостающими строками.
Introduction to Oracle9Z- SQL 4-17
Использование внешних соединений
SELECT е . last__namo, е.department_id, d. depar tment_name
FROM employees e, departments d
WHERE e.department_id(+) — d.departmentald;
[ ” ~ ’ LASTJIAME DEPARTMENT J D
[Wlnlen
Hartstein
jFay |
Mourgos
Rajs
ЯЕРАВТЙЕйТ NAME
10 Administration
20 Marketing
20 Marketing
50 Shipping
50 Shipping
.Hiqqms i I 10
fc-ietz , 110 Accounting
[ Contracting
20 rows selected
ORACLe
4-18
Copyright © Oracle Corporation. 2001 All rights reserved.
Использование внешних соединений
13 примере запрашиваются фамилии, номера и названия отделов сотрудников Отдел
Contracting, не имеющий сотрудников, также включен в список.
Ограничения для внешних соединений
Оператор внешнего соединения может использоваться только на одной стороне выражения -
на стороне, где недостаточно информации. Он возвращает строки нтблицы, для которых нет
соответствующей строки в другой таблице.
Условия, предполагающие внешнее соединение, нс могут использовать оператор IN или быть
связанными с другими условиями с помощью оператора OR .
Introduction to Огас1е9Л- SQL 4-18
Соединение таблицы с собой
EMPLOYEES (MANAGER)
NAME
EMPLOYEES (WORKER)
* meiDYU Ш lASl.NAMi . едмын„II)
°'.... 101* * : • | Kochhar ..... ........... 100 • — 100
102 jDe Haan i... 100 • 100 [king
124 iMourgos 100 <=— - 100 Iking
149 •Zlotkey 1 100 100 [king
201 Hartstein 1 100 f 100 (King
200 Whalen 101 • 101 iKochhar
206 iUielZ 205 Higgiri.
19 rows selected
MANAGER_ID В Таблице WORKER равен EMPLOYEE_ID
в таблице manager .
ORACLe
4-19
Copyright © Oracle Corporation. 2001. All rights reserved.
Соединение таблицы с собой
Иногда требустоя соединить таблицу с собой. Чтобы найти менеджера каждо! о служаще! о,
необходимо соединить таблицу EMPLOYEES с этой же самой таблицей. Чтобы, например, выяснить
фамилию менеджера служащего но фамилии Whalen, необходимо сделать следующее:
• Найти фамилию Whalen в столбце LAST_NAME таблицы EMPLOYEES.
• Найти номер менеджера в столбце MANAGER_ID . В данном случае номер менеджера
сотрудника Whalen - 101.
• В столбце LAST_NAME найти фамилию служащего, номер которого EMPLOYEE_ID равен 101.
Номер принадлежит служащему но фамилии Kochhar . Таким образом, Kochhar является
менеджером 1для Whalen.
В этом процессе таблица просматривается дважды. В первый раз вы делаете это, чтобы найт и
фамилию Whalen в столбце LAST_NAME таблицы EMPLOYEES и номер его менеджера (101). Во
второй раз просматривается столбец EMPLOYEE_ID , чтобы найти номер 101, а затем столбец
LAST NAME , чтобы найти фамилию Kochhar.
Introduction to Oracle9/; SQL 4-19
Соединение таблицы с собой
SELECT w.last_name || 1 works for '
|| m.last_name
FROM employees w, employees m
WHERE worker.manager id = manager.employee id
p • > , • • V WAV-г-V •, AS «s jz «А A -.-Л” v. V*
W.LAST HAME^ORKSFOIVHMLAST NAMt
к ochhai works foi King
Oe Haan works for King
Mourgos works for king
Zlolkey works for king
Haitstein works for King
Whalen works for kochhar
Higgins works for Kochhar
Г •• ...... - ..
ray works foi Harisiem
|Gietz works for Higgins
19 rows selected
4-20 Copyright © Oracle Corporation, 2001. All rights reserved
Соединение таблицы с собой (продолжение)
В этом примере таблица EMPLOYEES соединяется с собой. Для имитации двух таблиц в
предложении FROM используется два псевдонима одной и той же таблицы EMPLOYEES, а именно:
w (РАБОТНИК) и m(МЕНЕДЖЕР).
Условие соединения в предложении WHERE означает следующее: “где номер менеджера в таблице
работников w совпадает с номером работника в таблице менеджеров (ш)“.
Introduction to Oracle9/.- SQL 4-20
Обзор практического занятия 4, часть 1
Эта часть практикума содержит задания по
написанию запросов, в которых используется
синтаксис условий соединения, разработанный
Oracle.
ORACL.G*
Copyright © Oracle Corporation. 2001 All rights reserved.
Практическое занятие 4, часть 1
Эго практическое занятие прививает навыки выборки данных из более, чем одной таблицы. Вы
можете использовать синтаксис, разработанный Oracle, который был рассмотрен в этом уроке.
Выполните задания с I по 4, приведенные в конце это! о урока.
Introduction to Oracle9i.* SQL 4-21
Соединение таблиц с использованием
синтаксиса стандарта SQL: 1999
Используйте соединение для запроса
информации из нескольких таблиц
SELECT таблица!.столбец, таблица2.столбец
FROM таблица!
[CROSS JOIN таблица2] |
[NATURAL JOIN таблица2] |
[JOIN таблица2 USING (имя__столбца) ] |
[JOIN таблица2
ON (таблица!.имя_столбца = таблица 2.имя_ столбца)] |
[LEFT|RIGHT|FULL OUTER JOIN таблица2
ON (таблица!.имя столбца = таблица2.имя столбца)];
4-22 Copyright © Oracle Corporation, 2001 All rights reserved.
Определение соединений
Используя синтаксис стандарта SQL: 1999. вы можете получип, такие же результаты запросов,
которые были описаны раннее в этом уроке.
Синтаксис:
таблица!.столбец
CROSS JOIN
NATURAL JOIN
JOIN таблица
USING имя_ столбца
JOIN таблица ON
таблица 1.имя_столбца
= таблица2. имя__столбца
LEFT/RIGHT/FULL OUTER
таблица и столбец, из которых производится выборка
возвращает декартово произведение двух таблиц
соединяет две таблицы на основе одинакового имени столбца
выполняет эквнсосдинение на основе имени столбца
выполняет жвисоединенис на основе условия в
предложении ON
Болес подробную информацию можно найти в Oraclc9i SQL Reference, “SELECT."
Introduction to Oracle9r: SQL 4-22
i
Создание перекрестных соединений
• Предложение cross join используется для
получения векторного произведения двух
таблиц.
• Это то же самое, что и декартово произведение
двух таблиц.
>•*•**' »* МАч**»*., ’.« -и,,, , ,,-Ч< Ч WV-S Л-W. V «Ш-, ••>4 >V». =. V. . . Ч.Ч»И.», , Л« .Ч*« «Ч* »ЧЧЧ^ 1»*» *•
lAST.NAME <й-Ш DCPARTMLHT КЛМЬ *'
* » *»>ч
v.tslein ^,.нд
Fay :Conliacling
Higgins ^Contracting
Gielz Conliacling
160 rows selected
ORACLE*
4-23 Copyright Ф Oracle Corporation, 2001. All rights reserved.
Создание перекрестных соединений
В примере на слайде выдастся такой же результат, что и в следующем запросе:
SELECT last_name, department_name
FROM employees, departments;
Ы LAST NAME [ ~ ’ DEPARTMENTJIAME
’V.- - -J ь-.,гк-.-и-к-Л|Я-1,-и^|-.плвал1“ч.1Гит.лллип.“1г*г«*ЛГ4*лГ1|*иЧЧ.ч.пЛл 4‘ R-..< **»**• AA4VWV ° - ...-..-.-.•....•------— -I-- ---. _. «> - -Л-_- v- _ r d- -_rL-».
iKing Administration
Kochhar ^Administration
_____________________________________________________________
iDe Haan Administration
j^jins |ouiuiacting
(Gietz {Contracting
160 rows selected.
Introduction to Oracle97; SQL 4-23
Создание натуральных соединений
• Предложение natural join основывается на
всех столбцах двух таблиц, имеющих
одинаковые имена.
• Выбираются строки из двух таблиц, которые
имеют одинаковые значения во всех
соответствующих столбцах.
• Если столбцы с одинаковыми именами имеют
разные типы данных, возвращается сообщение
об ошибке.
ORACLE
4-24
Copyright © Oracle Corporation, 2001. All rights reserved
Создание натуральных соединений
В предыдущих версиях сервера Oracle нельзя было выполнять связывание без явною указания
столбцов в соответствующих таблицах. В Огас1е9/ возможно автоматическое соединение с
использованием ключевого слова NATURAL JOIN на основе столбцов двух таблиц, которые имеют
одинаковые имена и типы данных.
Примечание
Соединение может быть произведено только, если столбцы имеют одинаковые имена и гнпы
данных. Если столбцы имеют одинаковые имена, но различные типы данных, использование
синтаксиса NATURAL JOIN вызывает появление сообщения об ошибке.
Introduction to Oracle9/.- SQL 4-24
Выборка записей с помощью
натуральных соединений
SELECT department_id, department_name,
location_id, city
FRCM departments
NATURAL JOIN locations;
OEPAPrutNTJD f ' DEPARfMENTjtAM? LOCATIOHJD ? cmH
60 jlT I4U0 Southlake
50 (Shipping 1500 South San Francisco
10 jAdmimshation 1700 Seattle
90 Executive 1700 Seattle
110 Accounting 1700 Seattle
190 ^Contracting 1700 Seattle
20 Marketing 1800 Tur onto
00 Sales 2500 Oxford
6 rows selected
OPACLG
Copyright © Oracle Corporation. 2001. All rights reserved
Выборка записей с помощью натуральных соединений
В примере на слайде таблица LOCATIONS соединяется с таблицей DEPARTMENTS на основе
столбца LOCATION_ID , коюрый является единственным столбцом с одинаковым именем в обоих
таблицах. Если бы были другие общие столбцы, они бы гоже использовались для соединения
таблиц.
Экнисоединсния
Натуральное соединение может быть также записано в виде эквисоединения:
SELECT department_id, department_name,
departments.location_id, city
FROM departments, locations
WHERE departments.location id = locations.location id;
Натуральное соединение с предложением WHERE
При использовании натурального соединения дополнительные ограничения могут быть включены с
помощью предложения WHERE. В приведенном ниже примере введено ограничение для вывода
строк с данными 20 или 50 отделов.
SELECT
FROM
NATURAL
WHERE
department_id, department_name,
location_id, city
departments
JOIN locations
department_id IN (20, 50);
Introduction to Oracle9/.- SQL 4-25
Создание соединений с
использованием предложения using
• Если несколько столбцов имеют одинаковые
имена, но разные типы данных, предложение
natural join может быть заменено на
предложения using , в котором можно явно
указать столбцы, по которым нужно
производить соединение.
• Имена таблиц и псевдонимы не указываются в
ссылках на столбцы.
• Предложения natural join и using - взаимно
исключают друг друга.
Предложение using
Натуральные соединения используют все столбцы с согласованными именами и iинами данных
для соединения таблиц. В предложении USING мот у т быть указаны только те столбцы, которые
следует использовать в соединении. Столбцы, на которые делаются ссылки в предложении USING,
не должны включать квалификаторы (имя таблицы или псевдоним), которые применяются в любом
другом месте команды SQL.
Например, эта команда нс содержит ошибок:
SELECT l.city, d.department_name
FROM locations 1 JOIN departments d USING (location_id)
WHERE location_id = 1400;
Эта команда - неверная, так как столбец LOCATION_ID содержит квалификатор в предложении
WHERE:
SELECT l.city, d.department_name
FROM locations 1 JOIN departments d USING (location id)
WHERE d.location_id = 1400;
ORA-25154: column part of USING clause cannot have qualifier
Такое же ограничение накладывается на натуральные соединения Потому столбцы с
одинаковыми именами в обеих таблицах должны использоваться бет квалификаторов.
Introduction to OracleSh? SQL 4-26
Выборка записей с использованием
предложения using
SELECT е.employee id, е.lastname, d.location_id
FROM employees e JOIN departments d
USING (depar tment^id);
200 [Whalen
: 201 (Hartstein
202 jFay
. * * r
124 jMourgos
141 |Rajs
142 [Davies
205 [Higgins
206 [Gielz
19 rows selected
ORACLE
4-27 Copyright © Oracle Corporation. 2001 All rights reserved.
Выборка записей с использованием предложения using
В приведенном примере выполняется соединение таблиц EMPLOYEES и DEPARTMENTS на основе
столбца DEPARTMENT_ID. В результате выдаются сведения об идентификаторах местоположения
подразделений, в которых работают служащие.
Эти же сведения могут быть также получены с помощью эквисоединения:
SELECT employee_id, last_name,
employees.department_id, location_id
FROM employees, departments
WHERE employees.department_id - departments.department_id;
Introduction to Oracled/.* SQL 4-27
Создание соединений с помощью
предложения on
• В основе натурального соединения лежит
эквисоединение всех столбцов с одинаковыми
именами.
• Предложение on используется для
определения произвольных соединений или
столбцов, участвующих в соединении.
• Отделяются условия соединения от условий
ограничения.
• Предложение on делает код более легким для
понимания.
ORACLE
4-28 Copyright © Oracle Corporation, 2001. All rights reserved.
Условие on
Используйте предложение ON для определения условия соединения. Такой подход позволит вам
отделяй условия соединения от других условий поиска или отбора, которые задаются в
предложении WHERE.
Introduction to Oracle9/; SQL 4-28
Выборка записей с использованием
предложения on
SELECT е.employee_id, е.last_name, е.depar tment_id,
d.department_id, d. location_id
FROM employees e JOIN departments d
ON (e.department id = d.department id);
Д)5 Higgins
206 GipIz
I? 'EMPLOYEEJO'* :>?hj? LAST.HAM E It
I 200 Whalen
| 201 Hartstem
a -««• amw I I I ^aa aa aa .a^—aa aa^^ »awa-»»a —- » a аа»ч !> aaa a Ha aaa <»»a « aa fcw.wea
202 Fay
| 124 Mourgns
| 141 :Rajs..............
142 jDavies
h^EPARTMEHTjn^ LOC/ moHjtOi
10 i io 1700
c=& IWW .ez- - - . . - '
20 20 1800
• 20 1800
50 50 1500 |
50 50 1500 1
50 Г 50 1500 i
110 | 110 17uo
110 I 110 1700
19 rows selected
ORACLE
4-29 Copyright © Oracle Corporation, 2001. All rights reserved.
Создание соединений с использованием предложения on
Предложение ON может быть также использовано для соединения при помощи столбцов с разными
именами:
SELECT e.last_name emp, m.last_name mgr
FROM employees e JOIN employees m
ON (e.manager id = m.employee id);
EMP
Kochhar
De Haan
**••****•••*******••*••• '"о *"* -.<**»' ччил*—WMAMi*. n**
Mfll IГ fl HQ
|Gietz
19 rows selected
Higgins
В приведенном примере устанавливается соединение габлицы EMPLOYEES с собой на основе
равенства значений столбцов EMPLOYEE_ID и MANAGER_ID.
Introduction to Oracle9z; SQL 4-29
Создание трехсторонних соединений
при помощи предложения on
SELECT employee_id, city, departmentjiame
FROM employees e
JOIN departments d
ON d.department_id = e.department_id
JOIN ’locations 1 ‘
ON J* d.location id = 1.location id;
cr|Y
1 100 ^Seattle Executive
1 101 Seattle Executive
1 102 Seattle Executive
1 103 Southlake hi
r 104 Southlake IT
1 107 Southlake IT
Г 104 Frjnricrn xkilininn
206 |S»attle
Iе* rows selected
ORACLG
4-30 Copyright О Oracle Corporation. 2001. Al! rights reserved.
Трехсторонние соединения
Трехстороннее соединение — эго соединение грех таблиц. В соответствие с гибким синтаксисом
стандарта SQL: 1999 соединения обрабатываются слева направо. Поэтому в приведенном примере
первым обрабатывается соединение между таблицами EMPLOYEES и DEPARTMENTS (EMPLOYEES
JOIN DEPARTMENTS). В этом соединении указываются ссылки на столбцы таблиц EMPLOYEES и
DEPARTMENTS, но в нем не может быть ссылок на столбцы таблицы LOCATIONS. Во втором
условии соединения MOiyi быть ссылки на столбцы всех трех таблиц.
Такие же данные получаются с помощью трехстороннего эквисосдинсния:
SELECT employee_id, city, department_name
FROM employees, departments, locations
WHERE employees.department_id = departments.department_id
AND departments.location_id = locations.location_id;
Introduction to Oracle97.- SQL 4-30
4
Сравнение внутреннего (inner) и
внешнего (outer) соединений
• В соответствие со стандартом SQL: 1999
внутреннее соединение - это соединение двух
таблиц, возвращающее только строки,
соответствующие условию соединения.
• Соединение двух таблиц, возвращающее как
строки внутреннего соединения, так и
несоотвествующие строки левой (правой)
таблицы, - это левое ( правое) внешнее
соединение.
• Полное внешнее соединение возвращает
результаты внутреннего соединения, а также
левого и правого внешнего соединений.
ORACLe
4-31 Copyright О Oracle Corporation, 2001. All rights reserved.
Сравнение синтаксиса соединений, удовлетворяющего стандарту SQL: 1999, и
синтаксиса, разработанного Oracle
Oracle SQL: 1999
Эквисоединение llaiypajibiioe или внузреннее соединения
Внешнее соединение Левое, правое или полное внешнее соединение
Соединение таблицы с собой Соединение с использованием предложения ON
11е’Эквисосдинсние Соединение с использованием предложения USING
Декартово произведение Перекрестное соединение
Introduction to Oracle9/.- SQL 4-31
Пример левого внешнего соединения
В этом запросе возвращаются все строки таблицы EMPLOYEES, даже если они нс соогве1С1вуют
строкам таблицы DEPARTMENTS, так как таблица EMPLOYEES являщея левой таблицей во
внешнем соединении.
В предыдущих версиях запрос записывался в следующем виде.
SELECT e.last_name, е. department_id, d.department_name
FROM employees e, departments d
WHERE d.department_id (+) = e.deparLment_id;
introduction to Oracle9/.- SQL 4-32
Правое внешнее соединение
SELECT е.last_name, е.department_id, d.department name
FROM employees e
RIGHT OUTER JOIN departments d *
ON (e.department_id = d.department_id);
[Whalen
Hartstein
Fay
Mourgos
Rajs
Danes
Malos
;Gieiz
PEPAIUMtNi NAME
10 Administration
20 (Marketing
20 Mai к eting
50 [Shipping
50 (Shipping
50 [Shipping
50 (Shipping
110 Ac tv- ..u
Conha»: tinq
20 rows selected
4-33 Copyright © Oracle Corporation, 2001. All rights reserved.
Пример правого внешнего соединения
В лом запросе возвращаю!си все строки таблицы DEPARTMENTS, даже если они нс соответствуют
строкам таблицы EMPLOYEES, так как таблица DEPARTMENTS является правой таблицей во
внешнем соединении.
В предыдущих версиях запрос записывался в следующем виде :
SELECT e.last_name, е.department_id, d.department_name
FROM employees e, departments d
WHERE d.department_id = e.departmenl_id ( + );
Introduction to OracleS/.- SQL 4-33
Полное внешнее соединение
SELECT e.last name, е.department id, d.department name
FROM employees e
FULL OUTER JOIN departments d
ON (e.department_id = d.department_id);
Rft PHAS'D HAM* 'W®^Sg^g'UtPARIMHf 'W?' DLP/WMlbil JiftML
Abel ( 60 iSales
..............................-............................ r —..................................................... i
a/ies........................................................................................................................I 50 ^Shipping
fee Haan [ Э0 Executive
[Ernst I GO IT
Fay [ 20 kriarl-pting
|Gietz 11O Accounting
I jrant I
Hartstein j 20 ^Marketing
80
Conti acting
21 lows selected
ORACLC
4-34
Copyright © Oracle Corporation, 2001. All rights reserved
Пример полного внешнего соединения
В этом запросе возвращаются все строки таблицы DEPARTMENTS, даже если они не
соответствуют строкам таблицы EMPLOYEES В нем 1акжс выбираются все строки таблицы
DEPARTMENTS, даже если они нс соответствую! строкам таблицы EMPLOYEES.
Introduction to Oracle9/.- SQL 4-34
Дополнительные условия
SELECT е.employee_id, е.1ast_name, е.department_id,
d.department_id, d.location_id
FROM employees e JOIN departments d
ON (e. depar tment_id = d. department__id)
AND- e.manager id = 149;
POYFF.IO ’ l AST^NAMF ' Of.PATI TMFNTID J flFPARTMFNTJO lOCATlOHjO
174 Abel ' 80 | U0 2500
176 Taylor f 80 «I 2500
Применение дополнительных условий
Вы можете указать дополнительные условия с помощью оператора AND. В приведенном примере
выполняется соединение таблиц EMPLOYEES и DEPARTMENTS и выводятся только сотрудники,
номер менеджера которых 149.
Introduction to Oracle9/.- SQL 4-35
Итоги
• Синтаксис соединений, который был
разработан Oracle для версий 8/ и более ранних
версий
• Применение стандартного синтаксиса SQL99 в
версии 9/
ORACLe
4-36 Copyright © Oracle Corporation. 2001. All rights reserved.
Итоги
Соединение таблиц может быть установлено многими путями.
Виды соединений
• Эквисоединения
• Нсоквисосдннения
• Внешние соединения
• Соединение таблицы с собой
• Перекрестные соединения
• Натуральные соединения
• Полные или внешние соединения
Декартово произведение
Декартово произведение включает все комбинации строк нескольких таблиц. Оно может быть
получено, если опушено предложение WHERE или задано предложение CROSS JOIN.
Псевдонимы таблиц
• Повышают CKopoeib доступа к информации базы данных.
• Позволяют более сжато храпни, код команды SQL в памяти.
Introduction to Oracle9/.- SQL 4-36
4
Обзор практического занятия 4, часть 2
* Соединение таблиц с использованием
эквисоединения
• Выполнение внешних соединений и соединений
таблицы с собой
• Включение дополнительных условий
4-37 Copyright © Oracle Corporation, 2001. All rights reserved.
Обзор практического занятия 4, часть 2
Это практическое занятие прививает навыки выборки данных из более, чем одной таблицы.
Попробуйте использовать синтаксис, разработанный Oracle, и гибкий синтаксис стандарта SQL:
1999.
Выполните задания с 5 по 8, используя синтаксис соединения стандарта ANSI.
Выполните задания с 9 по II, используя как синтаксис, разработанный Oracle, так и синтаксис
стандарта ANSI.
Introduction to Oracle9/.- SQL 4-37
Практическое занятие 4, часть 1
I. Напишиге запрос для вывода фамилии, номера отдела и названия отдела для всех
служащих.
LAST-NAME j DEPARTMENT ID | DEPARTMENT-NAME
Whalen [ 10 {Administration
Hartstein •; 20 [Marketing
Fay { 20 Marketing
Mourgos 50 [Shipping
Davies i 50 Shipping
..ggms
[Gietz
110
a*
110 Accountinc
19 rows selected.
2. Выведите список всех должностей в оi деле 80 (должности в списке не должны
повторяться) и местоположений отдела.
SA_REP
Ci (Ji
3. Напишите запрос для вывода фамилии, названия отдела, идентификатора
местоположения отдела и города, в котором он находи гея, для всех служащих,
зарабатывающих комиссионные.
LAST_NAME
Zlotkey
Abel
DEPARTMENT NAME
Sales
LOCATION ID
CITY
2500
Oxford
Introduction to Oracle9/. SQL 4-38
Практическое занятие 4, часть 1 (продолжение)
Выведите фамилии служащих, содержащие букву *‘и” (в строчном регистре), с названиями
отделов. Сохраните свою команду SQL в файле 1аЬ4_4 . sql.
' LAST NAME
Whalen
DEPARTMENT NAME
Administration
Hartstein ’Marketing
Fay [Marketing
[Rajs [Shipping
10 rows selected.
Introduction to Oracle97.* SQL 4-39
Практическое занятие 4, часть 2
5. Напишите запрос для вывода фамилии, должности, номера отдела и названия огдела всех
служащих, работающих в городе Toronto.
LAST NAME
—»
Hartstein
JOBJD | OEPARTMENTJD [ DEPARTMENT^NAME
MK.MAN
МК REP
6. Выведите фамилии и номера служащих вместе с фамилиями и номерами их менеджеров.
Назовите столбцы Employee, Emp#, Manager и Mgr#. Сохраните свою команду SQL в
файле 1аЬ4_6. sql.
19 rows selected.
Introduction to Oracle9/.- SQL 4-40
Практическое занятие 4, часть 2 (продолжение)
Измените файл 1аЬ4_6. sql так, чтобы получить фамилии всех служащих, включая Киша,
который не имеет менеджера. Упорядочьте результат по возрастанию номера служащею.
Сохраните измененный запрос в ickciobom файле 1аЬ4 7 . sql. Выполните запрос.
• >
Higgins 205 jKochhat
В В В*.- в.. » — * • •— В»—В» В. ^ВМВВ... ВА-... • >•»• в • » • • *4-• « а в -• в . —^В- В В В -
;Gietz । 206 (Higgins
101
205"
20 rows selected.
Если осталось время, сделайте следующие упражнения.
8. Создайте запрос для вывода номера отдела, фамилии служащею и фамилии всех служащих,
работающих в одном отделе с данным служащим. Дайте столбцам соответствующие имена.
DEPARTMENT i EMPLOYEE
I
20 iFay
20 jHartstein
-ачччввч- в а IB в*в —— -~г* — I ~.~Г Г~ в К» -чЛ-* ,*• • •К»**'
50 -Davies
50 ’Davies
<
50 ^Davies
50 jDavies
50 'Matos
t
50 jMat os
50 'Malos
50 iMatos
50 iMouraos
COLLEAGUE
Hartstein
Davies
jMourgos
IRajs
IDavies
110 Gietz . Higgins
110 Higgins .Gietz
42 rows selected
Introduction to Oracle9f.* SQL 4-41
Практическое занятие 4, часть 2 (продолжение)
9. Покажите структуру таблицы JOB GRADES. Со mail те запрос для вывода фамилии,
должности, названия отдела, оклада и категории (GRADE_LEVEL) всех служащих.
Т““ *****.••*.- - - —1- -Л- «Л» ЛЖ-М Г>Ж-« >aAV...f4Mv *UWM* Ж.- W .
- Name -... . g| Null? ' 'Гуре
jGRADE_LEVEL [ (VARCHAR2(3)
*LOWEST_SAL ’ |~.... iNUMBER
highest_sal {number
__ __ MA’A^A.V ••^.ЧАЧАА^МД' <Aчм»^ Л.М А»ЛМ -V WA 4~ .. - .«. ’ V W * KAM
4AST_NAME I JOBJD I DEPARTMENTNAME
(Matos ST_CLERK (Shipping
J**' -*-—***-* • -*• -*-*• • ГЛ*ГГЛ^-.-»и.П-. p. , > .жч.ж»—.. Ч-Л ,^»3 . .a—
jVatgas ST_CLERK (Shipping
|Lorentz |IT_PROG flT
*** ча*1’Ч • •••«• a«v »•*«»« *•••*••• a “•••• «fcaaaaaaa - >»•»->«*«>• a • • ar« •«*««« w «•«••*•*« |14« - eaaa «-••••••> Baa «««• « a »«aa «a a *••»••«•••«• - - aaaaaa a a a • »*««* .a.aaaaa---
Mourgos |ST_MAN {Shipping
jRajs ST_ CLERK Shipping
Davies ST_CLERK Shipping
Whalen AD_ASST lAdministration
salary"”
2600
2500
4200
5800
3500
3100
4400
[ GRA
• 4 41 11 *Ч«*ч** **• -4 IS»-* а а а «Л« О a « - • «• • ж» «> «в « • -.«а« в«| й*« ./ч л • - Х“ • - • «а
De Haan AD_VP Executive
19 tows selected
Если вы хогигс усложнил» задачу, выполнило следующие упражнения.
17000 JE
I0. Создайте запрос для вывода фамилий и да< найма всех служащих, нанятых после Davies.
LAST NAME | HIRE_DATE
' ° *Л*‘ in 11 «4^ Wl* • * м .. ЧАМ «.мм * ч .al w« ^*B*«k*T* Bl»aa^a\ -_г л.-^_~ц-r_u ~-~~i~ ~ * г~ —-~ *e ° • •• - a t- 4- > »_r ~ьг - т,- t- - - - - a~n lax'frl
Lorentz 07-FEB99
Mourgos 16-NOV-99
Matos
15-MAR-98
8 tows selected
Introduction to Oracle9/.- SQL 4-42
<
Практическое занятие 4, часть 2 (продолжение)
11. По всем служащим, нанятым раньше своих менеджеров, выведите фамилии и дагы найма
самих служащих, а также фамилии и даты найма их менеджеров. Назовите столбцы
Employee, Emp Hired, Manager и Mgr Hired.
[' Employee VT Emp Hirer) j Manager YY Mgr Hired
[Whalen I7-SEP-87 Kochhar 21^SEP-89
Hunold j 03-JAN-90 De Haan 13-JAN-93
Rajs 17-OCT-95 Mourgos 16-NOV-99
Davies 29-JAN-97 Mourgos 16-NOV-99
[Matos 15-MAR-98 Mourgos 16-NOV-99 !
Vargas j 09-JUL-98 Mourgos 16-NOV-99
[Abel 11-MAY-96 Hotkey 29-JAN-00
Taylor 24-MAR-98 Zlotkey 29-JAN 00
| Grant 24-MAY-99 Zlotkey 29-JAN-OO
9 rows selected
Introduction to Oracle9/: SQL 4-43
Introduction to Oracle9/.- SQL 4-44
Агрегирование данных с помощью
групповых функций
ORACLGT
Copyright © Oracle Corporation, 2001. All rights reserved.
Рассматриваемые вопросы
• Общие сведения об имеющихся групповых
функциях
• Использование групповых функций
• Вывод данных по группам с помощью
предложения group by
• Включение и исключение групп с помощью
предложения having
6-2 Copyright © Oracle Corporation, 2001 All rights reserved
Цели урока
Эю еще один урок, посвященный функциям Основное внимание сосредоточено на функциях для
получения сводной информации по группам счрок. Обсуждаются мсюды группировки строк
таблицы и гадания кри териев поиска для групп строк.
Introduction to Oracle9/: SQL 5-2
Что такое групповые функции?
Групповые функции работают с множеством строк
и возвращают один результат на группу
EMPLOYEES
Г OEPARTMf NT_lO ' ~ Г" SALARY
. .. — .. х-.-г
90 1 24000
;................ | .....
90 | 17000
17000
9000
Г;
60
!
%
j
*
$
I
6000 ‘
5800 |
3500
3100
2600
2500
максимальный
оклад в
таблице
EMPLOYEES.
j.
MAX(SAIARY)
24000
110
110 I
jOOL
12000
8 JOO
I
i
' I
5
I
20 rows selected
ORACLe
Copyright © Oracle Corporation, 2001. All rights reserved.
Групповые функции
В отличие от однострочных функций групповые функции обрабатывают множества
строк для получения единого результата по 1 руине. Таким множеством строк может
быть целая таблица или таблица, разбитая на группы.
Introduction to OracieSZ: SQL 5-3
Типы групповых функций
• AVG
• COUNT
• МАХ
• MIN
• STDDEV
• SUM
• VARIANCE
Типы групповых функций
Каждая функция принимает аргумент. В следующей таблице показаны варианты синтаксиса:
Функция Описание
AVG i (I DISTINCT! ALL] Л J Среднее значение л без учета неопределенных
COUNT({*|[DISTINCT|ALL] выражение}) Количество строк, где результатом вычисления выражения является любое определенное значение. Если используется “*”, подсчитываются все выбранные строки, включая дубликаты и строки с неопределенными значениями.
MAX([DISTINCT | ALL] выражение) Максимальное значение выражения без учета неопределенных значений
MIN([DISTINCT|ALL] выражение) Минимальное значение выражения без учета неопределенных значений
STDDEV([DISTINCT |ALL]Л) Стандартное отклонение значений л без учета неопределенных значений
SUM ( 1 ^DISTINCT |ALL]Л) Суммирование значений л без учета неопределенных значений
VARIANCE ([DISTINCT|ALL]Л) Дисперсия значений л без учета неопределенных значений
Introduction to Oracle9Z: SQL 5-4
Синтаксис групповых функций
SELECT [столбец,] грулп_функция(столбец)
FROM таблица
[WHERE условие]
[GROUP BY столбец]
[ORDER BY столбец];
ORACLe
6-6
Copyright © Oracle Corporation. 2001. All rights reserved.
Указания по использованию групповых функций
• Если используется слово DISTINCT, дубликаты при вычислениях функции не учитываются.
Если используется слово ALL, рассматриваются все значения, включая дубликаты. Слово ALL
указывать не обязательно, т.к. оно используется по умолчанию.
• Допустимые типы данных для аргумента: CHAR, VARCHAR2, NUMBER или DATE, если задано
выражение.
• Все групповые функции, кроме COUNT (* *), игнорируют неопределенные значения. Для
замены неопределенных значений определенными используются функции NVL, NVL2 и
COALESCE.
Сервер Oracle неявно сортирует данные в порядке возрастания, если используется
предложение GROUP BY. Для того, чтобы изменить порядок сортировки, можно использовать
опцию DESC после ORDER BY.
Introduction to Oracle97: SQL 5-5
Б-G
Использование функций avg и sum
Функции avg и sum применяются к столбцам с
числовыми данными______________
SELECT AVG(Salary), MAX(salary),
MIN (salary);, SUM(salary)
FROM employees
WHERE job id LIKE '%REP%’;
„ AVG(SAl.ARy).:/ ;p>^MAX(SAI.ARr,.^-f.
Biso fe........ Tipoo
MlNfSAl WQ
6000 5
• ЧА Ч1,, ?.-x- -*** 4 5 5- ъ .4, , •’>
SHMfSfll ARY)
32600
ORACLG
Copyright © Oracle Corporation, 2001. All rights reserved.
Групповые функции
Функции AVG, SUM, MIN и MAX применяются к столбцам, в которых можно хранить цифровые
данные. В примере на слайде вычисляются средний, самый высокий, самый низкий оклад и сумма
окладов всех торговых представителей.
Introduction to Oracle9z: SQL 5-6
Использование функций min и мах
Функции мах и min применяются к данным
любого типа__________________________________________
SELECT MIN(hire__date) , MAX(hire_date)j
FROM employees; I
I9S ma* * ЙЛЖййх й> ' 1
J7-JUN-87' &>JAN-00 ’ |
• * 1 УЛЛ -»Л*.‘.ЧЛЛ\М.М,’А7Л,МЛ.- . .«Z.« • /лл. A<,V •.AS'. **. • A« A AS %AA.’-% .* . . SA’ -w 'Za. ••*.4
ORACLE'
6-7 Copyright Ф Oracle Corporation. 2001. All rights reserved.
Функции Min и Max
Функции MIN и MAX применяются к данным любо! о i ина. 11ример показывает поиск даты приема
служащего, который работает дольше всех, и даты приема служащего, принятого самым последним.
В следующем примере выводятся первый и последний служащие в алфавитном списке служащих.
SELECT MIN(last_name), MAX(last_name)
FROM employees;
ЛГ aazn^*». Aa -^Л^Л .ЛЛАУ/ЛЛ»» W4VA ЛА.-АЛЛ .ДЛЛЛЛЛ. Z.VAV? ЛЛ S АГ АГ ЛЛ» 'ЛА*лЛ/ЛЛАгЛА^/'«.-«/«A WlAV <Ч< «А*А*Л«ЛЛ ААЛЛ. Л AVA/ЛЛ. ZZZ ЛЛЛЛЛ^ЛлАЛ»/»'АлЛ**алЛ< АЛ/ЛЛЛа<а/ЛЛ/'ЛЛЛАМ/ V". ^ЛЛЛА-’ЛЛЛ -у «г V *«АЛЛА, r Zyt ...ЛЛЛЛ АУ /ЛЛЛЛ AS""* - *»ЛЛЛА АЛЛАЛА S ЛАЛ1 «ЛЛ»'*» WS Лг ЛЛ.» A
-X MAX(LAST_NAME)
[Abel [Hotkey
• •««*«•«»•••••«.«••«**•••»»».*«»•a »« •••••*«>•••«*•*•••.aaa a.«•>««••«•« о >•a ••a a•a.> aa.•«а.••••ааааа«аа* аааа.ааа.шаааа-вааааа^.ааеаааааааааваааа — аа a.a< aa• >a.vaaa>aaaa a a lataa-t (aaaa-aaaaeaaaaaaAaee a* о aa a*aa aaa-aa«a«-
Примечание
Функции AVG, SUM, VARIANCE и STDDEV применимы только к цифровым данным.
Introduction to Oracle97: SQL 5-7
Использование функции count
count (*) возвращает количество строк в таблице
SELECT COUNT(*)
FROM employees
WHERE department id = 50;
COUHTp
Copyright © Oracle Corporation, 2001. All rights reserved
Функция COUNT
Имеется три формата функции COUNT:
• COUNT(*)
• COUNT(выражение)
• COUNT(DISTINCT выражение)
COUNT (* ) возвращает количество строк в таблице, которые удовлетворяю! ограничениям,
заданным в команде SELECT. При этом учитываются и строки-дубликаты и строки с
неопределенными значениями. Если команда SELECT включас! предложение WHERE, COUNT (* )
возвращает количество строк, удовлетворяющее условию в предложении WHERE
Напротив COUNT (выражение) возвращает количество сирой с определенными (качениями,
заданными выражением.
COUNT (DISTINCT выражение) возвращает количест во у никальных, определенных значений в
столбце, заданном выражением. .
В примере на слайде подсчитывается количество служащих в огде ic 50.
Introduction to Oracle9/: SQL 5-8
Использование функции count
• COUNT (выражение) возвращает количество строк
с определенными значениями (не null) для
выражения
• Вывод количества сотрудников отдела 80,
получающих комиссионные, из таблицы
EMPLOYEES
SELECT COUNT (conuni ss ion__pct) I
FROM employees I
WHERE department id =80; I
(tHIM I (COMMISSION 14 I)
Copyright © Oracle Corporation, 2001. All rights reserved.
Использование функции count
На слайде вычисляется количество служащих отдела 80, которые могут получать комиссионные.
Пример
Вывод количества строк таблицы EMPLOYEES, в которых определено значение столбца
depar tment_id.
SELECT COUNT(department_id)
FROM employees;
GO U NT(DEP ARTMEN1J 0)
Introduction to Oracle9r SQL 5-9
Использование ключевого слова
DISTINCT
• COUNT(DISTINCT выражение) возвращает
количество уникальных определенных
значений выражения
• Вывод количества уникальных номеров
отделов из таблицы employees
SELECT COUNT(DISTINCT department_id)
FROM employees;
COUN1(IMS I INC IULPAHI MLN I ID)
7
ORACL.G?
6-10 Copyright © Oracle Corporation, 2001 All rights reserved.
Использование ключевого слова distinct
Для того, чтобы не учитывать при подсчете дублирующие значения столбца, применясюя ключевое
слово DISTINCT.
В примере на слайде подсчитывается количество отделов на основе таблицы EMPLOYEES.
Introduction to Огас1е9/: SQL 5-10
4
Групповые функции и неопределенные
значения
Групповые функции игнорируют
неопределенные значения в столбцах
SELECT AVG(commission;pct)
FROM employees;
Copyright © Oracle Corporation, 2001. All rights reserved.
Групповые функции и неопределенные значения
Все групповые функции, кроме COUNT (*), игнорируют неопределенные значения в
столбце. В примере на слайде среднее вычисляется только но строкам, где столбец
COMMISSION_PCT содержит действительное значение. Среднее вычисляется как
частное от деления общей суммы комиссионных, выплаченных всем служащим, на
количество служащих, получающих комиссионные.
Introduction to OracleS/: SQL 5-11
/
Использование функции nvl с
групповыми функциями
Функция NVL заставляет групповые функции
включать неопределенные значения
5-12 Copyright © Oracle Corporation, 2001. All rights reserved.
Использование функции nvl с групповыми функциями
Функция NVL заставляет групповые функции включать неопределенные значения. В
примере на слайде среднее вычисляется по всем строкам, включая сi роки с
неопределенным значением в столбце COMMISSION_PCT . Среднее в этом случае- но
частое от деления общей суммы комиссионных, выплаченных служащим, на общее
количество служащих в компании.
Introduction to Oracle9/: SQL 5-12
Создание групп данных
EMPLOYEES
TBv».
20 iows selected
830b
7000
6000
42OO~
® йШИЙМЙвН ж.
10 I 4400 j 4400
13UUU1 __.Л_
---- 9600
I **’ z< x л 3^°°. Cnnnuuui
I 3I001 ЗБ00 “ “
« оклад
в таблице
I EMPLOYEES ПО
6400 каждому
отделу
AVG (SALAHY)
o*r*cw* tw-4-etx . .v? .A
I 10 4400 I
s 20 9600 I
3600 i
- - • •?
6411.1
DEPARTMENT ID
8 rows selected
ORACLE
5
Б-13
Copyright © Oracle Corporation. 2001. All rights reserved.
Создание групп данных
До сих пор вес групповые функции обрабатывали таблицу как одну большую группу
информации. Но иногда требуется разделить таблицу на более мелкие группы. Сдсла1ь
это можно с помощью предложения GROUP BY.
Introduction to Oracle9/: SQL 5-13
Создание групп данных:
предложение group by
SELECT [столбец,] групп_функцил (столбец), ...
FROM таблица
[WHERE условие]
[GROUP BY > вь1ражение_группировки]
[ORDER BY столбец];
Предложение group by разбивает строки таблицы на
группы
ORACL.G'
Copyright © Oracle Corporation, 2001. All rights reserved
Предложение group by
С помощью предложения GROUP BY можно разделить cipoKii таблицы на i руины. Затем можно
использовать групповые функции для получения сводной информации по каждой группе.
Синтаксис:
выражение_групниро1зки задает столбцы, на основе значении которых группируются
строки.
Указания
• Если групповая функция задана в предложении SELECT, получить одновременно
индивидуальный результат можно только в случае, если отдельный столбец указан в
предложении GROUP BY Если список столбцов отсутствует, выдастся сообщение об ошибке.
• Предложение WHERE позволяет исключать сiроки до их группирования.
• Список столбцов в предложении GROUP BY обязателен.
• Использование псевдонимов столбцов с предложении GROUP BY недопустимо.
• Но умолчанию строки сортируются в порядке возрастания значений сю тбцов, заданных в
предложении GROUP BY . Изменить этот порядок можно с помощью предложения ORDER
BY.
Introduction to Oracle9/: SQL 5-14
Использование предложения group by
Все столбцы, которые входят в список select и к
которым не применяются групповые функции,
должны быть указаны в предложении group by.
OPACLG
6-15 Copyright © Oracle Corporation, 2001. All rights reserved.
Использование предложения group by
Если используется предложение GROUP BY, все столбцы из списка SELECT, к
которым не применяются групповые функции, должны быть включены в предложение
GROUP BY. В примере на слайде выдаются номера отделов и средний оклад по
каждому отделу. Команда SELECT с предложением GROUP BY делает следующее.
• Предложение SELECT задаст выбираемые столбцы:
- столбец номеров отделов из таблицы EMPLOYEES ;
- среднее всех окладов в группе, заданной с помощью предложения GROUP
BY.
* Предложение FROM задает таблицы, к которым должна обратиться база данных (в
данном случае таблицу EMPLOYEES).
Предложение WHERE задает критерии отбора строк. Т.к. предложение WHERE
отсутствует, по умолчанию выбираются все строки.
Предложение GROUP BY указывает, как должны быть сгруппированы строки.
Строки группируются по отделам, чтобы функция AVG, применяемая к столбцу
окладов, вычислила средний оклад по каждому отделу.
Introduction to Oracle9/: SQL 5-15
Использование предложения group by
Столбец, указанный в group by, может
отсутствовать в списке select.
SELECT AVG(salary)
FROM employees
GROUP BY department._id;
•.? * • . - ’ t ' *&VG(SAIAHY)
44HIJ
9500
f 3600
0400
f...................................................................... 10033 3333
1'133? 3333
i 16150
i 70011
8 rows seleclPd
ORACLje
5-16 Copyright © Oracle Corporation. 2001. All rights reserved.
Использование предложения group by (продолжение)
Столбец, заданный в предложении GROUP BY, можег отсутствовать в предложении SELECT. В
примере на слайде средние оклады по отделам выводятся без соответствующих номеров отделов.
Но без номеров отделов результат трудно понять.
Можно использовать групповую функцию в предложении ORDER BY.
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id
ORDER BY AVG(salary);
AVG (SALARY)
‘Cv*^******«^<r *»***'* * ч ** «4<-*‘****“A*-*'‘****.,“ ***«-.
' ' DEPARTMENT ID
4*»
t
i
।
t
t
:
Ё
i
8 rows selected
Introduction to Oracle9/: SQL 5-16
Группировка по нескольким столбцам
EMPLOYEES
g DLPARTMEHTJO
Г'3" —4400 и
Jw MAN
z-x- j 20 1MKREP 6000 ifЙ'ГV£-< 3500> , ^£Р^ТМЕКТ4й L 10 б JOBJO р 1 йв'Ич--y^4*XN<.,v -.*лил Ж- №W !AD_ASST | SUM(SALAMY) •'Х’Сч .XV. V-V.-A 4400 |
? 50 |ST_CLERK . w- i 3100 ... 1 20 ;MK_MAN ] 13000^
1 5 5 50 fet_CLERK 50 ^sfCLERK J ———— 2600 > § 25oo Просуммировать 5800 J оклады в Q00Q таблице 6000 : EMPLOYEES 4200 Йй® no каждой 10500 »1 . должности внутри каждого 11ВШ'отдела . ;• ' -л- -г • 50 ]Mk_REP | 1ST CLERK 6000
1 i । 1 i i 50 jsTwAN 60 ;iFprog bO IT PROG 60 :|T_PROG 80 ;SA_MAN 1 J 50 Г бо • сю 80 90 jST_M.AN | IT PROG ~ | |SA_ MAN | SA_REP | AD PRES | 5800 И200 10500 19600 24000
ь 80 SA REP 90 Г 110 110 AD_VP AC,ACCOUNT! fAC_MGR 34000 8300 12000
;SA_REP 7000 j
lid
AC MGR
ISA REP
1200l
7000
13 rows selected
20 rows selected
Вложенные группы
Иногда требуются результаты по группам внутри групп. Отчет на слайде показывает общую сумму
заработной плазы, выплаченной ио каждой должности в каждом отделе.
Сзроки таблицы EMPLOYEES сначала группируются по номерам отделов, а затем внутри этих
групп - по должностям. Например, объединяются в группу чезырс клерка (ST_CLERK) из отдела 50
и для них выдается единый результат: общая сумма окладов для всех клерков отдела.
Introduction to Oracle9r: SQL 5-17
Использование предложения group by
с несколькими столбцами
кйЖ’^осят :XX jog »o
|................ 10 AD ASST
| 20 MK MAN
j 20 jMK_REP
| 50 IST CLERK
[ “ .... 5Q ’STjtlAN
| CO IT PROG
| 80 ;SA_MAN
| 80 SA REP ...........
[..................Q0 AD_PRES...........
SELECT department_id dept_id, job__id, SUM (salary) I
FROM employees I
GROUP BY departmentjLd, job_id; I
SUM (SALARY)
4400 !
13000
6000
11700
WO
19200
10500 i
1%00 •
24000
SA Rtr
13 tows selected
ORACLe
5-18 Copyright © Oracle Corporation, 2001. All rights reserved.
Использование предложения group by с несколькими столбцами
Чтобы получить результаты по группам и подгруппам, следует указать несколько столбцов в
предложении GROUP BY. Последовательностью столбцов в предложении GROUP BY можно
задать порядок сортировки строк по умолчанию. Команда SELECT на слайде, содержащая
предложение GROUP BY, делает следующее.
• Предложение SELECT задаст выбираемые столбцы:
- номера отделов из таблицы EMPLOYEES ;
- должности из таблицы EMPLOYEES ;
— сумму всех окладов в группе, заданной с помощью предложения GROUP BY .
• Предложение FROM задает таблицы, к которым должна обратиться база данных: в данном
случае - EMPLOYEES.
• Предложение GROUP BY указывает, как должны быть сгруппированы строки:
- сначала по номерам отделов;
- затем по должностям внутри отделов.
Таким образом функция SUM применяется к столбцу окладов по каждой должности внутри
каждо! о отдела.
Introduction to Oracle97: SQL 5-18
Недействительные запросы с
групповыми функциями
Все столбцы и выражения из списка select, не
являющиеся групповой функцией, должны быть
включены в предложение group by.
SELECT department__id, COUNT(last_name)
FROM employees;
„ недоо«” CT»n6U
SELECT department_id, COUNT(last_name)
ERROR at line 1:
ORA-00937: not a single-group group function
ORACL.Cs
Copyright © Oracle Corporation, 2001. All rights reserved.
Недействительные запросы с групповыми функциями
Если в одной и той же команде SELECT указываются отдельные элементы (DEPARTMENT_ID) и
ipynnoBbie функций (COUNT), предложение GROUP BY со списком отдельных элементов
обязательно. Если предложение GROUP BY отсутствует, выдается сообщение об ошибке not а
single-group group function (“групповая функция для более, чем одной группы"), и
столбец, вызвавший ошибку, помечается звездочкой (*). Для устранения ошибки добавьте
предложение GROUP BY.
SELECT department_id, count(last_name)
FROM employees
10 | 1
..........................20 | ................... 2
b rows selected.
Любой столбец или выражение из списка SELECT, к которым нс применяется групповая функция,
обязательно указывается в предложении GROUP BY.
Introduction to Oracle9/: SQL 5-19
Недействительные запросы с
групповыми функциями
• Предложение where для исключения групп не
используется
• Для исключения некоторых групп следует
пользоваться предложением having
• Нельзя использовать групповые функции в
предложении where
Недействительные запросы с групповыми функциями (продолжение)
Предложения WHERE для исключения групп не используется. Вышеуказанная команда SELECT
вызовет ошибку, т.к. для вывода средних окладов только гсх отделов, где средний оклад
превышает 8000 долларов, используется предложение WHERE.
Для исключения групп следует использовать предложение HAVING
SELECT department_id, AVG(salary)
FROM
HAVING
GROUP BY department_id;
employees
AVG(salary) > 8000
•s DEPARTMENT ID
AVG (SALARY)
20
9500
10150
Introduction to Oracled/': SQL 5-20
Исключение групп
EMPLOYEES
DEPARTMENT ID
SALARY
ю ! 4400 13000
20 1 6000
60 1 5800
• о о e _«
60 1 3500
50 j 3100
50 1 2500 1
60 1' '2600 <
60 1 9000
60 | 6000
60 1 4203
eo | 10500
АП АРЛП
максимальный
оклад
; в отделе Ц
превышает
$10000
Н DEPARTMENT JO i MAX (SAT ARY) ч
20 j 13000
НО f I НН]
f............... 90 f ' ' 24000
1AJOO
110 I
3301
7000
20 roivs selected
Исключение групповых результатов
Подобно тому, как предложение WHERE используема для исключения строк, предложение HAVING
используется для исключения групп. Чтобы выяснить максимальный оклад по каждому отделу, но
вывести результат только по тем отделам, где он превышает 10000 долларов, необходимо сделать
следующее:
1. Найти максимальный оклад по каждому отделу путем группировки строк по номерам
отделов.
2. Исключить из отчета тс труппы, где максимальный оклад нс превышает 10000 долларов.
Introduction to OracleSr: SQL 5-21
Исключение групп: предложение
HAVING
Для исключения групп пользуйтесь предложением
HAVING.
1. Строки группируются.
2. Применяется групповая функция.
3. Выводятся группы, удовлетворяющие условию в
предложении HAVING.
SELECT [столбец,] групп_функция (столбец), ...
FROM таблица
[WHERE условие]
[GROUP BY выражение_группировки]
[HAVING ограничивающее_условие]
[ORDER BY столбец];
OF?ACL
Б-22 Copyright © Oracle Corporation, 2001. AH rights reserved.
Предложение having
С помощью предложения H AVI NG из выходных данных исключаются некоторые группы. Таким
образом исключение групп производится по агрегированной информации.
Синтаксис:
ограничивающсе_условие вывод ограничивается группами прок, удовлетворяющими
заданному условию
Сервер Oracle обрабатывает предложение HAVING следующим образом.
1. Строки группируются.
2. К группе применяется групповая функция.
3. Выводятся группы, удовлетворяющие критериям в предложении HAVING.
Предложение HAVING может предшествовать предложению GROUP BY, но jioi ичнсс сделать
предложение GROUP BY первым. Образование групп и вычисление групповых функций
происходят до того, как к группам из списка SELECT применяется предложение HAVING.
Introduction to Oracle9/: SQL 5-22
Использование предложения having
****g?*<**.^ *** **• - «ГУ.-г •-***-\. -.•> ^ './V -V г- <• А,'"*‘
' DEPARTMEHTJt) . MAX (SALARY
Г Л) ------ 13000
- 11000
90 ’ 24000
I 110 12000
OQACLC
5-23 Copyright © Oracle Corporation, 2001 All rights reserved.
Использование предложения having
В примере на слайде выводятся номера отделов и максимальный оклад только тех отделов, i де он
превышает 10000 долларов.
Предложение GROUP BY можно используется без групповой функции в списке SELECT.
Для исключения с<рок после применения групповой функции требуются предложения GROUP BY и
HAVING.
В следующем примере производится вывод номеров и среднего оклада тех отделов, i де
максимальный оклад превышает 10000 долларов :
SELECT
FROM
GROUP BY
HAVING
department_id, AVG(salary)
employees
department_id
max(salary)>10000;
DEPARTMENT ID
AVG(SALARY)
9500
10033.3333
19333~3333~
110 I ..................10150
1
Introduction to Oracle9Z: SQL 5-23
Copyright © Oracle Corporation, 2001. All rights reserved.
5-24
OF5ACU
Использование предложения having (продолжение)
Пример на слайде показывает вывод должностей и общей суммы окладов за месяц но каждой
должности, если эта общая сумма превышает 13000 долларов. Из выходных данных исключаются
данные о торговых представителях. Список сортируется по возрастанию общей суммы окладов.
Introduction to Oracle9/: SQL 5-24
Вложенные групповые функции
Вывод максимального среднего оклада.
SELECT MAX (AVG (salary) )
FROM employees
GROUP BY department id;
” • •; • • •. - • - ; ~max^g(5a'lary)) - - .
19333 3333
ORACLE-’
5-25 Copyright © Oracle Corporation, 2001 Al! rights reserved
Вложенные групповые функции
Групповые функции могут иметь, например, два уровня вложенности. В примере на слайде
вычисляется максимальный средний оклад.
Introduction to Oracle9/: SQL 5-25
Итоги
Использование групповых функций count, max,
MIN, AVG.
Запросы, использующие предложение group by.
Запросы, использующие предложение having.
6-26
SELECT
FROM
[WHERE
[GROUP BY
[HAVING
[ORDER BY
[ столбец, ] групп_функция (столбец)
та блица
условие]
выражение_группировки]
у с л овие__группир ов ки ]
столбец];
of?Aci_e
Copyright О Oracle Corporation. 2001. All rights reserved
Итоги
В SQL имеется семь групповых функций:
• AVG
• COUNT
• МАХ
• MIN
• SUM
• STDDEV
• VARIANCE.
Предложение GROUP BY позволяет создавать подгруппы. Исключать группы можно с помощью
предложения HAVING.
В команде предложения HAVING и GROUP BY должны следовать з т предложением WHERE.
Предложение ORDER BY должно быть последним.
Сервер Oracle обрабатывает предложения в следующем порядке
I. Если имеется предложение WHERE, сервер выявляет строки-кандидаты.
2. Сервер выявляет труппы, заданные предложением GROUP BY.
3. Предложение HAVING исключает из выходных данных труппы, не удовлетворяющие сю
критериям.
Introduction to Oracle9/: SQL 5-26
<
Обзор практического занятия 5
Эю занятие прививает навыки использования групповых функций и выборки групп данных.
Упражнения на бумаге
В вопросах 1-3 обведите ответ “Да“ или “Пст“.
Примечание
В запросах используются псевдонимы столбцов.
Introduction to Огас1е9т: SQL 5-27
Практическое занятие 5
Определите правильность следующих грех уiверждений. Обведите oibci или “I 1сГ
1. I ругшовые функции применяются к большом) количеству строк для получения одною
результата.
Да/1!ст
2. При вычислении групповых функций включаются неопределенные значения.
Да/! 1с г
3. Предложение WHERE ограничивает количест во выбираемых с<рок до того, как они
обрабатываются групповыми функциями.
Да/Нст
4. Напишите запрос для вывода самого высокого, самого ниткою и среднего оклада по всем
служащим, а также суммы всех окладов. Назовите столбцы Maximum, Minimum, Average и
Sum. Округлите суммы до ближайшею целого значения. Сохраните свой запрос в текстовом
файле 1аЬ5_6. sql.
I Maximum [ Minimum | Sum = Average
24000 [ 2500 | 175500 j 8775
А*оЧМ** * iRMW ***** ******* • • «ч**»*ы-4»»>*«м*а**лп****°о* «—«> М<<**«*«1**М**> >*<«•••« а ал яш.ае,- * -.и « в u*<.li • а а а. а а »а о .. . а. я ааа < а . и ж •_ж.___
5. Измените запрос в 1аЬ5_4 . sql так, чтобы получить самый низкий, самый высокий и средний
оклады, а также сумму окладов отдельно по каждой должности. Сохраните измененный запрос в
файле 1аЬ5_5. sql. Выполните запрос из 1аЬ5_5 . sql.
nr wtr. . j id -'V ’v G Hi — '"'T и*..?; ty MaximuuiWu Minimum Sum Average
|AC_ACCOUNT 8300 8300 8300 8300
AC_MGR 1 2000 1 2000 ***** • • A I . >.A »• *• .W... 12000 ••***••• А ..а* -» a . V*.* а А1 я «>.«•••> 12000
AD_ASST 4400 4400 4400 4400
AD PRES 24000 24000 24000 24000
AD VP w«—•• IT-PROG 1 — 7000 9000 1 7000 4200 34000 19200 17000 6400
Ml< MAN 13000 1 3000 13000 13000
|mk_rep 6000 f. —...АЛАЯ—А.,-. А — *А*Аи..я 6000 6000 6000
SA MAN A A. 1 0500 10500 10500 10500
|SA_REP 1 1000 7000 2UG00 8867
ST CLERK 3500 2500 Tl700 2925
ST MAN 5800 5800 5800 5800
12 rows selected
Introduction to Oracle9/: SQL 5-28
Практическое занятие 5 (продолжение)
Напишите запрос для вывода должности и количества служащих, занимающих каждую
должность.
MK_REP
SA MAN
[ST~CLERK
|ST_ MAN
12 rows selected
Получите количество служащих, имеющих подчиненных, без их перечисления. Назовите
столбец Number of Managers.
Подсказка: используйте столбец MANAGER_ID для определения числа менеджеров.
v*Ay*y *чу*у у.%*>%**• -.««у,v**1-,*» •?*»’С*,-"**-К-*** ° %*•*’*’* *«>**•* у» .а*-«*а* *а*ааг am *ч'**^у<
«да,
8. Напишите запрос для вывода разности между самым высоким и самым низким окладами.
Назовите столбец DIFFERENCE.
... ,г . . .... ' ^jpppp£^p - -г-:-•—- •- -л ..
21500
Если осгалось время, сделайте следующие упражнения.
9. Напишите запрос для вывода номера каждог о менеджера, имеющего подчиненных, и
заработную плату самого низкооплачиваемого из его подчиненных. Исключите менеджеров,
для которых неизвестны их менеджеры. Исключите все группы, где минимальный оклад
составляет менее $6000. Отсорзируйте выходные строки в порядке убывания оклада.
L .да ! < •
MIN (SALARY)
...... a........«ft...
102
9000
149 j
7000
г
*
Introduction to Oracle9Z: SQL 5-29
Практическое занятие 5 (продолжение)
10. Напишите запрос для вывода названия отдела, местоположения отела, количества
служащих и среднего оклада по этому отделу. Назовите столбцы Name, Location,
Number of People и Salary. Округлите средний оклад до ближайшею целою значения.
Name । Location
[Accounting
Administration
Number of People
Salary
10150 j
4400 j
19333.33 I
6400 I
9500 |
10033.33
3500 i
7 rows selected
Если вы желаете усложнить задачу, выполниie следующие упражнения.
11. Напишите запрос для вывода общего количества служащих и количества служащих, нанятых в
1995, 1996, 1997 и 1998 юдах. Дайте соответствующие заголовки столбцам.
• VM ..KW*** MMAVA* VAU it V -4».--А» ••• - ЧЧ» ...... V- -до /•" --U —- f If-у-|
IOIAL | 1495 5 1Ч9Ь 1447 j 199В I
20 1 i 2 | 2 ! 3 i
12 Напишите матричный запрос для вывода всех должностей и суммы заработой платы
служащих, работающих в этой должное in в отделах 20, 50. 80 и 90. Последний столбец должен
содержать сумму заработной платы служащих этих отделов, занимающих каждую конкретную
должность. Дайте столбцам соо1ветствующис заголовки.
..Я liiSKS Г Dept 50
AC_ACCOUNT
— «Л-— **•*»~~~ А **» а»-*. *—*>*» Л» ЛА . е-А -*•- *«*•»*»** .WA.-Л
AC_MGR
|AD_ASST Г
AD_PRES j j
AD VP......... f...............
I
| Dept80 i Dept90 | Total
[
| ....Г" " Г 12000
I [ 4400
Г I 24000 24000
t !
[ I 34000 [ 34000
t*~**A***— — <ЛАОВ>А^*А4~~М...«.'ЪА.А>_« .-M*......... — V> --Л» *Л> »Л* • > p.4-*--. -Л.Ч ... BBvM a «АА...А . . 4-
Isa rep i i i96oo I 26600
< •—* f I e •
. — A—.^AA TT - - > .M W.T-LT-I ЛГ . —4—. —A ..4...4.A^A. 4,... ... — ........ . ~ .4. ... . - . .« . .„ . . 4. .. . . 4- ~ *A - «• . »4AA . •**« ~ .• J.-........... ...4.. ... .
ST_CLERK I j 11700 | i 11700
*• 1 ... i ..........4. . ... о •. ... c ...... о .....f W*. >... « I*-. V ъ. a« ...MB ft*. >• w ...a ••• ••.»...• | • К . O . •.«••<••«•..:•> 4......a о a •< .« .о О .............. o ... S • о П .. . « . - *.«.<«....•• *» .. . - .
ST_MAN I 5800 i | 5800
12 rows selecred
Introduction to Oracle9/: SQL 5-30
Подзапросы
? ' ; 4
Copyright © Oracle Corporation, 2001. All rights reserved.
Рассматриваемые вопросы
• Типы проблем, решаемых с помощью
подзапросов
• Определение подзапросов
• Типы подзапросов
• Написание однострочных и многострочных
подзапросов
ORACLE
в-2 Copyright Ф Oracle Corporation, 2001. All rights reserved
~' ' ’ " 1 " • ’ • - “ •• “ •**- - L ' l.-nr -J-- r_ ' '* «ММаа^ж^иа» I МЙ » i w»»» c-.-=o ’-;я=^мИИ’вЯ&»*Ч--и>вява»ив^«е==;^^!е-вч5^ввявевав«!^„вгЛ411=4_вяява1
Цели урока
Этот урок посвящен более сложному использованию команды SELECT. Для выборки значений по
неизвестному условию можно создать подзапрос в предложении WHERE команды SQL
Обсуждаются однострочные и многострочные подзапросы.
Introduction to Orac!e9/: SQL 6-2
Использование подзапроса для
решения проблемы
У кого оклад больше, чем у Абеля?
ORACLG
6-3 Copyright © Oracle Corporation. 2001. All rights reserved.
Использование подзапроса для решения проблемы
Предположим, что нужно выяснить, у кого оклад больше, чем у Абеля
Для этою необходимы два запроса: один для выяснения оклада Абеля и другой для выяснения гою,
кзо получает больше.
Для решения этой задачи можно создать один запрос внутри друг ого
Значение, возвращаемое внутренним запросом или подзапросом, используется внешним или
главным запросом. Использовать подзапрос — эго то же самое, что последовательно выполнить два
запроса, использовав результат первою в качестве критерия поиска во втором.
Introduction to Oracle9/: SQL 6-3
Синтаксис подзапросов
SELECT список__выбора
FROM таблица
WHERE выражение оператор
(SELECT список_выбора
FROM таблица);
• Подзапрос (внутренний запрос) выполняется
один раз до главного запроса.
• Результат подзапроса используется главным
запросом (внешним запросом).
ордсье
8-4 Copyright <0 Oracle Corporation, 2001. All rights reserved.
Подзапросы
Подзапрос - это команда SELECT, включенная в предложение дру> ой команды SELECT С
помощью подзапросов можно создавать очень мощные команды из простых. Они очень полезны в
случае, если выборка строк из таблицы производится по условию, зависимому ог данных в самой
таблице.
Подзапрос можно использовать в следующих предложениях языка SQL:
• WHERE
• HAVING
• FROM
Синтаксис:
оператор опсраюр сравнения, например, >, — или IN
Примечание
Операторы сравнения делятся на две категории: однострочные (>, >-, <, <>, <=) и
многострочные (IN, ANY, ALL).
Подзапрос часто называют вложенной командой SELECT, подкомандой SELECT или внутренней
командой SELECT. Обычно подзапрос выполняется первым, и сто результат используется для
определения условия выборки в главном или внешнем запросе.
Introduction to Огас!е9т: SQL 6-4
Использование подзапроса
SELECT last_name I
FROM employees -j-j qqq
WHERE salary > I
(SELECT salary
FROM employees
WHERE last__name = 'Abel');
King
-Kochhar
Oe Haan
Hallstein
Higgins
ORACLG
Copyright © Oracle Corporation. 2001. All rights reserved
Использование подзапроса
На слайде внутренний запрос определяет оклад служащего Abel. Внешний запрос использует
результат внутреннего запроса для вывода списка всех служащих, зарабатывающих больше
згой суммы.
Introduction to Oracie9r. SQL 6-5
Указания по использованию
подзапросов
• Подзапрос должен быть заключен в скобки.
• Подзапрос должен находиться справа от
оператора сравнения.
• В подзапросе не следует использовать
предложение order by, если только не
применяется “ТОР-N” анализ.
• В однострочных подзапросах используются
однострочные операторы.
• В многострочных подзапросах используются
многострочные операторы.
ORACL6?
6-6 Copyright О Oracle Corporation, 2001. All rights reserved
Указания по использованию подзапросов
• Подзапрос должен быть заключен в скобки.
• Подзапрос должен находиться справа от оператора сравнения.
• В версия, предшествовавших Огас1е8/, предложение ORDER BY не могло быть включено в
подзапрос. В команде SELECT можно было указывать только одно предложение ORDER BY ,
и оно должно было быть последним в команде SELECT главного запроса. Начиная с версии
Огас!е8/, предложение ORDER BY может использоваться в подзапросе для проведения “ТОР-
N” анализа, который рассматривается далее в курсе.
• В подзапросах используются операторы сравнения двух типов: однострочные и
мно1 островные
Introduction to Oracle9z: SQL 6-6
4
Типы подзапросов
• Однострочный подзапрос
Главный запрос
Подзапрос*
возвращает
ST_CLERK
• Многострочный подзапрос
Главный запрос
Подзапрос"
возвращает
ST_CLERK
SA_MAN
ORACLe
Copyright © Oracle Corporation, 2001. All rights reserved.
Типы подзапросов
• Однострочные подзапросы - запросы, в которых внутренняя команда SELECT возвращает
только одну строку
• Многострочные подзапросы - запросы, в которых внутренняя команда SELECT
возвращает более одной строки
Примечание
Существую! также многостолбновые подзапросы, в которых внутренняя команда SELECT
возвращает более одного столбца. Этот тип подзапроса рассматривается далее в курсе.
Introduction to Oracle9Z: SQL 6-7
Однострочные подзапросы
• Возвращают только одну строку
• Используют однострочные операторы
сравнения
Operator Meaning
we* ммаа Equal to
Greater than
Greater than or equal to
Less than
Less than or equal to
Not equal to
6-8 Copyright © Oracle Corporation, 2001. All rights reserved.
ORACLe
Однострочные подзапросы
Внутренняя команда SELECT, возвращающая только одну строку, называется однострочным
подзапросом. В подзапросах такого тина используются однострочные операторы. На слайде
показан список однострочных операторов.
Пример
Вывод списка служащих с закон же должностью, как у служащего под номером 141.
SELECT last_name, job_id
FROM employees
WHERE job_id =
(SELECT job_id
FROM employees
WHERE employee_id = 141);
. : c ' ; ' LAST_NAME. ||f||g|h . * ' JOBJD
Rajs ....... .........'.jST-CLERK.........
(Davies |ST_CLERK
Matos ...................................iST CLERK............
— «.AAA— . ~ A » <» . ...-А‘Ч*^М..Л^ЛМа. -V • W .AV’.MAAMA»A'МЛ V. V. A
Vargas |ST_CLERK
Introduction to Oracle9z: SQL 6-8
Выполнение однострочных подзапросов
»»•** % X' v х х«W*- w* >х»хххх^ * —* **'* Х«<ХХ»ХХ * ЧГ О»» «х»ХХ-*. ХХ*«*ХХ>* »х»х» XX.-х. X .«лх^Чх^ухХ» хххх «ч .»»»• XWXXIXXX Ч Х»Х»- Х«Х» VWXX Ь« X ЛХХХХ, XX О хххх XX хх«
l.ASI_HAMt . j '. ;JO(»JU | SATAHT
* ♦— - * ' • х •: . . о •»* w . л ;
Rajs .............................................................. ST CLERK .............................................I 3500 j
Davies ;ST_CL_ERk j 3100 ;
’L a1 «1 ►* |»м« »x-«x «ч « « >’*a * ixv x xX >» «xxwv~x«xw •***'«ах»*!" X хх*чх>хх«т x *x x-м xmwwv 1 « *xx »-» X» «» » и» > i>viR4a^»«»Xa»'»<« »< >x*X >хч »x •••<•>» х*мхгчхк x xwxxxxwxxxx u»x«x^_xx_ -xxxex x - x«x» .,;, • *x • • «xx •» • • xv >«x xxxxwxxx xxxxx x wx*X«xx-« Гаага »J
ORACLe
6-9 Copyright © Oracle Corporation, 2001. All rights reserved.
Выполнение однострочных подзапросов
Команду SELECT можно расс.малривагь как блок запроса. 11а слайде показан запрос для вывода
списка служащих, которые работаю! в гой же должности, что служащий с номером 141, и имеют
оклад больше, чем у служащего с номером 143.
Пример состоит из трех блоков запроса: одного внешнего и двух внутренних. Сначала
выполняются внутренние блоки. Их результаш - ST CLERK и 2600. Затем выполняется внешний
блок. Для создания условий поиска он использует результаты внутренних запросов.
Оба внутренних запроса возвращают по одному значению: ST_CLERK и 2600. Поэтому данная
команда SQL называется однострочным подзапросом.
Примечание
Внешний и внутренний подзапросы могут выбира ть данные из разных таблиц.
Introduction to Oracled/: SQL 6-9
Использование групповых функций в
подзапросах
SELECT last_name,
FROM employees
WHERE salary =
00
(SELECT MIN(salary)
FROM employees);
IAS Г NAMF
1 '* - г
ST CLERK
.1011 Ю
SAIAIIY*'
6-10
Copyright© Oracle Corporation, 2001. All rights reserved.
Использование групповых функций в подзапросах
В подзапросе можно использовать групповую функцию для получения результата в виде одной
строки. Подзапрос заключается в круглые скобки и помещается после оператора сравнения.
В вышеуказанном примере показан вывод фамилий, должностей и окладов всех служащих, чей
оклад равен минимальному. Групповая функция MIN возвращает во внешний запрос юлько одно
значение (2500).
Introduction to OfdCle9/: SQL 6-10
Предложение having с подзапросами
• Сервер Oracle сначала выполняет подзапрос
• Сервер Oracle возвращает результаты в
предложение having главного запроса
ORACLe
в-11 Copynght © Oracle Corporation, 2001. All rights reserved.
Предложение having с подзапросами
Подзапросы можно использовать не только в предложении WHERE^ но и в предложении HAVING.
Сервер Oracle выполняет подзапрос, и
запроса.
Команда SQL на слайде выводит список отделов, минимальные оклады в которых превышают
минимальный оклад в озделе 50.
результаты возвращаются в предложенье HAVING главного
7 tows selected
DEPARTMENT ID
*—
10
7П
MIN(SALARY)
4400
плпп
Пример
Найдите должность с самым низким средним окладом.
SELECT
FROM
GROUP BY
HAVING
job_id, AVG(salary)
employees
job_id
AVG(salary) = (SELECT
FROM
GROUP BY
MIN(AVG(salary))
employees
job id);
Introduction to Oracled/: SQL 6-11
6-12
ORACLe
Copyright © Oracle Corporation, 2001. All rights reserved.
Ошибки с подзапросами
Самая распространенная ошибка - эго когда однострочный подзапрос возвращает более одной
сз роки.
В команде SQL на слайде подзапрос содержит предложение GROUP BY (department id), что
предполагаез возврат нескольких строк - по одной на каждую найденную 1 руппу. В данном
случае результатами подзапроса будут 4400, 6000, 2500, 4200, 7000, I 7000 и 8300.
Внешний запрос берег результаты подзапроса (4400, 6000, 2500, 4200, 7000, 17000, 8300) и
использует их в предложении WHERE. Предложение WHERE содержит оператор равенства “=“
- однострочный оператор, ожидающий только одно значение. Оператор равенства нс может
принять от подзапроса более одного значения и, следовательно, выдаст ошибку.
Для исправления ошибки замените оператор “ =“ оператором IN.
Introduction to Oracle9/: SQL 6-12
Будет ли выполнена эта команда?
ORACL&
6-13 Copyright © Oracle Corporation, 2001. All rights reserved
Проблемы с подзапросами
Самая распространенная проблема - эго когда внутренний запрос не возвращает ни одной
строки.
В примере на слайде команда SQL содержит предложение WHERE (last_name = ’Haas').
Очевидно, цель состояла в поиске служащею по фамилии Haas. Команда кажется правильной,
но при выполнении не возвращает ни одной строки.
Проблема в том, что фамилия Haas указана неправильно. Служащего с такой фамилией не г.
Поэтому подзапрос ничего не возвращает. Внешний запрос берег результаты подзапроса
(неопределенное значение) и использует их в своем предложении WHERE. Внешний запрос нс
находит ни одного служащею с должностью, равной неопределенному значению, и ничего не
возвращает. Если существует должность с неопределенным значением, внешний запрос все
равно не вернет сгроки, так как результат сравнения двух неопределенных значений - эго тоже
неопределенное значение и поэтому условие WHERE неверно.
Introduction to Огас1е9/: SQL 6-13
Многострочные подзапросы
• Возвращают более одной строки
• Используют многострочные операторы
сравнения
Оператор Значение
IN Равно любому члену списка
ANY Сравнение значения с любым значением, возвращаемым подзапросом
ALL Сравнение значения с каждым значением, возвращаемым подзапросом
ORACUe
Copyright © Oracle Corporation. 2001. All rights reserved
Многострочные подзапросы
Подзапросы, возвращающие более одной строки, называются многострочны ми. Вместо
однострочного оператора в них используется многострочный. Многострочный оператор ожидает
одно или более значений.
SELECT last_name,
FROM employees
WHERE salary IN
salary, department_id
(SELECT
FROM
GROUP BY
MIN(salary)
employees
department id);
Пример
Найдите служащих, оклад которых равен минимальному окладу в отделах.
Сначала выполняется внутренний запрос, возвращающий строки: 2500, 4200, 4400, 6000,
7000, 8300, 8600, 17 000. Затем обрабатывается главный блок. Результаты внутреннего
запроса используются пртт этом для завершения условия поиска в главном запросе Фактически
для сервера Oracle главный запрос выглядит примерно так:
SELECT last_name, salary, department_id
FROM employees
WHERE salary IN (2500, 4200, 4400, 6000, 7000, 8300, 8600, 17000);
Introduction to Oracle9/: SQL 6-14
Использование оператора any в
многострочных подзапросах
SELECT employee_id, last_name, job_id, salary
FROM employees 900o.eooo.4200
WHERE salary < ANY. "
" 7r (SELECT ?.sala^\
jgillOM _ employees
WHERE job_id « 'IT_PROG')
AND job_id <> 'IT_PROG';
salary:
.«••••• ••>*••• ••• ...............................•••..•. ..................... .... .
|......................... 124 jMowgos ..................JSTMAN........................ f........... 5800 :
j 141 iRajs ................... |ST_ClERk ..........!............. 3500 |
f.l »l , , , . p . J ... L — —“ — — •- —• — L . JI" ”1 — . — — . . .U .... . ’
142 (Davies iST.CLERK i 3100 j
[ " 143 (Malos ’ |ST_CLERK Г 2600 ;
206 -G«etz mv mCCOUNi d30U ।
”. j
10 rows selected
ORACLe
6-16 Copyright © Oracle Corporation, 2001. All rights reserved.
Многострочные запросы (продолжение)
Оператор ANY (и его синоним SOME) сравнивает значение с любым значением, возвращаемым
подзапросом. Запрос на слайде возвращает список служащих, которые нс являются
программистами подразделения информационных технологий и оклады которых меньше, чем у
любого программистами. Максимальный оклад программиста - 9000 долларов. Команда SQL
возвращает список служащих, которые не являются программистами, но зарабатывают менее 9000
долларов.
<ANY означает “меньше, чем максимум44.
>ANY означает “больше, чем минимум44.
=ANY — эквивалент IN.
Introduction to Oracle9/: SQL 6-15
Использование оператора all в
многострочных подзапросах
"EMPLOYEE J0 lAsfjlAJAE '“Г’"”'"''"joajD • 71 SALARY'
i 141 |Pajs tST_CLERK i 3500
Г 142 [Davies ~ STCLERk 3100
i 143 [Matos ST_Cl_EPI< Г 2WJU !
144 [Vaigas............................ ST/LERk • 2500!
ORACLG
$-1$ Copyright © Oracle Corporation, 2001. All rights reserved.
Многострочные запросы (продолжение)
Оператор ALL сравнивает значение с каждым значением, возвращаемым подзапросом. Запрос на
слайде возвращает список служащих, которые не являются программистами (идентификатором
должности IT_PROG) и оклады которых меньше, чем у всех программистов.
>ALL означает “больше, чем максимум".
<ALL означает “меньше, чем минимум".
Оператор NOT нс может использоваться с операторами ANY и ALL
Introduction to Oracle9t: SQL 6-16
Неопределенные значения в
подзапросе
SELECT emp.last_name
FROM employees emp
WHERE emp. employee__id NOT IN
(SELECT mgr.manager_id
FROM employees mgr);
no rows selected
ORACLE
6-17 Copyright © Oracle Corporation, 2001. All rights reserved.
Неопределенные значения в результатах подзапроса
На слайде делается попытка вывода фамилий всех служащих, нс имеющих подчиненных. Логически
эта команда SQL должна была бы вернуть I2 строк, но одно из значений, возвращаемых внутренним
запросом, являе1ся неопределенным значением, и, следовательно, запрос в целом не возвращает ни
одной строки. Это объясняется тем, что все условия, где производится сравнение с неопределенным
значением, даюг неопределенное значение. Поэтому ними да нс используйте оператор NOT IN, если
существует вероятность того, что подзапрос вернет неопределенное значение. Оператор NOT IN
эквивалентен О ALL.
Следует отметить, что если используется оператор IN, то проблем с неопределенными значениями,
возвращаемыми подзапросом, нс возникает. Оператор IN эквивалентен условию =ANY. Например,
для вывода всех служащих, имеющих подчиненных, используйте следующую команду SQL:
SELECT emp.last_name
FROM employees emp
WHERE emp.employee_id IN
(SELECT mgr.manager_id
FROM employees mgr);
Для тою, чтобы вывести всех служащих, не имеющих подчиненных, в подзапрос можно включить
предложение WHERE:
SELECT last_name FROM employees
WHERE employee_id NOT IN
(SELECT manager id FROM employees
WHERE manager id IS NOT NULL);
Introduction to OracleS/: SQL 6-17
Итоги
• Проблемы, решаемые с помощью подзапросов.
• Создавайте подзапросы, когда запрос основан на
неизвестных значениях.
SELECT список_выбора
FROM та блица
WHERE выражение оператор
(SELECT слисок__выбора
FROM таблица);
ORACLe
6-18 Copyright © Oracle Corporation, 2001. All rights reserved.
Итоги
В этом урокс рассматривалось использование подзапросов. Подзапрос - это команда SELECT,
включенная в предложение другой команды SQL. Подзапросы полезны в случаях, когда запрос
основан на неизвестных критериях поиска.
Характеристики подзапросов:
• Могут передавать одну строку данных в главный запрос, содержащий одноезрочный оператор
(=,<>,>,>=,< или <=).
• MoiyT передавать более одной строки данных в главный запрос, содержащий многострочный
оператор (например, IN).
• Сервер Oracle обрабатывает их первыми, а затем их резулыагы используются в предложении
WHERE или HAVING.
* Может содержать групповые функции.
Introduction to Oracle9/: SQL 6-18
Обзор практического занятия 6
Создание подзапросов для выборки данных по
неизвестным критериям.
Использование подзапросов для выявления
значений, существующих в одном наборе
данных и отсутствующих в другом
ORACL.G
6-19
Copyright © Oracle Corporation, 2001. All rights reserved
Обзор практического занятия 6
Это занятие посвящено созданию сложных запросов с вложенными командами SELECT.
Упражнения на бумаге
Возможно, что для ответов на эти вопросы лучше сначала создать подзапрос. 11реждс, чем
кодировать главный запрос, убедитесь в том, что подзапрос выполняется и дас! нужные данные.
Introduction to OracleSh': SQL 6-19
Практическое занятие 6
I. Создайте запрос для вывода фамилии и даты найма каждого служащего, работающего в одном
отделе с Zlotkey. Исключите Zlotkey из выходных данных.
fl HIRE DATE Ж
Abel ............... |11 MAY-96
Taylor I24-MAR-98
2. Создайте запрос для вывода номеров и фамилий всех служащих, оклад которых выше среднего.
Отсортируйте выходные данные в порядке увеличения окладов.
3. Создайте запрос для вывода номеров и фамилий всех служащих, работающих в одном отделе с
любым служащим, фамилия которого содержит букву “к”. Сохраните свой запрос в тестовом
файле 1аЬ6_3 . sql. Выполните запрос.
£j'g|EMP^ > :;.f WSTJHAftlE
141 (Rajs.........................
142 .Davies
143 Katos
144 iVargas
103 iHunold j
104 iEtnst
107 iLorentz
1
8 rows selected.
Introduction to Oracle9/: SQL 6-20
Практическое занятие 6 (продолжение)
Создайте запрос для вывода фамилии, номера отдела и должности каждого служащего,
идентификатор местоположения отдела которог о равен 1700. X?. << V '
J
LAST NAME
DEPARTMENT ID
JOB 10
iWhalen
ikochhar
90
AD VP
De Haan
[Higgins
i---------
j r”4 ; ЛI _
110 AC MGR
1 •—
110 AC ACCOUNT
6 rows selected.
5. Получите список фамилий и окладов всех служащих, подчиненных Кингу (King).
Г1Ж OOVOt rLAST NAME. ,vQ| VOOVOO 1; SALARY flBtll
!l<ochhar | 17000
«. >ЛДМ '--Ll~ - «.T-ir-l-l— w. »<Ч«-МАЛЧЛЛ<-КЧЛ*Ч-.ЧЧМ." - « *4«4->X»VA4A« »ЧА» • ч* “ *чч*-* «Ч»*' чА» 1.»AAA* '--• »-»• V44»..- ЛЧЧ. •,л<м*лч« ЬЫ.- мА««АМ«- •/АлЛЧЛА- чМ’Л-.V • I А Л’ -- - * ЧА.-АА-.- -,A“-1ЧЛ» «.» . «- ^S4'*A* **• •»
jDe Haan ’ 17000
jMourgos | 5800
Zlotkey I 10500
AV .«• » «А< МЛ .**•• - =>--'** .«.лМ.М,«4М,М *A* <*AW - • W ЛДАЧ» V,»..-.4» *•> ^-***«**-*-’•*'*A*. "*AAV." гЛ --Л «Л» • «A* - «Л ‘ * *-* • • ЛЛ-л» —-и- Ч> •.•—•- bv,
lHartstein > 13000
______________ __________—__—г- . ...._............я. ..... .ж» »о . «л, .0^.0. ....... <.. . а. .в ....... ........ .4 а. - . — .4 ..«-«а.а..-...а» -- . - . ж wb . > а .в» Г в . »»• а • а а • •» . а а а » . • . « --а. «» . . . а» л . . . rf»a о ..а— а*^> <
6. Получите номер отдела, фамилию и должность для каждого служащего, раболающего в
администрации (departiuent_name = 'Executive').
Если осталось время, сделайте следующие упражнения.
7. Измените 1аЬ6_3 . sql для вывода номеров, фамилий и окладов всех служащих, которые
работают в одном отделе с любым служащим с буквой “н“ в фамилии и оклады которых
превышают средний. Сохраните новый запрос в файле 1аЬ6_7 . sql. Выполните его.
. . .vyvxz«- Лх .... ч .W. .Ч>—***.--.-w-y. л, ••• *.у« »'*•**• *»Ч* .«wy^. ^Л.. .V.VW-Z ... V4, «ЧМ* .-.ЧЧЧАу •-
EMPLOYEE ID -V . &рЙ10®EAST NAME з В| SALARY еVO
103 Hunold I 9000
: г
Introduction to Oracle9/: SQL 6-21
Introduction to Oracle9z: SQL 6-22
Формирование и вывод данных с
помощью /SQL*Plus
Copyright © Oracle Corporation, 2001. All rights reserved.
Рассматриваемые вопросы
• Запросы, требующие входных переменных
• Настройка среды z’SQL*Plus
* Форматирование выходных данных
• Создание и выполнение скрипт-файлов
Цели урока
Ла этом урокс вы научитесь использовать команды /SQL*Plus для получения выходных
данных SQL в удобном формате.
Для ограничения количества выбираемых строк можно создать скрипт-файл, содержащий
команду WHERE. Для смены условий выборки при каждом выполнении скрип г-файла
используются переменные подстановки. Переменные подстановки могут замещать значения в
предложении WHERE, текстовые строки и даже имена столбцов или таблиц.
Introduction to Oracle9/: SQL 7-2
Переменные подстановки
Пользователь
ORACLG
7-3 Copyright © Oracle Corporation. 2001. All rights reserved.
Переменные подстановки
До сих пор интерактивное получение отчетов было невозможным. В головом приложении
пользователь запускал выполнение отчета, после чею oihci выполнялся без каких-либо
приглашений пользователю ввести данные. Объем данных заранее определялся
фиксированным предложением WHERE в скришп-файле zSQL*Plus .
rSQL*Plus позволяет создавать отчеты с приглашениями пользователю задать собственные
значения для ограничения возвращаемых данных. Для создания интерактивных отчетов
пользователь может вставлять переменные подстановки (substitution variables) в скрипт-файл
или отдельные команды SQL. Можно сказать, что переменная подстановки - зло контейнер
для временного хранения значений.
Introduction to Oracle9/: SQL 7-3
Переменные подстановки
• Использование переменных подстановки
/SQL*Plus для временного хранения значений:
- одиночный амперсанд (&);
- двойной амперсанд (&&);
- команда define.
• Передача значений переменных из одной
команды SQL в другую.
• Динамическое изменение верхних и нижних
колонтитулов.
Переменные подстановки
В zSQL*Plus можно использовать переменные подстановки с одним амперсандом (&) для
временного хранения значений.
Переменные в /SQL*Plus можно предопределить с помощью команды DEFINE. Команда
DEFINE создает переменную и присваивает ей значение.
Примеры ограничении выборки данных
• Отчет только за текущий квартал или заданный интервал времени.
• Отчет только по данным пользователя, приславшего запрос.
• Вывод данных только по сотрудникам конкрст нот о отдела.
Другие возможности интерактивной работы
Интерактивные возможности не отраничиваюгся предложением WHERE. Тог же принцип может
использоваться для достижения других целей. Например:
• динамическое изменение заголовков и нижних колонтитулов;
• получение входных значений из файла, а нс от пользователя;
• передача значений из одной команды SQL в другую.
/SQL*Plus нс позволяет проверять входные данные пользователя (за исключением типа данных).
Introduction to Oracle9/: SQL 7-4
Переменная подстановки с одним
амперсандом (&)
Переменная с одним амперсандом (&) позволяет
запросить значение у пользователя.
SELECT employee_id, last_name, salary, department_id
FROM employees _ __
WHERE employee_id =| &employee__num] ;
ORACLE’ /SQL*P1US
• A—7 a A v» Fi£?~9'4 |
L ’elirie SuL's*.:[i jtiOr; Variable >
•VV'A4''-'A4x.KV\4''AV.'WVA\*V.’,‘A-A‘.W.< \4\V ' ar A. %’ - Л^А.« $Л.фЙ,Ч«Л.ЧА.%1' КЧ».« ’ • V V.WMM А»ЛЧЧА»Л» • • • ЯДЛ.ЧЯ г ° » - • ‘Л‘АМ
i’employee_num" | j
V. Л.\*. ..".AV 1'.X\W.,,’.bt,W*VAW4W' WV.W.’.VKWV. '•-WVSW4WWVV* » \-.V44*-,*'****Ч*\\**-Л* Л\***\1*Л**' *-Л'\**'Л*
к Submit for ЕхесШюЛ Л I Cancel
>н iinnfti । чи .ашй । i. гйечтыйм* >w»iww. fc’b at >rt :»•< to
7-5 Copyright © Oracle Corporation, 2001. All rights reserved.
Переменная подстановки с одним амперсандом
При выполнении отчетов пользователи часто желают задать критерии выборки данных
динамически. <SQL*Plus обеспечивает такую гибкость с помощью пользовательских
переменных. Каждая переменная в команде SQL обозначается амперсандом (&). Определять
значение каждой переменной необязательно.
Обозначение Описание
^переменная пользователя Обозначает переменную в команде SQL . Если переменная не сущее 1вуег, то среда /SQL*Plus создаст ее. При запуске команды SQL на выполнение запрашивается значение для переменной подстановки с одним амперсандом (&)./SQL*Plus сбрасывает значение переменной после однократною выполнения команды SQL.
Команда SQL на слайде приглашает пользователя ввести номер служащего во время
выполнения и возвращает для этого служащего номер, фамилию, оклад и номер отдела.
Если используется переменная с одним амперсандом, пользователю выдается приглашение
ввести значение при каждом выполнении команды.
Introduction to Oracle9/: SQL 7-5
Переменная подстановки с одним
амперсандом (&)
old 3 WHERE cmploycc_id = &етпр!оусс_ num
new 3 WHERE employe c_td =101
W EMPLOYEE " lAsr Йане'?-' SAIAHY DFPAPIMtMT ID
101 knchhai 17000 90
7-6 Copyright €> Oracle Corporation, 2001 All rights reserved
Переменная подстановки с одним амперсандом
При обнаружении в команде SQL одиночного амперсанда (&) /SQL*Plus выводи! приглашение
пользователю ввести значение переменной подстановки, имеющей имя, указанное в команде
SQL. После тою, как пользователь введет значение и щелкнет на кнопке “Submit for
Execution , резулыа! выводится в выходную область сеанса ?SQL*Plus.
Introduction to OracleJh: SQL 7-6
Символьные значения и даты с
переменными подстановки
Даты и символьные значения заключаются в
апострофы.
SELECT last_name, department_id, salary*12
FROM employees
WHERE job_id = ’&job^title’ | ;
ИЦИММЦMЖМщ
[ ‘efii-.e bubstiutior van jUes
"job J tile" |lT_PROG
Submit fat Execirfion I Cancel
ШйШйЫЙЫЬ ййШм M>>^A nwiwdM >a ш—J — аЬ>ЪМ«Жа
t'« Г ; , LAS( NAML - WiSsSWSSRc BtPARIMLNl Ж*0~'
- - --_-- . - d —, - --- - - - — TL-- - .W.-ur r -- --- » w«. » I « « »> »»» I » »»* .. I » I ,.» - I—IM ,.1,1... ——— . «» —. IW — . .. . . Г». . . i I ..
^Hunold -j 60 i 108000
fe.nst ‘ ....... .................... ... 60 .....................................................................................72(100
--1^.. -. ' - .- 1 .— . ... < .. . . RII.- — ,— .W -W. .—...— «Ml . I . !!... WH. ... ~ ~ .. Д... — . -
iLorentz ! 60 ; 5041^J
OR,
7-7 Copynght © Oracle Corporation. 2001. All rights reserved.
Символьные значения и даты с переменными подстановки
В предложении WHERE даты и символьные значения должны бьпь заключены в апострофы.
Эго правило относится и к переменным подстановки.
Чтобы нс вводить апострофы во время выполнения, заключите переменную в апострофы в
самой команде SQL.
На слайде показан запрос для выборки фамилии, номера отдела и годовой заработной платы
всех служащих, занимающих должность, введенную пользователем в ответ на приглашение.
Примечание
Амперсанд можно использовать также с функциями типа UPPER и LOWER. Чтобы
пользователю нс нужно было вводить должность заглавными буквами, используйте функцию
UPPER('&job_title’).
Introduction to Oracle9f: SQL 7-7
Задание имен столбцов, выражений и
текста во время выполнения команды SQL
Переменные подстановки могут замещать:
• Условие WHERE
• Предложение order by
• Выражение столбца
• Имя таблицы
• Целую команду select
Copyright © Oracle Corporation, 2001. All rights reserved.
Задание имен столбцов, выражений и текста во время выполнения команды SQL
Переменные подстановки могут не только использоваться в предложении WHERE команды
SQL , но и замещать имена столбцов, выражения и текст.
Пример
Вывод номера служащего и любого другого столбца в соответствии с любым заданным
критерием
SELECT employee_id, &column_name
FROM employees
WHERE Scondition;
“column name" hob id
condition' Idepartmentjd = 10
EMPLOYEE ID
JOB ID
200 AD ASST
Если не ввести значение переменной подстановки, во время выполнения вышеуказанной
команды будет выдано сообщение об ошибке.
Примечание
крсмсниыс подстановки могут быть использованы в любом месте команд SQL и ;SQL*Plus,
кроме первого слова этих команд.
Introduction to Огас1е9т: SQL 7-8
Задание имен столбцов, выражений и текста во время выполнения команды SQL
(продолжение)
Пример на слайде показывает выборку из таблицы EMPLOYEES номера служащею, фамилии и
должности, а также любого друюго столбца, заданною пользователем во время выполнения.
Пользователь может также задать условие выборки cipoK и название столбца, по которому
должны быть отсортированы выходные данные.
Introduction to Oracled/: SQL 7-9
Определение переменных подстановки
• Задать переменную в /SQL*Plus можно с
помощью команды define:
DEFINE переменная = значение(создает
пользовательскую переменную с типом данных
CHAR).
• Если в команде define требуется одиночный
пробел, этот пробел должен быть заключен в
апострофы.
• Переменная подстановки доступна в течение
сеанса.
ORACLE
7-ю Copyright © Oracle Corporation, 2001. All rights reserved.
Определение переменных подстановки
Пользовательские переменные можно определять до выполнения команды SELECT. Для
определения и установки значений пользовательских переменных /SQL*Plus ирсдосзавляег
команду DEFINE:
Команда Определение
DEFINE переменная = значение Создаст пользовательскую переменную типа CHAR и присваивает значение
DEFINE переменная Показывает переменную, се значение и тип данных
DEFINE Пока шваст вес пользовательские переменные с их значениями и типом данных в текущем сеансе
Introduction to Oracle9z: SQL 7-10
Команды DEFINE И UNDEFINE
• Переменная остается заданной:
- до ее удаления командой undefine ;
- до выхода из 7SQL* *Plus.
• Проверить изменения можно с помощью
команды DEFINE.
DEFINE job_title = IT_PROG
DEFINE job_title
DEFINE JOB_TITLE = "IT_PROG" (CHAR)
«MM
UNDEFINE job_title
DEFINE job_title
SP2-0135: symbol job title is UNDEFINED
ORACLG
7-11 Copyright C Oracle Corporation, 2001. AH rights reserved.
Команды DEFINE И UNDEFINE
11ерсменная удаляется в следующих случаях :
• выполнение команды UNDEEINE для данной переменной;
• выход из iSQL*Plus.
Если для удаления переменных используется команда UNDEFINE, проверить изменения
можно командой DEFINE. При выходе из /SQL*PIus все переменные, заданные во время
сеанса, теряются.
Introduction to Oracle9/: SQL 7-11
Использование команды define с
переменными подстановки
• Создайте переменную подстановки, используя
команду DEFINE.________________________________
DEFINE exnployee_num = 200 j
• Используйте амперсанд (&) в качестве
префикса переменной подстановки в команде
SQL.
SELECT enployee__id, last__name, salary, department id
FROM employees
WHERE employee id = i&employee num. ;
**. ---<5 у
S i SALARY 1;ZZZ:MpARfMEHTjD ...........g|
. 4400 • .......... -Q-j
ORACue
7-12 Copyright © Oracle Corporation. 2001 All rights reserved.
Использование команды define
В примере на слайде по команде DEFINE создастся переменная подстановки tSQL*P1us для
номера служащею. Во время выполнения команда SQL использует эту переменную для
вывода номера служащего, его фамилии и номера отдела.
Так как переменная t’SQL*P1us создастся с помощью команды DEFINE, пользователю нс
выводится приглашение на ввод номера служащею. Значение ной переменной автоматически
подставляется в команду SELECT.
Переменная подстановки EMPLOYEE_NUM существует в сеансе до ввода команды UNDE FINE
или выхода из /SQL*Plus.
Introduction to Oracle9Z: SQL 7-12
Переменные подстановки с двумя
амперсандами (&&)
Переменная подстановки с двумя амперсандами
(&&) позволяет многократно использовать значение
переменной, не запрашивая его повторно у
пользователя.______________________________________________............
SELECT employee id, last name, job_id, |&&column_name
FROM employees
ORDER BY !&column name,;
A ч 4 \V «А*Ч* ' I* * * 4*» *** *
Uefin? i'libstitutiGn \'з i?.c-.es
"column_name" (departmentjd|
Submit for Execution I ' Cancel I
fMPl..pYffJD lASTJlAftlF, 408JO j- DFPARTMFNTJtl.
200 Whiten |aD_ASST 10 i
----- — .1 -Ц- •••*• «W .* .»»«**< 4 f-~ *** .M ♦».. »»»««! ^.M*i l-« »»»— I . I.U.M .< . » -a» A*, ***-«** » — »»!»»»- » ^ . - —» |
201 Hail stein |MK_MAN 20
20 rows selected
Переменные подстановки с двумя амперсандами (&&)
Для многократного использования значения переменной без повторных приглашений
пользователю ввести значение можно использовать переменную подстановки с двойным
амперсандом (&&). Пользователь получает приглашение ввести значение только один раз. В
примере на слайде пользователя просят задать значение переменной coluinn name только один
раз. Значение, введенное пользователем (department id), используется для вывода и сортировки
данных.
/SQL*Plus сохраняет введенное значение с помощью команды DEFINE; эго значение
используется каждый раз, когда пользователь ссылается на имя переменной. Если
пользовательская переменная задана таким образом, для ее удаления требуется команда
UNDEFINE.
Introduction to Oracle9Z: SQL 7-13
Использование команды verify
Если задан режим set verify on, /SQL*PIus
выводит текст команды до и после замены
переменных подстановки значениями.
[set verify ONi
SELECT employee__id, last_name, salary, department id
FROM employees
WHERE exnployee_id = Semployee_num;
"empInyeP-num'
old
new
3: WHERE employee_id
3: WHERE employee id
&einployee__num j
200
7-14
Copyright © Oracle Corporation, 2001. All rights reserved.
Использование команды verify
Для проверки изменений в команде SQL используется команда VERIFY /SQL*Plus. Если
проверка задана (SET VERIFY ON), /SQL*Plus показывает текст команды до и после замены
переменных, значениями.
Пример на слайде показывает как старое, так и новое значение столбца EMPLOYEE ID.
Introduction to Oracle9/: SQL 7-14
Настройка среды z’SQL*Plus
• Для управления текущим сеансом пользуйтесь
командой set
SET system_variable value
• Проверяйте заданные параметры с помощью
команды show
SET ECHO ON
SHOW ECHO
echo ON
7-15
Copyright © Oracle Corporation, 2001. All rights reserved.
Настройка среды <SQL*Plus
Управлять средой, в которой работаем в данный момент /SQL*Plus, можно с помощью
команд SET.
Синтаксис
SET системная_переменная значение
где:
системная переменная
переменная, контролирующая один аспект среды
сеанса
значение
значение для системной переменной
Заданные параметры можно провершь с помощью команды SHOW. Команды SHOW на
слайде проверяет состояние ECHO - ON (“включено**) или OFF (“выключено**).
Для просмотра всех параметров, заданных командой SET , используется команда SHOW
ALL.
Более подробную информацию см. в iSQL*Plus User's Guide and Reference, “Command
Reference ”
Introduction to Oracle9i: SQL 7-15
Переменные команды set
• ARRAYSIZE {20 | n}
• FEEDBACK {6 | n |OFF | ON}
• HEADING {OFF | ON}
• LONG {80 | n}| ON | text}
SET HEADING OFF
ORACLE
Copyright © Oracle Corporation, 2001 All rights reserved
Переменные команды set
Переменная команды SET и ее значения Описание
ARRAY[SIZE] (20| л} Задаст размер выборки из базы данных
FEED[BACK] {6|П[OFF|ON] Выдаст информацию о количестве строк, возвращенных по запросу, если эго количество превышает л (1 [ример: 11 rows selected)
HEA[DING] {OFF|ON} Определяет, выдаются ли заголовки столбцов в отчетах
LONG (80|n) Задаег максимальную ширину сюлбца для вывода значений LONG
Примечание: n представляет цифровое значение. Подчеркнутые значения - эго значения,
используемые по умолчанию. Если вы нс вводите значение вместе с переменной, /SQL* Plus
использует значение по умолчанию.
Introduction to Oracle9r: SQL 7-16
Команды форматирования среды
zSQL*Plus
• COLUMN [столбец опция]
• TTITLE [текст | OFF | ON]
• BTITLE [текст | OFF | ON]
• BREAK [ON элеменТ—Отчета]
Получение отчета, удобного для чтения
Управлял» форматом отчета можно с помощью следующих команд
Команда Он исанис
COL[UMN] [столбец опция] Управляет форматом столбца
TTI[TLE] [текст|OFF|ON] Задаст затоловик, который должен печататься на каждой стран и не отчета
BT1[TLE [текст)OFF|ON] Задает нижний колонтитул, который! должен печататься на каждой странице отчета
BRE[AK] e ме н [ON 07 чета] Устраняет значения-дубликаты и разделяет строки символами перевода строки
У кп танин
• lice команды форматирования действуют до выхода из /SQL*Plus или до тех нор, пока
отти не будут перс записаны или сброшены.
• После каждого отчета не забывайте восстанавливать установки /SQL*Plus, используемые
по умолчанию.
• Команды для присвоения переменной iSQL*Plus значения по умолчанию нс существует;
необходимо зназь конкретное значение или выйти из iSQL*Plus, а затем вы звать ею
снова.
• Если вы присваиваете столбцу псевдоним, ссылки до тжны быть на этот псевдоним, а не
на имя столбца.
introduction to Oracle9/: SQL 7-17
Команда column
Управляет форматом вывода столбца
COL[UMN] [{столбец!псевдоним} [опция]]
• cle [ar] : сбрасывает все форматы столбца
• hea[ding] текст: задает заголовок столбца
• for [мат] формат: изменяет вывод столбца с
помощью форматной модели
• NOPRINT | PRINT
• NULL
ORACLe
7-18 Copyright © Oracle Corporation, 2001. All rights reserved.
Опции команды column
Опция Описание
CLE[AR] Сбрасывает любой формат столбца
HEA[DING] текст Задаст заголовок столбца. Вертикальная линия (|) означает перевод строки в заюловкс, если нс используйся выравнивание.
FOR[MAT] формат Изменяет вывод столбца данных
NOPRI[NT] Скрывает столбец
NUL[L] текст Задает текст, который выводится вместо неопределенных значений
PRI[NT] Показывает столбец
Introduction to Oracle9z: SQL 7-18
Использование команды column
• Создайте заголовки столбцов
COLUMN last_name HEADING 'Employee|Name'
COLUMN salary JUSTIFY LEFT FORMAT $99,990.00
COLUMN manager FORMAT 999999999 NULL ’No manager
• Выведите на экран текущие установки для
СТОЛбца LAST_NAME
• Сбросьте установки для столбца last_name.
7-19 Copyright © Oracle Corporation. 2001. All rights reserved
Вывод и сброс установок
Для вывода или Сороса установок команды COLUMN используются следующие команды
Команда Описание
COL[UMN] столбец Выдаст текущие установки столбца для задан hoi о
COL[UMN] Выдает текущие установи текупкч о сеанса и для всех столбцов
COL[UMN] столбец CLE[AR] Сбрасывает установки д 1Я щданного столбца
CLE[AR J COL[UMN] Сбрасывает установки т текущем сеансе 1Я всех столбцов в
Introduction to Oracle9<: SQL 7-19
Модели формата, используемые в
команде column
Элемент Описание Пример Результат
9 Один цифровой разряд 999999 1234
0 Ведущий ноль 099999 01234
$ Плавающий знак доллара $9999 $1234
1 Местная валюта L9999 $1234
а Позиция десятичной точки 9999.99 1234.00
f Разделитель тысяч 9,999 1,234
7-20 Copyright © Oracle Corporation, 2001. All rights reserved.
Модели формата в команде column
На слайде показаны примеры моделей формата в команде COLUMN
Если фактическое количество цифр в значении превышает количество цифр, допускаемое
моделью формата, сервер Oracle выдаст вместо всего значения последовательность символов
фунта (#). Символы фунта выдаются и в случае, если модель формата предписывает
алфавитно-цифровой тип данных, а фактическое значение - цифровое
Introduction to Oracle9/: SQL 7-20
Использование команды break
Используйте команду break для устранения
дубликатов.
7-21 Copyright О Oracle Corporation, 2001. All rights reserved
Команда break
Команда BREAKиспользуется для разбивки строк на раздели и исключения строк-
дубликатов. Чтобы команда BREAK работала эффективно, указывайте столбцы, по которым
производится разбивка, в предложении ORDER BY.
Синтаксис
BREAK on столбец[|псевдоним|row]
столбец[|псевдоним I row
исключает вывод строк-дубликатов для ука таниот о
столбца
Все параметры разбивки, заданные с помощью команды BREAK, сбрасываются командой
CLEAR:
CLEAR BREAK
Introduction to Oracle9/': SQL 7-21
Использование команд ttitle и
BTITLE
• Вывод заголовков и нижних колонтитулов
• Задание заголовка отчета
TTITLE 'Salary|Report'
• Задание нижнего колонтитула отчета
BTITLE 'Confidential'
ORACLe
Copyright © Oracle Corporation, 2001 All rights reserved.
Команды TTITLE И BTITLE
Команда TTITLE используется для форматирования заюловков страниц, a BTITLE- для
форматирования нижних колонтитулов. Нижние колон титулы печатаются в нижней части
страницы.
Синтаксис команд BTITLE и TTITLE одинаков. Здесь показан только синтаксис TTITLE. Для
разбивки заголовка на несколько cipoK используется вертикальная черта (]).
Син таксис
TTI[TLE]|BTI[TLE] [текст|OFF|ON]
где:
текст задаст текст заголовка. Если текст больше одного слова, заключите
его в апострофы.
OFF | ON выключает (OFF) или включает (ON) вывод заголовка. Заголовок нс
виден, если установлено значение OFF.
Команда TTITLE на слайде задаст заюловок отчета: слово Salary на одной строке и слово Report
под ним с центровкой. Команда BTITLE задаст нижний колонтитул отчета: Confidential.
TTITLE автоматически ставит в отчете дату и номер страницы.
Introduction to Oracle9r: SQL 7-22
Команды ttitle и btitle (продолжение)
Примечание
На слайде показан сокращенный синтаксис команд TTITLE и BTITLE. Ооальные bojmo/kiiucih
команд TTITLE и BTITLE обсуждаются в другом курсе но S^JL.
Introduction to Oracle9/: SQL 7-23
Создание скрипт-файла для
выполнения отчета
1. Создайте и протестируйте команду select
языка SQL.
2. Сохраните команду select в скрипт-файле.
3. Загрузите скрипт-файл в редактор.
4. Добавьте команды форматирования
перед командой select.
5. Убедитесь в том, что команда select
заканчивается символом завершения.
Создание скрипт-файла для выполнения отчета
Можно вводить каждую команду zSQL*Pius в ответ на приглашение SQL или поместить все
команды, включая команду SELECT, в командный файл нлн "скрипт-файл Типичный
скрипт-файл включает, по крайней мере, одну команду SELECT и несколько команд
z'SQL*Plus.
Этапы создания скрипт-файла
I. Создай ie команду SELECT языка SQL в ответ на приглашение SQL. Прежде, чем
сохранять команду в файле и применять команды форматирования, убедитесь в точности
данных отче 1 а. Если вы намерены разбить отчет на разделы с помощью команды BREAK,
проверьте наличие соответствующего предложения ORDER BY.
2. Сохраните команду SELECT в скрипт-файле.
3. Отредактируйте скрипт-файл для включения команд zSQL*Plus
4. Добавьте необходимые команды форматирования перед командой SELECT. Пикш да не
размещайте команды zSQL*Plus внутри команды SELECT.
5. Убедшесь в том, что за командой SELECT следует символ выполнения: точка с занято!'!
(;) или (/).
Introduction to Oracle9z: SQL 7-24
Создание скрипт-файла для
выполнения отчета
6. Установите значение по умолчанию для
команд форматирования (сбросьте
установки с использованием параметра
clear) после команды select.
7. Сохраните скрипт-файл.
8. Загрузите скрипт-файл в окно текста
7SQL* *Pius и щелкните на кнопке Execute.
Copyright О Oracle Corporation, 2001. All rights reserved.
Создание скрипт-файла для выполнения отчета (продолжение)
6 Добавьте команды /SQL*Plus, сбрасывающие параметры форматирования, после символа
выполнения. Другой способ - эго вызвать файл сброса (reset file), содержащий все
команды сброса формата.
7. Сохраните измененный скрипт-файл.
8. Загрузите скрипт-файл в окпо текста ZSQL*l’lus и щелкните на кнопке Execute.
Указания
• Между командами /SQL*Plus в скрипie можно вк ночам. пустые строки
• Команды /SQL*Plus или SQL*Plus можно записывать на нескольких строках, используя
дефис (-) в качестве символа продолжения.
• Команды /SQL* Phis в скрипте можно сокращать, используя допустимые сокращения
• В конце файла поместите команды сброса для восстановления исходно!о окружения
/SQL* Plus.
Примечание
Команда REM позволяет вставлять комментарии в ;SQL*Plus
Introduction to Oracle9/: SQL 7-25
Образец отчета с <• ->Q Employee FnSepZO \ 1 Report :•< Jl>b ' r- * ’4 СЖЧЫУ: . IpEmpbjrw paqo 1 •: Salaiy
AC_ACCOUNT ‘Gietz AC_MGR .Higgins AD^ASST jWhalen Tt PROG ;Emsl sHunold $8.ЭХ» 00 112.GOT00 S4.4OOCD Я .000 00 $9,00000
^Lorentz ME_MAN jHartsletn :ME_REP ;Fay $4 200 00 Я 3 non 00 $L .000 00
iSA_MAN -Zlolkey SA_REP Abel $<0.500 00 | ' $11,000 CO
• ;Grant • . . - t -1 T- -T - -- - ~ •» « »- — aa »чч »* - - I» Л .*«M * « 1 , ... J . Confidential • I $7,000 00 | ' $8,600 00
. дд| J У a \4Bt
7-2 6 Copyright © Oracle Corporation, 2001. All rights reserved.
Пример
Создайте скрипт-файл для получения отчета, псрсчисляющс! о должности, фамилии и оклады
всех служащих с окладом менее 15000 долларов. Добавьте двухстрочный центрированный
заголовок Employee Report и центрированный нижний колонтитул Confidential.
Столбцу должностей присвойте заголовок Job Category, написанный на двух строках.
Переименуйте столбец служащих в Employee. Переименуйте столбец окладов в Salary и
отформатируйте в виде $2,500.00.
Introduction to Oracle9/: SQL 7-26
Пример (продолжение)
SET FEEDBACK OFF
TTITLE 'Employee|Repott'
BTITLE 'Confidential'
BREAK ON job_id
COLUMN job_id HEADING ’Job I Category'
COLUMN Last name HEADING 'Employee'
COLUMN salary HEADING 'Salary* FORMA!’
REM Insert SELECT statement
SELECT job_id, last name, salary
tROM employees
WHERE salary < 15000
ORDER BY job id, last_name
REM clear all formatting commands ...
SET FEEDBACK ON
COLUMN job rd CLEAR
COLUMN last name CLEAR
COLUMN salary CLEAR
CLEAR BREAK
$99, 99е'. 99
Introduction to Oracle9f: SQL 7-27
Итоги
• Для временного хранения значений
используются переменные подстановки
/SQL*Plus.
• Для управления текущей средой /SQL*Plus
используется команда set.
• Для управления выводом столбцов
используется команда column.
• Для удаления дубликатов и строк, по которым
производится разбивка отчета, используется
команда break.
• Для вывода заголовков и нижних колонтитулов
используются команды ttitle и btitle.
ORACLE
7-28 Copyright © Oracle Corporation, 2001. All rights reserved.
Итоги
Переменные подстановки полезны для получения интерактивных отчетов. Они обеспечивают
гибкость, замещая значения в предложении WHERE , названия столбцов и выражения. Для
настройки огчетов можно создавать скрипг-файлы, включающие следующее :
• переменные подстановки с одним амперсандом;
• команду DEFINE ;
• команду UNDEFINE ;
• переменные подстановки ь командной строке.
Создать отчет, удобный для чтения, позволяют следующие команды:
• COLUMN
• TTITLE
• BTITLE
• BREAK
Introduction to Oracle9/: SQL 7-28
Обзор практического занятия 7
Создание запроса для вывода значений с помощью
переменных подстановки.
Запуск скрипт-файла, содержащего переменные
подстановки.
Copyright © Oracle Corporation, 2001 All rights reserved
Обзор практического занятия 7
Ila ном занятии вы создаете файлы, коюрые могу) использоваться интерактивно. Для
указания критериев выборки во время выполнения используются переменные подстановки.
Introduction to Oracle9/: SQL 7-29
Практическое занятие 7
Определите, правильны ли следующие утверждения.
1. Следующая команда правильная:
DEFINE & p_val =100
Да/He г
2. Команда DEFINE является командой языка SQL.
Да/Нст
3. Создайте скрипт-файл для вывода фамилий, должностей и дат найма всех служащих,
нанятых в заданный период времени. Соедините фамилию и должное 1ь через запятую и
пробел. Назовите этот выходной столбец EMPLOYEES. В отдельном скрипт-файле
сохраните команды DEFINE для определения границ временного диапазона.
Используйте формат MM/DD/YYYY (месяц, число, год). Присвойте имена скрипт-
файлам 1аЬ7_За, sql и Iab7_3b. sql.
DEFINE low date = 01/01/1998
DEFINE high_date = 01/01/1999
~ hTrEJIATE
15-MAR-98
Matos, ST CLERK..............
Vargas. ST_CLERK [09JUL-98
[faylor, SA.REP ..... . "l24-MAR-$£
4. Напишите скрипi-файл для вывода фамилии служащего, должности и названия отдела.
Поиск по фамилии должен производиться без учета регистра символов. Сохраните
скрипт в файле 1аЬ7_4 . sql.
EMPLOYEE NAME О®ИV./;:. JOBJUJ
jVvhalen .........~...... AD _AS ST......
King :|AD_PRES
Kochhar 1AD_VP
De Haan |AD_VP
Higgins jAC_MGR
Gietz ......... .AC ACCOUNT
DEPARTMENT NAME
Adminishation
[Executive
ir-" ..---------------------
(Executive
I
[Executive
Accounting
Accounting
6 tows selected.
Introduction to Oracle9/: SQL 7-30
Практическое занятие 7 (продолжение)
5. Измените файл 1аЬЗ_4 . sql для получения отчета, включающею название отдела,
фамилию, лату найма, оклад и ежегодный заработок каждою служащего в данном
месте. Пользователь должен указать место в ответ на приглашение. Назовите столбцы
DEPARTMENT NAME, EMPLOYEE NAME, START DATE,SALARY и ANNUAL SALARY
Заголовки должны размещаться па нескольких строках. Сохраните команды в файле
1аЬ7_5. sql.
A DEPARTMENT . employee Ж'"name j. START x v . r < :<x DATE-'» 7Л--. .:?.v . ... •: . SALARY ANNUAL SALARY * • • • K-.
Accounting Higgins 1 37-JUN-94 $12,000 00 $144,000 00
Gietz Jl 37-JUM-94 $8,300.00 $99,600.00
Administration Whalen I7-SEP-87 $4,400 00 $52,800.00
Executive King 17-JUN 87 $24,000 00 $288,000 00
| Kochhar 21-SEP-89 $17,000.00 $204,000.00
«•,|>«м»»-.г ***•*•# « »» «ода ••••» *•«««« « о да » De Haan 13-JAN-93 $17,0U0 00 i $204,000 00
Introduction to Oracle9/: SQL 7-31
Introduction to Oracle9<: SQL 7-32
Манипулирование данными
ORACL.G
Copyright © Oracle Corporation, 2001. All rights reserved.
Рассматриваемые вопросы
• Описание команд DML
• Вставка строк в таблицы
• Обновление строк в таблице
• Удаление строк из таблицы
• Слияние строк
• Управление транзакциями
8-2
Copyright © Oracle Corporation, 2001 All rights reserved
Цели урока
В этом уроке вы научитесь вставлять строки в таблицу, обновлять существующие строки в
таблице и удалять существующие строки из таблицы. Вы научитесь также управлять
транзакциями с помощью команд COMMIT, SAVEPOINT и ROLLBACK.
Introduction to Oracle9/: SQL 8-2
Язык манипулирования данными (DML)
Команды DML выполняются при следующих
операциях:
- Вставка новых строк в таблицу
- Изменение существующих строк в таблице
- Удаление существующих строк из таблицы
Транзакция - это совокупность команд DML
образующих логическую единицу работы.
ORACLE
Copyright © Oracle Corporation, 2001. All rights reserved.
Язык манипулирования данными (DML)
Язык манипулирования данными (DML) - это основа языка SQL. Если пользователь желает
вставить, обновить или удалить данные в базе данных, он выполняет команду DML.
Совокупность команд DML, образующих лот ичсскую единицу работы, называется
транзакцией.
Рассмотрим банковскую базу данных. Если клиент банка переводи г дсны и со сберегательного
счета на счет до востребования, транзакция может состоять из трех от дельных операций:
уменьшение суммы сберегательного счета, увеличение суммы счета до востребования и запись
транзакции в журнале транзакций Сервер Oracle должен гарантировать выполнение всех трех
операций для сохранения баланса счетов. Если что-либо препятствует выполнению одной из
команд в транзакции, результаты уже выполненных команд транзакции отменяются.
Introduction to Oracled/: SQL 8-3
Вставка новой строки в таблицу
100
DEPARTMENTS
170П Новая
строка
DEPARTMENTjD J I DEPART ME NT_NAME [[«ANAGERJD .[LOCATION JD
10 Administration ’ 200 T 17iTi *“"'l800
M Aik eting 201
50 Shipping j 24 • 1500
60 IT 103 1400
80 Sales 14Q 2500
c<3 Executive 100 1700
110 Accounting 205 ; 1700
TO Contracting 1700
...вставка новой
строки в таблицу
DEPARMENTS...
ID • 1Я РЛР1МП1Г HAMF MANAGER ID [lOCATIGN ID
10 Administration 200 | 1700
20 Marketing 201 [ 1600
50 Shipping 124 | 1500
60 IT • юз 1400
80 Sales 149 2500
90 Executive 100 f VCC
110 Accounting ' : ' 205 [ 17013
190 Contracting 1 1700
70 Public Relations 103 1700
ORACLe
8-4
Copyright Ф Oracle Corporation, 2001. All rights reserved.
Вставка новой строки в таблицу
На слайде показано включение нового отдела в таблицу DEPARTMENTS.
Introduction to Oracle9z: SQL 8-4
Синтаксис команды insert
* Для вставки новых строк в таблицу
используется команда insert
INSERT INTO таблица [(столбец [, столбец...])]
VALUES (значение [, значение...]) ;
• Этот синтаксис позволяет вставлять в таблицу
только по одной строке
OPACL.G
8-5 Copyright © Oracle Corporation, 2001. All rights reserved.
Вставка новой строки в таблицу (продолжение)
Вставшь новые строки в таблицу можно с помощью команды INSERT.
Синтаксис:
таблица имя таблицы
столбец имена столбцов таблицы, в которые вносятся значения
зиа чение соответствующее значение столбца
Примечание
Команда INSERT с предложением VALUES позволяет вставлять в таблицу только по одной
с 1 роке.
Introduction to Oracle9z: SQL 8-5
Вставка новых строк
• Вставка новой строки, содержащей значения
для каждого из столбцов.
• Значения указываются в стандартном порядке
столбцов таблицы (используемом по
умолчанию).
• Перечисление столбцов в предложении INSERT
необязательно.
к
INSERT INTO departments(department_id, department_name, I
VALUES (70, 'Public Relations', 100, 1700); I
1 row created. I
• Символьные значения и даты заключаются в
апострофы.
or?ACLe
8-6 Copyright © Oracle Corporation, 2001. АП rights reserved.
Вставка новой строки в таблицу (продолжение)
Если вставляемая строка содержит значения для всех столбцов, то перечисление столбцов в
пред южении INSERT необязательно. Следует, однако, помнить о том, что последовательность
самих значений должна соответствовав последовательности столбцов в этой таблице.
DESCRIBE departments
т,; : С- Наше [ Туре ':-
[[ЬеРАРТМЕнГю HiWNULL ........[NUMBER(4)"
• [DEPARTMENT NAME jCl ОТ NULL |VARCHAR2(30)
j -----ri-.----------m-1-, - --,-1~1-1~ ~П|-1J---Л - --l~LTl-‘J--- , .Д • w.* *»..** *»*****»****-•••••••• aa«A.a a >a aa a ««>a>>.a a aa•««« «вамa ** -....-.-a
jiMANAGERJD ij NUMBER(6)
[LOCATIONJD • [NUMBER^
Для ясности лучше указывать список столбцов в команде INSERT.
Символьные значения и даты обрамляются апострофами; числовые значения в апострофы нс
заключаются, так как при этом будет выполнят ься неявное преобразование в тип данных
NUMBER.
Introduction to Oracle97: SQL 8-6
<4
Вставка строк с неопределенными
значениями
Неявный метод: столбец не указывается в
списке столбцов.
INSERT INTO departments (department_id,
department_name | ] | |)
VALUES (30, 'Purchasing');
1 row created.
Явный метод: использование ключевого слова
NULL В списке VALUES.
INSERT INTO departments
VALUES (100, ' Finance' , | NULjJ, I NULL)
J ' t I
row created.
ORACLE
Copyright © Oracle Corporation, 2001. AH rights reserved.
Методы вставки неопределенных значений
Метод Описание
Неявный Исключение столбца из списка вставляемых столбцов
Явный Задание ключевого слова NULL в списке VALUES. Задание пустой строки (' ' ) в списке VALUES; только для символьных значений и дат .
Убедитесь в том, что принимающий столбец допускает неопределенные значения. Для этого
проверьте статус Null? с помощью команды DESCRIBE zSQL*Plus.
Сервер Oracle автоматически проверяет все типы данных, диапазоны данных и соблюдение
правил целостности данных. Столбец, нс заданный явно, получает в новой строке
неопределенное значение.
Распространенные ошибки, которые могут возникнуть при вводе пользовательских данных:
• Опущено обязательное значение для столбца с ограничением NOT NULL.
• Дублирующее значение нарушает ограничение уникально! о ключа.
• Нарушение ограничения внешнего ключа.
Нарушение ограничения CHECK.
Несовпадение типа данных столбца таблицы и вставляемого значения.
• Вставляемое значение не помещас1ся по ширине столбца.
Introduction to Oracle9Z: SQL 8-7
Вставка специальных значений
Функция sysdate записывает текущие дату и
время.
INSERT INTO employees (employee_id,
first_name, last_name,
email, phone_number,
hire_date, job_id, salary,
commission_pct, manager__id,
department id)
VALUES (113,
'Louis', 1 Popp1,
JLPOPP', '515.124.4567',
ISYSDATE,, 'AC_ACCOUNT’, 6900,
NULL, 205, 100);
1 row created.
oPAcue
8-3 Copyright © Oracle Corporation, 2001. All rights reserved.
Вставка специальных значений с помощью функций SQL
Для вставки специальных значений в таблицу можно использован, функции.
В примере на слайде в таблицу EMPLOYEES заносится информация о служащем по фамилии
Поп (Рорр). В столбец HIRE DATE заносятся текущая дата и время. Для получения текущей
даты и времени используется функция SYSDATE.
При вставке строк в таблицу можно использовать и функцию USER . Она записывает гскущее
имя пользователя (username).
Проверка вставок в таблицу
SELECT employee_id, last_name,
FROM employees
WHERE employee_id - 113;
job id,
hire_date,
commission pct
EMPLOYEE ID . LAST NAME ’ JOB ID HIRE DATE r COMMISSION PCT
. ч 4й*-. ?****“
113|Рорр ~|aFaCCOUNT [27JSEP-0i "'I
Introduction to Oracle9/: SQL 8-8
Вставка конкретных значении даты и
времени
Добавление нового служащего
INSERT INTO employees
VALUES (114,
’Den1 , 1Raphealy1,
’DRAPHEAL', '515.127.4561',
AVsWAV V .---.v • .'.,4s\AkV'.wr,VrtVA\Vv.V ',AV.M,/A»AV. A»vV.‘«'»AVKVA»**.' • VbV\* .% .4*44 .4 ,'»\V 4
TO DATE('FEB 3, 1999', 'MON DD, YYYY•)
v>****** *V»¥Л/ •**•*•*• M*A' V VWAVM,WAV<V 'рАМА^'Л -.4-• WASVAS'.-AK-.-AAW.KMAAVSVAIAVA'^.V .•Л*ЧЧ**ЛА*А«*»*-*Л< 1 *•* .vS* <АЧ'А".Мч*М,<ч*’1
'AC_ACCOUNT’, 11000, NULL, 100, 30);
1 row created.
jTO_DATE('FEB 3
• Проверка вставки
EMPLOYEEJD FIRST.NAME LA$T_MАМЕ [ EMAIL fHONEJIUMBER HIRE.OATE \ JOBJD
йРТеШ '[ac at couni i iouo Г
114 Den
Raphealy DRAPHEAL 615 127 4561
[SALARY [COMMISSION Р
ORACLG
Copyright © Oracle Corporation, 2001. All rights reserved
Вставка конкретных значений даты и времени
Для вставки даты обычно используется формат DD-MON-YY (число-месяц-год). Напомним,
что в этом формате стандартным значением для столетия считается текущее столетие.
Поскольку дата содержи! и информацию о времени, стандартным значением времени
является полночь (00.00:00).
Если необходимо ввести дату в формате, отличном от формата по умолчанию, например,
дату из другого столетня, и/или при этом требуется ввести время, можно использовать
функцию TO_DATE.
Пример па слайде пока бывает включение в таблицу EMPLOYEES служащс! о но фамилии
Raphealy. Для столбца HIRE_DATE задано значение 3 февраля 1999 i. При использовании
следующей команды, вместо приведенной на слайде, год в hire_date будет 2099
INSERT INTO employees
VALUES (114,
'Den', 'Raphealy',
'DRAPHEAL', '515.127.4561',
'03-FEB-99',
'AC_ACCOUNT', 11000, NULL, 100, 30);
Когда используется формаi RR, система автоматически устанавливает правильный век,
даже если столетие не является текущим.
Introduction to Oracle9r: SQL 8-9
Создание скрипт-файла
• Используйте в команде SQL переменные
подстановки с одним амперсандом (&) для
ввода запрашиваемых у пользователя значений.
♦ Амперсанд (&) показывает, куда вставляется
значение переменной.
INSERT INTO departments
(deparLment__id, department__name, location id)
V7LLUES (Sdepartment_id, ’^department name*,^location);
Derm** SutsPP/ jn v
’department id" [до
"department name” |нип»<*п Resources
’location’ |?5Л0
Suhmrt for Mon Cancel
1 row created.
QPAcue
8-10 Copyright © Oracle Corporation, 2001. All nghts reserved
Создание скрипт-файла для манипулирования данными
Команды с переменными подстановки можно сохранить в файле для последующе! о
использования. Пример на слайде показывает включение в таблицу DEPARTMENTS информации
об отделе.
После запуска скрипт-файла пользователю выдастся приглашение на ввод значений переменных
подстановки с одним амперсандом. Вводимые значения подставляются в команду. Этот скрип-
файл может быть выполнен неоднократно, и при каждом его выполнении могут быт ь введены
различные значения.
Introduction to Oracle9/: SQL 8-10
Копирование строк из другой таблицы
• Команда insert должна включать подзапрос.
INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, conunission_pctj
FROM employees
WHERE job_id LIKE '%REP%';
4 rows created.
• Предложение VALUES не используется.
• Количество столбцов, указанных в
предложении INSERT, должно совпадать с
количеством столбцов в подзапросе.
ORACLE
8-11 Copyright © Oracle Corporation, 2001. All rights reserved.
Копирование строк из другой таблицы
Для вставки строк в таблицу с помощью команды INSERT можно использовать значения из
другой таблицы. Для этого вместо предложения VALUES используется подзапрос.
Синтаксис
INSERT INTO таблица [ столбец (, столбец) ] подзапрос;
где: таблица
столбец
подзапрос
имя таблицы
имя столбца в таблице, значение которого необходимо ввести
подзапрос, возвращающий строки для таблицы
Количество столбцов и типы данных в списке столбцов в команде INSERT должны совпадать с
количеством значений и соответствующими типами данных в подзапросе. Чтобы скопировать
строки в таблицу, используйте в подзапросе предложение SELECT * :
INSERT INTO copy_emp
SELECT *
FROM employees;
Болес подробную информацию см. в руководстве Oracle9i SQL Reference, “SELECT,” секция
“Subqueries”.
Introduction to Oracle97: SQL 8-11
Изменение данных в таблице
EMPLOYEES
CMPLOYtt ID MRS1 HAML LASl NAME 1 LUAIl [niRL„t)AIL J Ш ID SALARY (Dtp AH IMLHI ID L.OMMISSH H I-
100 Steven iking" fSKlNC~ [17-JUNB7 ""[aD^PRES" 7 24000 [ 90 Г
101 Neena Kochhai N1 UtHHAR [21-SEP-89 AD_VP 17000 | QO
102 Г" ——" — Lex De Haan 1LDEHAAN 13JAM93 AD_VP * 17000 ’ 90
i 103 ; ~ 104 j 107 .Alexander Bruce t ......... ; Dtana .Hunold Ernst Lorentz Iahunold BERNST DLORENTZ 03-JAN-90 ilTPROG 2 FmAY-91 n_PP0G~ 07ТЕВ-9Э ITPROG Г 9000 [ ’ 6000 4200 60 60 eo
124 Revin Mourgos 1- MOURGOS [l6 NOV-9? ;ST_MAN 5800 50 :
Изменить строки в таблице employees.
FMriOVFF H) FIRST MAMF Лев 1 AST_NAMI- F EMAII HIRE DAT F SAI ДЯУ|ШР/ИиМГН1 Ю COMMISSK)
100 jSleven •Hing SKING 17-JUN 67 AD-PRES i 240U0 90
101 Neena Kochhar NKOCHHAR 21-SEP-69 AD_VP 1 17ССЮ 90
102 Lex De Haan Ldehaan 13 JAN 93 •AC» VP 171ХЮ 90
103 Alexander ’Hunold iAHLINOLD 03-JAN 90 h PROG 9000 | .30
104 Bruce Ernst :jBERNST 21 MAY-91 ITPROG Г 6000 ( 30
107 Diana iLoienlz DLORENTZ 07ТЕВ-9П IT_PROG 4200 j 30
124 Kevin Mourgos • 'kMOURGOS 16-NOV-99 ST_MAN 5800 | 60 •
Изменение данных в таблице
В примере на слайде номер отдела для всех служащих отдела 60 меняется на 30.
Introduction to Oracle9/: SQL 8-12
Синтаксис команды update
• Для обновления существующих строк
используется команда update
UPDATE таблица
SET столбец = значение [, столбец = значение, ...]
[WHERE условие];
• В случае необходимости можно одновременно
обновлять несколько строк
8-13
Copyright © Oracle Corporation, 2001. All rights reserved.
Обновление строк
Изменять существующие с i роки можно с помощью команды UPDATE.
Синтаксис:
таблица имя таблицы
столбец имя обновляемого столбца таблицы
значение соответствующее значение или подзапрос для столбца
условие показывает, какие строки должны бьпь изменены; состоит из имен
столбцов, выражений, констант, подзапросов и операторов сравнения.
Проверьте результаты обновления таблицы путем выборки измененных cipoK.
Более подробную информацию см. в руководстве Orade9i SQL Reference, “UPDATE.”
Примечание
Обычно для идентификации отдельной строки используется главный ключ. Использование с
этой целью других столбцов может привести к неожиданному обновлению нескольких cipoK
вместо одной. Например, в таблице EMPLOYEES опасно распознавать строки по именам
служащих, т.к. они могут повторяться.
Introduction to Oracle9i: SQL 8-13
Обновление строк в таблице: пример
Предложение where позволяет изменить
конкретную строку или строки.
UPDATE employees
SET department id
70
1 row updated.
• Если предложение where отсутствует,
обновляются все строки таблицы.
UPDATE copy emp
SET department_id = 110;
22 rows updated.
ORACLE*
8-14 Copyright © Oracle Corporation. 2001. All rights reserved.
Обновление строк (продолжение)
Если задано предложение WHERE , то команда UPDATE изменяет конкретную строку или
строки. В вышеуказанном примере служащий под номером 113 (Рорр) переводится в отдел
70.
Если предложение WHERE отсу1ствусг, в таблице изменяются все строки
SELECT last_name, department id
FROM copy emp;
LAST NAME
DEPARTMENT ID
|king
j Kochhar
De Haan
Hunold
Ernst
Lorentz
22 rows selected
Примечание
Таблица COPY EMP содержит такие же
мн» । с, как таблица EMPLOYEES.
110
110
110
110
110
110
Introduction to Oracled/: SQL 8~14
Обновление двух столбцов с помощью
подзапроса
Изменение должности и оклада служащего под
номером 114, чтобы они стали такими же, как у
служащего под номером 205.
OPACLG'
8-15 Copyright © Oracle Corporation, 2001. All rights reserved.
Обновление двух столбцов с помощью подзапроса
Подзапросы можно использовать в предложении SET команды UPDATE для изменения
нескольких столбцов.
Синтаксис
UPDATE
SET
таблица
столбец
столбец
[WHERE условие
(SELECT столбец
FROM та блица
WHERE условие)
(SELECT столбец
FROM таблица
WHERE условие)]
f
Примечание
Если не было изменено ни одной строки, выдасюя сообщение “0 rows updated.”.
Introduction to Oracled/: SQL 8-15
Обновление строк на основе значений из другой таблицы
Для обновления строк таблицы можно использован, подзапросы в команде UPDATE. В
примере на слайде таблица COPY_EMP обновляется на основе значений из таблицы
EMPLOYEES. Номер отдела всех служащих, имеющих закую же должность, как служащий иод
номером 200, меняется на текущий номер отдела служащего номер 100.
Introduction to Oracle9/: SQL 8-16
4
Обновление строк: нарушение правила
целостности данных
UPDATE employees
SET department_id = 55
WHERE department_id = 110;
UPDATE employees
ERROR at line 1:
ORA-02291: integrity constraint (HR. EMP_DEPT_FK)
violated - parent key not found
Отдел номер 55 не существует
ORACL.G*
Copyright © Oracle Corporation, 2001. All rights reserved.
Нарушение правила целостности данных
Если вы пытаетесь обновить запись и новое значение столбца противоречит ограничению,
выдается сообщение об ошибке.
В примере на слайде отдела номер 55 в родительской таблице DEPARTMENTS не существует,
поэтому выдается сообщение о несуществующем родительском ключе (parent key violation
ORA-02291).
Примечание
Правила целостност и данных обеспечивают соответствие данных определенному набору
условий. В одном из следующих уроков правила целостности обсуждаются более подробно.
Introduction to Oracle9Z: SQL 8-17
Удаление строки из таблицы
DEPARTMENTS
DEPARTUtBTJD dfpartmeht.name ' 'managfhjd Administration aW [
10
20 lZZZZ 30 . Marketing Pin chasing 201 J
k кип.ч 1QC Finance
50 Shipping j 124 :
i 4 . . eo (it i . a<a a « a* a а»a • а aa.>.abaaa*«a«».* nooV^ooooaia«aaaa->- aa.aa»aa<a«a>aa->« «aaS«a a.aaaiaa,.aaara..aaaaaaa a a-.. , •>a,seD><aa*aaoaaa •aidDooaaaotie o=^-ooo=ooeoooaaouoa»iaaa«aoo 103
LOCATION ID
...........1700 J
ieno =
1600
1400
Удаление строки из таблицы departments
DfPARTMFNT ID
Ш PARTMtNTJIAMF 10 Administiation 20 .M-»iket<ng X Purchasing 50 ^Shipping 60 11Т MANAGF ЯШ ”20d" 20f юз I0CATION 10 i'ztti a - - . * a a. aa a o*oaeea—a^ 1Г-00 I'.OJ 14(jn
8-18
Copyright €> Oracle Corporation, 2001. All rights reserved.
Удаление строки из таблицы
В примере на слайде из габлицы DEPARTMENTS удаляется отдел Finance (при условии, что
для таблицы DEPARTMENTS нет никаких ограничений).
Introduction to Огас1е9г SQL 8-18
Команда delete
Для удаления строк используется команда delete.
DELETE [FROM] таблица
[WHERE условие];
ORACue
8-19
Copyright О Oracle Corporation, 2001. All rights reserved.
Удаление строк
Удалить существующие строки можно с помощью команды DELETE.
Синтаксис:
та блица
условие
имя таблицы
определяет строки, которые должны быть удалены; состоит из имен
столбцов, выражений, констант, подзапросов и операторов сравнения
Примечание
Если ни одна строка нс была удалена, выдастся сообщение “0 rows deleted.”
Более подробную информацию см. в руководсюе Oracle9iSQL Reference, “DELETE.”
Introduction to Oracled/: SQL 8-19
Удаление строк из таблицы: пример
• Конкретная строка или строки удаляются с
помощью предложения where.
DELETE FROM departments
WHERE department_name = 1 Finance';
1 row deleted.
• Если предложение where отсутствует,
удаляются все строки таблицы.
ORACLe
8-20 Copyright © Oracle Corporation, 2001. All rights reserved
Удаление строк (продолжение)
Удалить из таблицы конкретную строку или строки можно с помощью предложения WHERE в
команде DELETE. В примере на слайде из таблицы DEPARTMENTS удаляется отдел Finance.
Проверить результаты операции удаления можно путем выборки строк по команде SELECT.
SELECT *
FROM departments
WHERE department_name = 'Finance';
no rows selected.
Если предложение WHERE отсутствует, удаляются все строки таблицы Во примере на слайде
удаляются вес строки из таблицы COPY _ЕМР, так как предложение WHERE не указано
При мер
Удаление орок, заданных в предложении WHERE
DELETE FROM employees
WHERE
employee_id = 114;
1 row deleted.
DELETE FROM departments
WHERE
department_id IN (30, 40);
2 rows deleted.
Introduction to Oracle9/: SQL 8-20
Удаление строк на основе значений из
другой таблицы
Для удаления строк на основе значений из другой
таблицы используйте подзапросы в командах
DELETE_______________________________________________________________
DELETE FROM employees
WHERE department_id » , ... ..................................
S (SELECT department—id
| FROM departments |
| WHERE department—name LIKE *%Public%’J. ;
1« «• Д « V v АЛ1 ».W.' VV.'.-ЛЧ-. VS .«‘.V'.WAW SS"-S-.-,Ws У V S'-* ЧЧХ ка.-д.ч-.чча.чаА^'.' aSA--’
row deleted.
oPACue
8-21 Copyright © Oracle Corporation, 2001. All rights reserved.
Удаление строк на основе значений из другой таблицы
Для удаления строк таблицы на основе значений из другой таблицы можно использовать
подзапросы. В вышеуказанном примере удаляются все служащие отдела, в наименовании
которого имеется строка “Public.” Сначала подзапрос просмазривает таблицу DEPARTMENTS
для выяснения номера отдела, имя которого содержит строку “Public.” Затем номер отдела
передается в главный запрос, который удаляет данные из таблицы EMPLOYEES в зависимости
от полученного номера отдела.
Introduction to Oracle9/: SQL 8-21
Удаление строк: нарушение правила
целостности
DELETE FROM departments
WHERE department_id = 60;
DELETE FROM departments
ERROR at line 1:
ORA-02292: integrity constraint (HR. EMP_DEPT_FK)
violated - child record found
Нельзя удалить строку, содержащую
первичный ключ, на который есть ссылка из
внешнего ключа другой таблицы.
ORACLE*
8’22 Copyright О Oracle Corporation. 2001. All rights reserved.
Нарушение правила целостности
Попытка удалить запись с значением, к которому применяется правило tfcметкости,
вызывает ошибку.
В примере делается попытка удалить отдел номер 60 из таблицы DEPARTMENTS, но возникает
ошибка из-за того, что номер отдела используется в качестве внешнего ключа в таблице
EMPLOYEES. При попытке удалить запись, имеющую подчиненные записи, выдастся
сообщение об ошибке: “ child record found ORA-02292”
Следующая команда нс нс приведет к появлению ошибки, так как в отделе 70 нет сотрудников:
DELETE FROM departments
WHERE department_id - 70;
1 row deleted.
Introduction to Oracle97: SQL 8-22
Использование подзапроса в команде
INSERT
INSERT INTO
(SELECT employee_id, last_name,
email, hire_date, job_id, salary,
department_id
FROM employees
WHERE department_id = 50)
VALUES (99999, 'Taylor', 'DTAYLOR',
TO_DATE('07-JUN-99', 'DD-MON-RR'),
'ST_CLERK', 5000, 50);
1 row created.
ORACLE’
8-23 Copyright €> Oracle Corporation. 2001 All rights reserved.
Использование подзапроса в команде insert
В команде INSERT можно использовать подзапрос вместо имени таблицы в предложении
INTO.
Выбираемый список в подзапросе должен содержать закое же количество столбцов, что и в
предложении VALUES. Чтобы команда INSERT правильно проработала, нс должны
нарушайся правила, установленные для столбцов базовой таблицы. Например, нельзя ввеези
дублирующее значение номера сотрудника (EMPLOYEE_ID), а также не указать значение для
обязательного столбца с oi раничением NOT NULL.
Introduction to Oracle9i: SQL 8-23
Использование подзапроса в команде
INSERT
SELECT employee_id, last_name, email, hire date,
job_id, salary, department_id
FROM employees
WHERE department_id = 50;
I „EMPLOYttJO > им... » W—» w [last. NAME 4 IHR^DATE JOO ID fTOARTWtS^iO ;•
I 124 •Mourgos KMOURGOS Ж NQV-99 SIDMAN 1 5600 Г 50'
1 141 :Rajs TRAJS i 17-OCT-95 ST C LERI 3rOO 1 5П
| 14? jOavies CDAVIES J29 JAN-97 ’ ST CLERK ”] зко ’[ " Vi
1 143 Matos RMATOS HlSMAR-98 |ST_CLEPk ". L~ " { 50
| 144 .Vargas PVARGAS W-JUL-90 STCLERL 29X1 50
УС<99 iTaytor_____________JDTAYLQR li?-J!JN-99 iST_CLEPI' 5ftXl
6 rows selected
or?Acue
8-24
Copyright © Oracle Corporation. 2001. All rights reserved
Использование подзапроса в команде insert
В приведенном примере показан результат подзапроса, который используется, чтобы
определить таблицу для команды INSERT.
Introduction to Oracle9z: SQL 8-24
Использование параметра with check
option в командах DML
• Подзапрос определяет таблицу и столбцы для
команды DML.
• Параметр with check option препятствует
внесению изменений в строки, не
удовлетворяющие условиям подзапроса.
INSERT INTO (SELECT employee_id, last_name, email,
hire_date, job_id, salary
FROM employees
WHERE department_id = 50 WITH CHECK OPTION)
VALUES (99998, 'Smith', 'JSMITH',
TO_DATE('07-JUN-99', 'DD-MON-RR'),
•ST_CLERK', 5000);
INSERT INTO
ERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation
Параметр with check option
Задавайте параметр WITH CHECK OPTION, когда подзапрос используется вместо таблицы в
командах INSERT, UPDATE или DELETE. При этом запрещены такие изменения в строках
таблицы, которые нарушают условия подзапроса.
В приведенном примере используется параметр WITH CHECK OPTION. Подзапрос определяет
строки, относящиеся к отделу 50, но номер отдела не входит в список SELECT и значение для
номера отдела не включено в предложение VALUES. При вводе этой строки делается попытка
вставить неопределенное значение в столбец department_ID, которое не входит в
подзапрос.
Introduction to Oracle9/: SQL 8-25
Значения, установленные по
умолчанию
• При использовании значений по умолчанию,
можно задавать ключевое слово default в
качестве значения столбца на которое нужно
его изменить.
• Добавление этих возможностей соответствует
стандарту SQL: 1999 .
• Пользователю предоставляется возможность
контроля того, где и когда следует
использовать значение по умолчанию.
• Явные установки по умолчанию могут
использоваться в командах insert и update.
ORACLE
8-26 Copyright © Oracle Corporation, 2001. All nghts reserved
Явные характеристики no умолчанию
Ключевое слово DEFAULT можс1 бып> использовано в командах INSERT и UPDATE для
определения по умолчанию значения столбца. Если значение по умолчанию не установлено,
применяется неопределенное значение.
Introduction to Oracle9/: SQL 8-26
Использование значений по умолчанию
• default в команде insert:
INSERT INTO departments
(department_id, department_name, manager_id)
VALUES (300, 'Engineering', DEFAULT);
• default в команде update:
UPDATE departments
SET manager_id = DEFAULT WHERE department_id = 10
ORACLe
8-27 Copyright © Oracle Corporation, 2001. All nghts reserved.
Использование значений явных характеристик по умолчанию
Ключевое слово DEFAULT используется для задания значения, которое было раннее
определено в качестве значения по умолчанию для столбца. Если значение по умолчанию не
определено для соответствующего столбца, Oracle устанавливает неопределенное значение.
В первом приведенном примере в команде INSERT используется значение по умолчанию для
столбца MANAGER_ID. Если значение по умолчанию не определено для этого столбца, будет
введено неопределенное значение.
Во втором приведенном примере используется команда UPDATE для изменения значения
столбца MANAGER_ID в строках отдела 10 на значение по умолчанию. Если значение по
умолчанию нс определено для этого столбца, при изменение будут использованы
неопределенные значения.
Примечание
При создании таблицы можно определить значение по умолчанию для столбца. Это
рассматривается в урокс “Создание таблиц и управление ими”.
Introduction to Oracle9z: SQL 8-27
Команда merge
• Предоставляет возможность при
определенных условиях изменять или
вставлять данные в таблицу базы данных.
• Выполняет изменение (update) , если строка
существует и вставку (insert) для новой
строки.
- Позволяет избежать внесения отдельных
изменений.
- Повышает производительность и упрощает
использование.
- Эффективна для приложений, работающих с
хранилищами данных.
OPACL.G
8-28 Copyright О Oracle Corporation, 2001. All nghts reserved.
Команда merge
В язык SQL добавлена команда MERGE. Использование эюй команды позволяет изменять или
вставлять строку при определенных условиях, что позволяет избежать применения нескольких
команд UPDATE. Решение об изменении или вставке в целевую таблицу основывается на
условии в предложении ON.
Так как команда MERGE объединяет команды INSERT и UPDATE, пользователю необходимы
привилегии INSERT и UPDATE для целевой таблицы и привило! ия SELECT для исходной
таблицы.
Команда MERGE обеспечивает определенность выполнения. Вы нс можете при помощи одной
и той же команды MERGE изменить несколько раз одну и ту же строку в целевой таблице.
Противоположный! подход состоит в использовании циклов на языке PL/SQL и нескольких
команд DML. В то же время команда MERGE - это одна команда SQL, которая удобна в
использовании и имеет более простой вид.
Команда MERGE подходит для приложений, работающих с хранилищами данных. Например, в
таких приложениях вам может понадобиться обработка данных, поступающих из мио! их
источников, некоторые из которых повторяются. С помощью команды MERGE вы можете
добавлять и изменять строки при определенных условиях.
Introduction to Oracle9/: SQL 8-28
Синтаксис команды merge
Команда merge позволяет вставлять или изменять
строки при определенных условиях
MERGE INTO имя_та блицы псевдоним таблицы
USING (таблица|представление|подзапрос) псевдоним
ON (условие_соединения)
WHEN MATCHED THEN
UPDATE SET
столбец! = значение_столбца1,
столбец! = значение_столбца!
WHEN NOT MATCHED THEN
INSERT (список_столбцов)
VALUES (список_столбцов);
8-29 Copyright C Oracle Corporation. 2001. All rights reserved.
Слияние строк
Изменить или вставить новые сiроки при определенных условиях можно, используя команду
MERGE.
Синтаксис:
предложение INTO
предложение USING
предложение ON
WHEN MATCHED |
WHEN NOT MATCHED
определяет целевую таблицу, в которую производится вставка
или изменение
определяет источники данных, которые используются для
изменения или вставки; это может бып> таблица,
представление или подзапрос
условие, определяющее действие (изменение или вс1авка),
которое выполняется но команде MERGE
указыващ серверу, как реагировать на результаты условия
соединения
Дополнительную информацию см. в 0racle9i SQL Reference, “MERGE.”
Introduction to Oracle9r: SQL 8-29
Слияние строк
Вставка или изменение строк таблицы copy_emp
для установления соответствия с значениями
таблицы EMPLOYEES
OPACL&
8-30 Copyright © Oracle Corporation, 2001. All rights reserved.
Пример слияния строк
MERGE INTO copy_emp c
USING employees e
ON (c.employee_id = e.employee_id)
WHEN MATCHED THEN
UPDATE SET
c.first_name = e.first_name,
c.last_name = e.last_name,
c.email = e.email,
c.phone_number = e.phone_number,
c.hire_date = e.hire_date,
c.job_id - e.job_id,
c.salary = e.salary,
c.commission_pct = e.commission_pct,
c.manager_id = e .manager__id,
c.department_id = e,department_id
WHEN NOT MATCHED THEN
INSERT VALUES(e.employee_id, e.first_name, e.last_name,
e.email, e.phone_number, e.hire_date, e.job_id,
e.salary, e.commission_pct, e.manager_id,
e.department id);
В примере сравнивается столбец EMPLOYEE_ID из таблицы COPY EMP с столбцом
EMPLOYEE_ID из таблицы EMPLOYEES. Если столбцы равны, строка в таблице COPY_EMP
изменяется так, чтобы сотвсгсгвоваж строке в таблице EMPLOYEES. В противном случае
строка из таблицы EMPLOYEES вс1авлясгся в таблицу COPY_EMP.
Introduction to Oracle9/: SQL 8-30
i
Copyright © Oracle Corporation, 2001. AH rights reserved.
8’31
f
Пример слияния строк
В примере на слайде обрабатывается условие с. employee_id - е . employee_id. Так как
таблица C0PY_EMP нс заполнена, условие возвращает значение ложно (false), те. нет
соответствий. Выполняется предложение WHEN NOT MATCHED и по команде MERGE
вставляются строки из таблицы EMPLOYEES в таблицу COPY_EMP.
Если существуют строки в таблице COPY_EMP и номер служащего (employee_id) совпадает
в обоих таблицах (COPY_EMP и EMPLOYEES), существующие строки таблицы COPY ЕМР
изменяются так, чтобы соответствовать строкам таблицы EMPLOYEES.
Introduction to Oracle9/: SQL 8-31
i
Транзакции базы данных
Содержат что-либо из следующего:
* Команды DML, выполняющие единое
согласованное изменение данных.
• Одну команду DDL.
• Одну команду DCL.
8-32
Copyright С> Oracle Corporation, 2001. All rights reserved
Транзакции базы данных
Сервер Oracle обеспечивает согласованность данных на основе транзакций. Транзакции
обеспечивают большую гибкость, более широкий спектр средств управления при изменении
данных, а также согласованность данных в случае ошибки в пользовательском процессе или
сбоя системы.
Транзакции состоят из команд DML, составляющих одно согласованное и вменение данных.
Например, перевод денег со счета на счет предпола! асг дебетование одною счсш и
кредитование другого на одну и гу же сумму. Успешными или неудачными должны быть оба
действия. Кредитование нс должно иметь мест без дебетования
Тилы транзакций
Тип Описание
Язык манипулирования данных (DML) Состоит из любого количества команд DML, рассматриваемых cqincpoM Oracle как единая Л01 ичсская единица работы 7 (Р777.7.
Язык описания данных (DDL) Состоит из единственной команды DDL
Язык управления данных (DCL) Состоит из единственной команды DCL
Introduction to Oracle9/: SQL 8-32
<
Транзакции базы данных
* Начинаются с выполнения первой
исполняемой команды SQL
• Заканчиваются одним из следующих событий:
- Выполнение команды commit или rollback
- Выполнение команды DDL или DCL
(автоматическая фиксация транзакции)
- Пользователь выходит из /SQL* *Plus
- Отказы системы
ORACLE
8-33 Copyright © Oracle Corporation. 2001. Ail rights reserved.
Когда начинается и кончается транзакция?
Транзакция начинается с первой исполняемой команды SQL и заканчивается, koi да
свершается одно из следующих событий:
• команда COMMIT или ROLLBACK;
• команда DDL, например, CREATE;
• команда DCL;
• пользователь выходит из /SQL*Plus;
• отказы системы.
Koi да одна транзакция завершена, следующая исполняемая команда SQL автоматически
начинает следующую транзакцию.
Результаты выполнения команды DDL или DCL фиксируются авгоматчески. Следовательно,
эти команды неявно завершают транзакцию.
Introduction to Oracled/: SQL 8-33
Преимущества команд commit и
ROLLBACK
• Обеспечивают согласованность данных.
• Позволяют проверить изменения в данных
прежде, чем сделать их постоянными.
• Логически группируют взаимосвязанные
операции.
OPACL&
8-34 Copyright О Oracle Corporation, 2001. All nghts reserved
Introduction to Oracle9/: SQL 8-34
Управление транзакциями
Время COMMIT
Транзакция
Точка
сохранения А -•
идатЕ,:
Точка
сох
ROLLBACK(откат) ROLLBACK(откат)
к точке В к точке А
ROLLBACK
(откат)
ORACLe
8-35
Copyright © Oracle Corporation, 2001. AU rights reserved.
Команды явного управления транзакциями
Управление логикой транзакций осуществляется с помощью команд COMMIT, SAVEPOINT, и
ROLLBACK.
Команда Описание
COMMIT Завершает текущую транзакцию, делая все незафиксированные изменения постоянными
SAVEPOINT имя Создаст точку сохранения в текущей транзакции.
ROLLBACK Команда ROLLBACK прекращает текущую транзакцию, отменяя все произведенные изменения в данных.
ROLLBACK TO SAVEPOINT имя Команда ROLLBACK ТО SAVEPOINT имя отменяет все произведенные изменения до точки сохранения <имя> Ест опущено предложение ТО SAVEPOINT, команда ROLLBACK 01 меняет все изменения транзакции. Так как точки сохранения создаются логически, нельзя просмотреть список созданных точек сохранения.
Примечание
Команда SAVEPOINT не входит в стандарт ANSI языка SQL.
Introduction to Oracle9/: SQL 8-35
Откат изменений до точки сохранения
• С помощью команды savepoint пометьте точку
сохранения в текущей транзакции.
• Выполните откат к этой точке, используя
команду ROLLBACK ТО SAVEPOINT.
UPDATE...
SAVEPOINT update done;
Savepoint created.'
INSERT...
ROLLBACK TO update_done;
Rollback complete.
ORACLe
8-36
Copyright © Oracle Corporation, 2001. All rights reserved.
Откат изменений к точке сохранения
С помощью команды SAVEPOINT можно создан, метку в текущей транзакции, которая делит
транзакцию на более мелкие части. Далее по команде ROLLBACK ТО SAVEPOINT можно
отменить незаконченные изменения, сделанные после метки.
Если создается вторая точка сохранения с таким же именем, предыдущая точка уничтожается.
Создание точки сохранения нс фиксирует изменения (COMMIT), сделанные до точки
сохранения.
Introduction to Oracled/': SQL 8-36
Неявная обработка транзакций
• Автоматическая фиксация изменений (commit)
происходит в следующих случаях:
- Выполнение команды DDL
- Выполнение команды DCL
- Нормальный выход из /SQL*Plus без явной
посылки команды commit или rollback
• Автоматический откат (rollback) выполняется
в случае аварийного прекращения сеанса
работы в z'SQL*Plus или отказа системы
or?ACi_e
8-37 Copyright © Oracle Corporation, 2001. All nghts reserved.
Неявная обработка транзакций
Статус Обстоятельства
Автоматическая фиксация Выполнение команды DDL или DCL. Нормальное завершение сеанса работы в /SQL*Plus без явной команды COMMIT или ROLLBACK .
Автоматический откат Аварийное прекращение сеанса работы в /SQL*Plus или системный сбой
Примечание
В среде zSQL*Plus имеется еще одна команда для управления транзакциями - AUTOCOMMIT,
которая может быть в двух состояниях: ON или OFF. В случае AUTOCOMMIT ON каждая
отдельная команда DML фиксируется сразу после выполнения. Ошена изменений
невозможна (невозможен откат к предыдущему состоянию). В случае AUTOCOMMIT OFF
можно послать команду COMMIT явно. Кроме того, команда COMMIT выполняется, когда
пользователь посылает команду DDL или завершает сеанс работы в zSQL*Phis.
Сбой системы
Если транзакция прерывается вследствие отказа системы, то происходит автоматический
откат всей транзакции. Это предотвращает нежелательные изменения в данных, а таблицы
возвращаются в состояние на момент последней фиксации транзакции. Таким образом SQL
обеспечивает целостность таблиц.
Чтобы нормально выйти из »SQL*Plus, необходимо щелкнуть на ссылке Log Out. В среде
SQL*Plus нормальный выход производится по команде EXIT. Закрытие окна интерпретируется
как аварийный выход.
Introduction to Oracle9/: SQL 8-37
Состояние данных до выполнения
команды commit или rollback
• Предыдущее состояние данных может быть
восстановлено.
• Текущий пользователь может просмотреть
результаты своих операций DML с помощью
команды SELECT.
• Другие пользователи не могут видеть результаты
команд DML, выполняемых текущим пользователем.
• Измененяемые строки блокируются, и другие
пользователи не могут обновлять их содержимое.
Фиксация изменений
Каждое изменение данных, выполненное в ходе транзакции, является временным до тех пор.
пока транзакция не будет зафиксирована.
Состояние данных до команды COMMIT или ROLLBACK
• Операции манипулирования данными изменяют только буфер базы данных;
следовательно, предыдущее состояние данных может быть восстановлено.
• Текущий пользователь может проверить результаты своих операций манипулирования
данными путем запросов к таблицам.
* Другие пользователи нс могут видеть результаты операций манипулирования данными,
выполняемых текущим пользователем. Сервер Oracle обеспечивает согласованность
чтения, и каждый пользователь видит данные такими, какими они были зафиксированы
последней командой COMMIT.
• Строки, с которыми в данный момент проводятся операции, блокируются; друт не
пользователи изменять их нс могут.
Introduction to Oracle9z: SQL 8-38
-4
Состояние данных после выполнения
команды commit
• Измененные данные записываются в базу данных.
• Предшествующее состояние данных теряется.
• Все пользователи могут видеть результаты.
• Измененные строки разблокируются, и другие
пользователи получают доступ к ним для
обработки данных.
• Все точки сохранения стираются.
оРАсие
8-39 Copyright © Oracle Corporation, 2001 All rights reserved
Фиксация изменений (продолжение)
Все временные изменения С1ановятея постоянными после их фиксации командой COMMIT.
После выполнения команды COMMIT:
• Измененные данные записываются в базу данных.
• Прежнее состояние данных безвозвратно теряется.
• Все пользователи могут видеть результаты транзакции.
• Блокировки с измененных строк снимаются; друт не пользователи получают возможность
изменять данные в лих строках.
• Все точки сохранения удаляются.
Introduction to Oracled/: SQL 8-39
Фиксация изменений в данных
* Внесение изменений._____________________
DELETE FROM employees
WHERE employee_id = 99999;
1 row deleted.
INSERT INTO departments
VALUES (290, 'Corporate Tax', NULL, 1700);
1 row inserted.
• Фиксация изменений.
8-40 Copyright © Oracle Corporation, 2001. All rights reserved.
Фиксация изменений (продолжение)
В примере на слайде удаляется строка из таблицы EMPLOYEES и вводится новая строка в
таблицу DEPARTMENTS. Затем изменение фиксируется командой COMMIT.
Пример
Удалите отделы 290 и 300 из таблицы DEPARTMENTS, а также измените строку в таблице
COPY EMP. Сделайте изменения в данных постоянными.
DELETE FROM departments
WHERE department_id IN (290, 300);
2 rows deleted.
UPDATE copy_emp
SET department_id = 80
WHERE employee_id = 206;
1 row updated.
COMMIT;
Commit Complete.
Introduction to Oracle9z: SQL 8-40
- 4
Состояние данных после выполнения
команды ROLLBACK
Команда ROLLBACK отменяет все незавершенные
изменения.
• Изменения в данных отменяются.
• Данные возвращаются в прежнее состояние.
* Блокировка строк, над которыми выполнялись
операции, отменяется.
DELETE FROM copy_emp;
22 rows deleted.
ЛУА, ASV -aVi'AV.S'A'.'iV- '•'f - ЛлМ.- -.44 Лч^
| ROLLBACK;
Rollback complete.
8-41 Copyright © Oracle Corporation, 2001. All rights reserved
Отмена изменений
Любые незафиксированные изменения можно отменить командой ROLLBACK После
выполнения команды ROLLBACK:
• изменения в данных отменяются;
• восстанавливается прежнее состояние данных;
• блокировки с соответствующих cipoK снимаю 1ся.
Пример
При попытке удалить запись из таблицы TEST можно случайно сделать таблицу пустой. Diy
ошибку можно исправить, после чего дать правильную команду и сделать изменения
постоянными.
DELETE FROM test;
25,000 rows deleted.
ROLLBACK;
Rollback complete.
DELETE FROM test
WHERE id = 100;
1 row deleted.
SELECT * *
FROM test
WHERE id = 100;
No rows selected.
COMMIT;
Commit complete.
Introduction to Oracled/: SQL 8-41
Откат на уровне команды
• Если ошибка возникла при выполнении одной
конкретной команды DML, отменяются только
результаты этой команды.
• Сервер Oracle использует неявную точку
сохранения.
• Все прочие изменения сохраняются.
• Пользователю следует завершать транзакции
явно командой commit или rollback.
ORACLe
8-42 Copyright © Oracle Corporation, 2001. Ail rights reserved.
Откат на уровне команды
Ьслн при выполнении команды обнаружена ошибка, часть гранзакции может быть
отменена путем неявного отката. Если в ходе гранзакции ошибка возникла в одной
единственной команде DML, О1мсняс1ся только результат этой команды, т.с.
производится откат на уровне команды. Изменения, сделанные предыдущими
командами DML в этой же самой транзакции, остаются. Они могут быть явно
зафиксированы или отменены пользователем.
Сервер Oracle выполняет неявную команду COMMIT до и после любой команды Языка
определения данных (DDL). Следовательно, если команда DDL неудачна, отменить
предыдущую команду нельзя, т.к. сервер уже выполнил неявную команду COMMIT.
Завершайте свои транзакции явно с помощью команды COMMIT или ROLLBACK.
Introduction to Oracle97: SQL 8-42
Согласованность чтения
• Согласованность чтения гарантирует
непротиворечивое представление данных в
любой момент времени.
• Изменения, сделанные одним пользователем,
не вступают в противоречие с изменениями,
сделанными другим пользователем.
• Гарантируется, что для одних и тех же данных:
- “Читатели" никогда не блокируют “писателей**.
- “Писатели** никогда не блокируют “читателей**.
ORACLe
8-43 Copyright О Oracle Corporation. 2001 All rights reserved.
Согласованность чтения
Имеется два типа доступа пользователей к базе данных:
• Операции чтения (команда SELECT).
• Операции записи (команды INSERT, UPDATE, DELETE).
Согласованность чтения обеспечивает следующее:
• Пользователям, осуществляющим чтение и запись в базе данных, предоставляются
непрот иворечивые данные.
• Пользователи, осуществляющие чтение, нс видят данных, которые находятся в
процессе изменения.
• Пользователи, осуществляющие запись, вносят свои изменения согласованно.
• Изменения, внесенные одним пользователем, осуществляющим запись, нс прерывают
внесение изменений другим пользователем и нс вступают с ними в конфликт
Согласованное гь чтения нужна для того, чтобы перед началом операции DML каждый
пользователь видел данные такими, какими они были в момент их последней фиксации
Introduction to Oracle9i: SQL 8-43
Реализация согласованности чтения
Согласованность чтения обеспечивается автоматически. Для этого частичная копия базы данных
хранится в сегментах отмены.
Когда в базе данных выполняется операция вставки, обновления или удаления, сервер Oracle берет
копию данных до их изменения и записывает в сегмент отмены.
lice пользователи, осуществляющие чтение, за исключением того, кто инициировал изменение, видя!
базу данных такой, какой она была до начала изменения, т е. “снимок" данных из сегментов отмены.
Пока изменения нс будут зафиксированы в базе данных, измененную базу данных видит только
пользователь, который эти изменения осуществляет. Все остальные видят снимок из сегмента отмены.
Благодаря этому пользователи, читающие базу данных, видят непротиворечивые данные, нс
подвергающиеся в данный момент никаким изменениям.
После фиксации команды DML изменение, внесенное в базу данных, становится видимым для любого
пользователя, выполняющего команду SELECT. Место в сегменте отмены, которое было занято
“старыми" данными, освобождается для повторного использования.
Если производится откат транзакции, вес изменения отменяются:
• Исходная старая версия данных из сегмента отмены записывается назад в таблицу.
• Все пользователи видят базу данных такой, какой она была до начала транзакции.
Introduction to Orac!e9/‘: SQL 8-44
Блокировка данных
Блокировки в базе данных Oracle:
* Предотвращает деструктивное взаимодействие
между одновременными транзакциями
• Не требует действий со стороны пользователя
• Автоматически использует ограничение самого
низкого уровня
• Сохраняется до конца транзакции
• Имеет два основных режима (явное и неявное
блокирование)
ORACL_€T
8-45 Copyright © Oracle Corporation, 2001. All rights reserved.
Что такое блокировки?
Блокировки - это механизмы, предотвращающие деструктивное взаимодействие между
транзакциями, обращающимися к одному и тому же ресурсу: пользовательскому объекту
(например, таблицам или строкам) или системным объектам (совместно используемым
структурам данных или строкам словаря данных).
Как Oracle блокирует данные
Блокировка в базе данных Oracle осуществляется авюматически без участия пользователя.
Неявная блокировка производится, если это необходимо, для всех команд SQL, кроме
SELECT. По умолчанию Oracle применяет блокировку с самым низким возможным уровнем
ограничения, что обеспечивает наилучшие возможности одновременного доступа и
одновременно максимальную целостность данных. Кроме того, Oracle позволяет
пользователям осуществлять блокировку вручную. Эта блокировка называется явной.
Introduction to Oracle9Z: SQL 8-45
Неявная блокировка данных
• Две модели блокирования
- Исключительная блокировка (Exclusive):
блокирует других пользователей
- Разделяемая блокировка (Share): разрешает
доступ другим пользователям
• Высокий уровень параллелизма данных
- DML: раздельная блокировка на уровне таблиц
(Table share), исключительная блокировка на
уровне строк (row exclusive)
- Запросы: блокировок не требуется
- DDL: защита определений объектов
• Блокировки удерживаются до фиксации
(commit) или отката (rollback)
8-46 Copyright © Oracle Corporation, 2001. All rights reserved.
Блокировки DML
При выполнении операций изменения данных е помощью языка DML сервер Oracle
обеспечивает параллельную обработку данных, используя блокировки DML. Эти блокировки
возникают на двух уровнях:
• Разделяемая блокировка автоматически применяется на уровне таблицы во время
операций DML. В этом режиме блокирования несколько транзакции могут получать
разделяемые блокировки на один и тог же ресурс.
• Исключительная блокировка устанавливается автоматически на каждую изменяемую с
помощью команды DML строку. Исключительная блокировка предотвращает изменение
строки дру! ими транзакциями до фиксации или отказа удерживающей се транзакции Эта
блокировка гарантирует, что другие пользователи нс Moiyi изменять гуже самую строку
в одно и то же время и переписывать изменения то тех пор, пока они нс будут
зафиксированы другим пользователем.
• Блокировки DDL возникают при изменении таких объектов базы данных, как 1аблица.
Introduction to OracleSh: SQL 8-46
Итоги
В этом уроке вы познакомились с тем, как использовать
команды DML и управлять транзакциями.
Команда
Описание
8-47
INSERT
UPDATE
DELETE
MERGE
COMMIT
SAVEPOINT
ROLLBACK
Вставляет новую строку в таблицу
Изменяет существующие строки таблицы
даляет существующие строки из таблицы
вставляет или изменяет данные таблицы при
определенном условии
Делает все незафиксированные изменения
постоянными
Позволяет произвести откат до определенной точки
сох ранения__________________________________
Отменяет все незафиксированные изменения данных
Copyright © Oracle Corporation, 2001. All rights reserved.
ORACL.e
Итоги
Для манипулирования данными в базе данных Oracle используются команды INSERT, UPDATE
и DELETE. Управление изменениями данных осуществляется с помощью команд COMMIT,
SAVEPOINT И ROLLBACK.
Сервер Oracle 1 арантируст согласованнос/непротиворсчивое представление данных в любой
момент времени.
Блокировка может быть явной или неявной.
Introduction to Oracle9r: SQL 8-47
Обзор практического занятия 8
На этом практическом занятии вы будете добавлять строки в габлицу MY_EMPLOYEE,
обновлять данные, удалять данные из таблицы и осущест влят ь управление своими
транзакциями.
Introduction to Oracle9r: SQL 8-48
Практическое занятие 8
Вставьте данные в таблицу MY_EMPLOYEE.
I. Выполните скрипт-файл 1аЬ8_1. sql для создания таблицы MY EMPLOYEE , которая
будет использоваться для упражнений.
2. Выведите структуру таблицы MY_EMPLOYEE для выяснения имен столбцов.
3. Вставьте в таблицу MY_EMPLOYEE первую строку из нижеприведенных образцов. Не
указывайте столбцы в предложении INSERT.
ID LAST_NAME FIRST_NAME USERID SALARY
1 Patel Ralph rpatel 895
2 Danes Betty bdancs 860
3 Biri Ben bbir i 1100
4 Newman Chad cnewman 750
5 Ropeburn Audrey aropebur 1550
4. Вставьте в таблицу MY_EMPLOYEE вторую строку из вышеуказанных образцов. На этот pai
укажи ie столбцы явно в предложении INSERT.
5. Убеди 1ссь в том, что данные вставлены в таблицу.
I
1 Pale
2 Dan
LAST NAME
*
FIRST NAME
Ralph
SALARY
Belly
bdanc
860
s
Introduction to Oracle9i: SQL 8-49
Практическое занятие 8 (продолжение)
6. Создайте скрипт-файл loademp. sql для интерактивной заг pj зки строк в таблицу
MY_EMPLOYEE. Выдайте приглашение пользователю ввести номер, фамилию, имя и
оклад служащего. Соедините первую букву имени с семью первыми буквами фамилии
для получения идентификатора пользователя данного служащего.
7. С помощью созданного вами скрипт-файла вставьте в таблицу две следующих строки
данных из приведенных образцов (задание 3).
8. Убедитесь в том, что строки вставлены в таблицу.
9. Сделайте изменения постоянными.
Обновите и удалите данные таблицы MY_EMPLOYEE.
10. Смените фамилию служащего номер 3 на “Drexler”.
11. Сделайте оклад равным 1000 для всех служащих, имеющих оклад ниже 900.
12. Проверьте изменения в таблице.
ID first^name J USERID SALARY
1 Patel Ralph rpalel 1000
2 Danes Betty bdancs 1000
3 Drexler Ben bbiri 1100
4 Newman Chad cnewman 1000
13. Удалите из таблицы MY_EMPLOYEE строку для служащей Betty Danes.
Introduction to Oracle9/: SQL 8-50
4
Практическое занятие 8 (продолжение)
15. Зафиксируйте все незафиксированные изменения.
Управляйте транзакциями сданными таблицы MY_EMPLOYEE.
16. Вставьте в таблицу последнюю строку из образца данных путем выполнения скрнпт-
файла, созданного вами в упражнении 6.
17. Проверьте вставку данных в таблицу.
Ill> LAST NAME ' FIRST-NAME . USERID " >. . "< *. * SALARY
1 Patel Ralph rpatel 1000
3 Drexler Ben bbin 1100.
4 Newman Chad j cnewman 1000 ;
5 Ropeburn Audrey aropebur 1550
18. Создайте точку сохранения в ходе транзакции.
19. Удалите все данные из таблицы.
20. Убедитесь в том, что таблица пуста.
21. Отмените последнюю операцию DELETE, не отменяя предыдущую операцию INSERT.
22. Убедитесь в том, что вставленная строка присутствует в таблице.
Q 1 1 . LAST NAME , FIRST NAME ; USERID SALARY
1 Patel Ralph rpatel 1000
3 Drexler Ben bbin 1100
4 Newman Chad cnewman 1000
I 5 Ropeburn Audrey aropebur 1550
23. Сделайте добавление данных постоянным.
Introduction to Oracled/: SQL 8-51
Introduction to Oracle9/: SQL 8-52
Создание таблиц и управление ими
Copyright © Oracle Corporation, 2001. All rights reserved.
1
Рассматриваемые вопросы
• Главные объекты базы данных
• Создание таблиц
• Типы данных, которые могут использоваться в
определениях столбцов
• Изменение определений таблиц
• Удаление, переименование и усечение таблиц
Цели урока
Эютурок посвящен основным объектам базы данных и взаимосвязям между ними. Вы также
научитесь создавать, изменять и удалять таблицы.
Introduction to Oracle9*: SQL 9-2
Объекты базы данных
Объект Описание
Таблица \ <• А Основная единица хранения; состоит из строк и столбцов
Представление Логически представляет подмножества данных из одной или нескольких таблиц
Последовательность Генератор числовых значений
Индекс Увеличивает производительность некоторых запросов
Синоним Дает альтернативные имена объектам
ORACLC
9-3 Copyright © Oracle Corporation, 2001. All rights reserved
Объекты базы данных
База данных Oracle может содержать ра тные структуры данных. Каждая структура должна
быть в общих чертах отражена в проекте базы данных, чтобы се можно было создать на этапе
кодирования в цикле разработки системы.
• Таблица', хранит данные.
• Представление: подмножество данных из одной ттли нескольких таблиц.
• Последовательность: генерирует числовые значения.
• Индекс: улучшает производительность некоторых запросов.
• Синоним: дает альтернативное имя объекту.
Структура таблиц Огас!е9/
Создавать таблицы можно в любое время, даже когда пользователи используют базу
данных.
Указывать размер таблицы необязательно. В конечном итоге он определяется
количеством пространства, выделенного базе данных в целом. Важно, однако, оценить,
сколько памяти под таблицу понадобится со временем.
Структуру таблицы можно изменять в оперативном режиме.
Примечание: в БД имеются и друт ие объекты, но в ном уроке они не обсуждаются
Introduction to Oracle9z: SQL 9-3
Правила присвоения имен
Имена таблиц и столбцов:
• Должны начинаться с буквы
• Могут быть длиной от 1 до 30 символов
• Должны содержать только символы A-Z, a-z,
0-9, $ и #
• Не должны совпадать с именем другого
объекта, принадлежащего этому же самому
пользователю
• Не должны совпадать со словом,
зарезервированным сервером Oracle
9-4 Copyright © Oracle Corporation. 2001. All rights reserved.
Правила присвоения имен
Имена таблицам базы данных и столбцам следует присваивать в соответствии со
стандартными правилами присвоения имен любых объектов базы данных Oracle:
• Имена таблиц и столбцов должны начинаться с буквы и мот у г иметь д тину от I до 30
символов.
• Имена должны содержать только символы A-Z, a-z, 0-9, _ (символ подчеркивания), $ и
Н (последние символы допускаются, но их использование не рекомендуется).
• Имена нс должны совпадать с именем другого объекта, принадлежащет о тому же самому
пользователю сервера Oracle.
• lie должны совпадать со словами, зарезервированными сервером Oracle.
Указания по присвоению имен
Используйте описательные имена для таблиц и друт их объектов БД.
Примечание
Рет истры символов в именах не различаются. Например, имя EMPLOYEES рассматривается так
же, как eMPloyees ттли eMpLOYEES.
Болес подробную информацию см. в Orade9i SQL Reference,“Object Names and Qualifiers.”
Introduction to Oracle9<: SQL 9-4
Команда create table
• Необходимо иметь:
- привилегию CREATE TABLE
- Область хранения
CREATE TABLE [схема.]таблица
(столбец тип_данных [DEFAULT выражение][, ...]);
* Вы задаете:
- Имя таблицы
- Имя столбца, тип данных столбца и размер
столбца
9-5 Copyright О Oracle Corporation, 2001 All rights reserved
Команда create table
Команда CREATE TABLE языка SQL используется для создания таблиц. Эю одна и j команд
Языка определения данных (DDL), обсуждаемого в нескольких следующих уроках. Команды
DDL являются подмножеством команд SQL, используемых для создания, изменения и
удаления структур базы данных Огас1е9/. Эти команды немедленно влияют на базу данных и,
кроме того, записывают информацию в словарь данных.
Чтобы создать таблицу, пользователь должен иметь привилегию CREATE TABLE и область
хранения, где можно создавать объекты. Для предоставления привилстни пользователям
администратор базы данных использует команды Языка управления данными (DCL) , которые
обсуждаются на одном из следующих занятий.
Синтаксис:
схема го же самое, что имя владельца (совокупность объектов,
созданных одним пользователем).
таблица имя таблицы
DEFAULT выражение задает значение, которое должно использоваться по
умолчанию, если в команде INSERT значение явно не указано.
столбец имя столбца
тип данных тип данных и ширина столбца
Introduction to Oracled/: SQL 9-5
Ссылки на таблицы других
пользователей
• Таблицы, принадлежащие другим
пользователям, не входят в схему
пользователя.
• В качестве префикса в имени таблицы следует
указать имя владельца.
Copyright О Oracle Corporation, 2001. All rights reserved.
Ссылки на таблицы других пользователей
Схема (schema) — это совокупность объектов. Объекты схемы - это jioi ичсские структуры, прямо
ссылающиеся на данные в базе данных. Объекты схемы включают таблицы, предел пиления,
синонимы, последовательности, хранимые процедуры, индексы, кластеры и связи базы данных.
Если таблица не принадлежит пользователю, в качестве префикса имени таблицы должно
указываться имя се владельца. Например, чтобы выбрать данные таблицы EMPLOYEES из схемы
пользователя USER_B, необходимо задать следующее:
SELECT
FROM
user_b.employees;
Introduction to Oracle9/: SQL 9-6
••j** ‘*|tW**
ОПЦИЯ DEFAULT
• Задает значение по умолчанию, если при
вставке данных значение не указано явно.
• В качестве значения допускается литерал,
выражение или функция SQL.
* Не может использоваться имя другого столбца
или псевдостолбец.
• Тип данных, используемый по умолчанию,
должен совпадать с типом данных столбца.
ОПЦИЯ DEFAULT
Опция DEFAULT позволяет задать значение столбца по умолчанию. Это предотвращает запись
неопределенно! о значения в столбец, если строка вставляется без явного указания значения.
Значением, которое должно использоваться по умолчанию, может быть литерал, выражение
или такая функция SQL, как SYSDATE и USER, но не имя другого столбца или пссвдостолбца
(например, NEXTVAL или CURRVAL). Выражение значения по умолчанию должно
соответствовать т ипу данных столбца .
Примечание
CURRVAL и NEXTVAL рассматриваются далее в курсе
Introduction to Oracle9/: SQL 9-7
Создание таблиц
* Создание таблицы
CREATE-TABLE dept
(deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13)) ;
Table created.
* Проверка создания таблицы
DESCRIBE dept
Name . ; ' ' Null? , ’ . ( Type
DEPTNO.............[ |NUM6ER(2)
DNAME | |VARCHAR2(I4)
loc ‘ {...... [varlhaR2(13)
Создание таблиц
В примере на слайде создастся таблица отделов DEPT с тремя столбцами: DEPTNO, DNAME и
LOC. Затем факт создания таблицы проверяется с помощью команды DESCRIBE.
Т к. команда CREATE TABLE - это команда языка DDL, после выполнения этой команды
автоматически производится фиксация транзакции.
Introduction to Oracle9/: SQL 9-8
Таблицы в базе данных Oracle
• Таблицы пользователей
- Таблицы, создаваемые и поддерживаемые
пользователями
- Содержат информацию пользователей
* Словарь базы данных
- Таблицы, создаваемые и поддерживаемые
сервером Oracle
- Содержат служебную информацию базы данных
е
9-9 Copyright © Oracle Corporation. 2001 All rights reserved
Таблицы в базе данных Oracle
Нользоваюльские таблицы (например, EMPLOYEES) создаются пользователями базы данных.
Существуют и друюс таблицы и представления, коюрые известны как словарь базы данных
(data dictionary). Они создаются в момент создания базы данных с помощью скриптов,
созданных компанией Oracle, поддерживаются и обновляются сервером базы данных.
Например, в словаре базы данных хранятся имена пользователей, приводе! ин, имена объектов,
информация об ограничениях целостности, информация аудита
Все таблицы словаря базы данных находятся в схеме пользователя SYS. Пользователи нс часто
обращаются к таблицам словаря базы данных, поскольку информация в них размещена в
формате неудобном для понимания пользователей, но удобном для сервера базы данных.
Поэтому обычно используются представления словаря базы данных. 11рсдС1авления словаря
базы данных дсляюя на четыре iруины, различающихся по префиксу (начальным буквам
названия) и назначению.
Префикс Описание
USER Эти представления содержат информацию об объектах, принадлежащих пользователю.
AI.L_ Эти представления содержат информацию об объектах, доступных пользователю.
DBA Эти представления содержат информацию обо всех обьсктах. Доступны администраторам базы данных.
V$_ Динамические представления производительности. ( одержат информацию, специфичную для экземпляра базы данных, например, информацию о блокировках. Обычно, используются для сбора информации при нащроикс производительности.
Introduction to Oracle9r: SQL 9-9
Запрос к словарю данных
• Вывод описаний таблиц, принадлежащих
пользователю.
SELECT table name
FROM user tablesi;
< —
• Просмотр типов объектов, принадлежащих
пользователю.
SELECT DISTINCT object type
A Vk-AVVKS'/. XA'WW* WWWWV 4*4* VWA*AM.V -*•*»* 44^
j FROM user objects j;
• Просмотр таблиц, представлений, синонимов и
последовательностей, принадлежащих
пользователю.
Запрос к словарю данных
Для просмотра принадлежащих вам объектов вы можете просматривать таблицы словаря
данных. Чаще всего используются следующие таблицы словаря данных:
• USER TABLES
• USERJDBJECTS (синоним OBJ)
• USER_CATALOG
Примечание
Представление USER_CATALOG имеет синоним CAT. В командах SQL можно использовать
этол синоним вместо имени USER_CATALOG .
SELECT *
FROM CAT;
Introduction to Oracle9z: SQL 9-10
Типы данных
Тип данных Описание
VARCHAR2 (размер) Символьные данные переменной длины
CHAR (размер) Символьные данные постоянной длины
NUMBER (p,s) Числовые данные переменной длины
DATE Значения даты и времени
LONG Символьные данные переменной длины до 2 гигабайтов
CLOB Символьные данные до 4 гигабайтов
RAW и LONG RAW Необработанные (“сырые") двоичные данные
BLOB Двоичные данные до 4 гигабайтов
BFILE Двоичные данные, которые хранятся во внешнем файле; длина до 4 гигабайтов
ROWID Уникальный адрес строки в 64-ои символьной системе кодировки
Copyright © Oracle Corporation, 2001 All rights reserved.
L
Типы данных
Тип данных Описание
VARCHAR2 (размер) Символьные данные переменной длины (Максимальная длина должна быть задана Минимальный размер равен I, максимальный размер — 4000.)
CHAR [(размер)] Символьные данные постоянной длины (размера) (Минимальный размер и размер по умолчанию - I, максимальный размер — 2000 )
NUMBER L(p,s)] Число с точностью р и масштабом х Точное н> (precision) — это общее количество цифровых разрядов. Масштаб (scale) — это количество цифровых разрядов после десятичной точки. 'I очность может варьироваться от 1 до 38, а масштаб — от -84 до 127.
DATE Значения даты и времени с точностью до ближайшей секунды между 1 января 4712 до н.э. и 31 декабря 9999 н.э.
LONG — Символьные данные переменной длины до 2 гшабаигов
CLOB Символьные данные до 4 гигабайтов
Introduction to Oracle9/': SQL 9-11
Типы данных (продолжение)
Тип данных Описание
RAW (размер) Необработанные (“сырые") двоичные данные длиной, заданной параметром размер. Максимальный размер-2000 (он должен бы ть задан)
LONG RAW Необработанные двоичные данные длиной до 2 гигабайтов
BLOB Двоичные данные длиной до 4 гигабайтов
BFILE Двоичные данные, которые хранятся во внешнем фай ле, длиной до 4 гигабайтов
ROW ID Уникальный адрес строки в 04-ой символьной chcicmc кодировки.
Столбец типа LONG нс копируется, когда таблица создастся с помощью подзапроса.
• Столбец типа LONG не можег быть включен в предложения GROUP BY и ORDER BY
В таблице может быть не более одно) о столбца типа LONG .
Ограничения не могут быть определены па основе столбца типа LONG.
Вместо столбца типа LONG рекомендуется использовать столбец типа CLOB.
-4
Introduction to Oracle9/: SQL 9-12
Типы данных для хранения даты и
времени
В Огас1е9/:
* Введены новые типы данных для хранения
даты и времени
• Введены структуры хранения для этих типов
данных
• Усовершенствования были сделаны для
временных зон и локальных временных зон
Тип данных Описание
TIMESTAMP Дата до долей секунды
INTERVAL YEAR ТО MONTH Интервал времени в годах и месяцах
INTERVAL DAY TO SECOND Интервал времени в днях с точностью до минут и секунд
ORACLG
9-13 Copyright О Oracle Corporation. 2001. All rights reserved.
Типы данных для хранения даты и времени
Тип данных Описание
TIMESTAMP Позволяет храпни, дату с точностью до долей секунды. Есть несколько вариантов этого типа данных.
INTERVAL YEAR ТО MONTH Позволяет хранить время в виде интервала лет и месяцев. Используется, чтобы показать различие между двумя величинами типа datetime в годах и месяцах.
INTERVAL DAY TO SECOND Позволяет хранить интервал времени в днях с точностью до часов, минут и секунд. Полезно для отражения точного различия между двумя величинами типа datelime
Introduction to Oracle9<: SQL 9-13
Типы данных для хранения даты и времени
Количество цифр в дробной части секунд для значения поля этого типа может быть
необязательно описано как точность_в_долях_секунды и может быть в интервале от 0 до
9. По умолчанию точность - 6.
Пример
CREATE TABLE newemployees
(employee_id NUMBER,
first_name VARCHAR2(15),
last_name VARCHAR2(15) ,
• • •
start_daLe TIMESTAMP(7),
. . .) ;
В предыдущем примере создастся таблица NEW_EMPLOYEES с столбцом start_date типа
TIMESTAMP. Точность “7’ показывает точность в долях секунды. По умолчанию, если
точность не задается, се значение “6”.
Предположим, что две строки вставлены в таблицу NEW_EMPLOYEES. Следующий пример
показывает вид выходных данных TIMESTAMP, который отличается от обычного
представления даты DATE в формате DD-MON-RR:
SELECT start_date
FROM new employees;
17-JUN-87 12.00.00.000000 AM
21-SEP-89 12.00.00.000000 AM
Introduction to Oracle9/: SQL 9-14
Тип данных timestamp with time zone
• timestamp with time zone - это вариант типа
данных timestamp, в котором содержится
значение смещения временной зоны.
• Смещение временной зоны - это отличие в
часах и минутах между местным временем и
временем по Гринвичу (Universal Time
Coordinated, сокращенно UTC).
TIMESTAMP [ (точность_в_долях_секунды) ]
WITH TIME ZONE
t ORACLG
9-15 Copyright © Oracle Corporation, 2001. All rights reserved.
Типы данных для хранения даты и времени
UTC поддерживает всеобщее скоординированное время (Coordinated Universal Time), раннее
называемое всемирным гринвичским временем (Greenwich Mean Time). Два значения типа
TIMESTAMP WITH TIME ZONE рассматриваются как одинаковые, если они представляют
один и тот же момент времени UTC, несмотря на смещение TIME ZONE, хранимое в дате.
Так как TIMESTAMP WITH TIME ZONE может также хранить информацию G временной
зоне, этот тип данных более всего подходит для записи информации о дате, которая должна
быть получена и согласована с учетом географических pci ионов.
Например,
TIMESTAMP ’1999-04-15 8:00:00 -8:00'
- это одно и то же значение с
TIMESTAMP '1999-04-15 11:00:00 -5:00'
Таким образом, 8:00 am. по стандартному тихоокеанскому времени (Pacific Standard Time) -
это одно и тоже, что и 11:00 а.т. по стандартному западному времени (Eastern Standard Time).
Это также может быть определено как:
TIMESTAMP '1999-04-15 8:00:00 US/Pacific'
Примечание
Точность_в_долях_секундъ1 необязательно задастся для определения количества цифр в
дробной части поля секунд (SECOND) типа данных datetime и может быть от 0 до 9. Значение
по умолчанию - 6.
Introduction to Oracle9i: SQL 9-15
Тип данных TIMESTAMP WITH LOCAL TIME
• timestamp with local time zone -это другой
вариант типа данных timestamp, который
содержит значение смещение временной зоны.
• Информация, хранимая в базе данных
нормализована (привязана к) с временной
зоной базы данных.
• Отклонение временной зоны не хранится как
часть данных столбца; Oracle возвращает
данные, привязанные к локальной временной
зоне, установленной в сеансе пользователя.
• Тип данных TIMESTAMP WITH LOCAL TIME ZONE
определяется следующим образом:
TIMESTAMP [ (точность_в__долях_секунды) ]
WITH LOCAL TIME ZONE_______________________________________
Copyright © Oracle Corporation, 2001. All rights reserved.
Типы данных для хранения даты и времени
В отличие от TIMESTAMP WITH TIME ZONE столбцы с типом данных TIMESTAMP WITH
LOCAL TIME ZONE могут входить в главный или уникальный ключ. Отклонение временной
зоны - это разница (в часах и минутах) между местным временем и UTC. Для данных типа
TIMESTAMP WITH LOCAL TIME ZONE ист специальных литеральных констант.
Примечание
Точность_в_долях_секунды необязательно задастся для определения количества цифр в
дробной части поля секунд (SECOND) тиа данных datetime и может быть ог 0 до 9. Значение
ио умолчанию - 6.
Пример
CREATE TABLE time_example
(order_date TIMESTAMP WITH LOCAL TIME ZONE);
INSERT INTO time_example VALUES('15-NOV-OO 09:34:28 AM');
SELECT
FROM
time example;
order date
15-NOV-OO 09.34.28.000000 AM
Тип TIMESTAMP WITH LOCAL TIME ZONE подходиi для двухуровневых приложений, в
которых дата и время выводится с учетом временной зоны в системе клиента.
Introduction to Oracle9z: SQL 9-16
Тип данных INTERVAL YEAR ТО MONTH
• INTERVAL YEAR TO MONTH хранит ПврИОД
времени, используя поля год (year) и месяц
(month) типа данных datetime.
INTERVAL YEAR [(точность_в_годах)] ТО MONTH
INTERVAL '123-2' YEAR(3) TO MONTH
Indicates an interval of 123 years, 2 months.
INTERVAL '123' YEAR(3)
Indicates an interval of 123 years 0 months.
INTERVAL '300' MONTH(3)
Indicates an interval of 300 months.
INTERVAL '123' YEAR
Returns an error, because the default precision is 2,
and *123' has 3 digits.
ORACLG
9-17 Copyright © Oracle Corporation, 2001. All rights reserved.
ТИП данных INTERVAL YEAR TO MONTH
INTERVAL YEAR TO MONTH хранит период времени, используя поля год (YEAR) и месяц
(MONTH) типа данных datetime.
Применяйте тип INTERVAL YEAR ТО MONTH для представления разницы между двумя
значения типа datetime , когда для этого достаточно только лег и месяцев. Например, можно
использовать такие данные для уведомления в будущем об истечении 120 месяцев или для
проверки того, прошло ли 6 месяцев после определенной даты.
Задавайте INTERVAL YEAR ТО MONTH в следующем виде:
INTERVAL YEAR [(точность в_годах)] ТО MONTH
Синтаксис:
точность_в_годах количество цифр для отражения года (YEAR) в поле datetime.
По умолчанию точность_в_годах - 2.
Пример
CREATE TABLE time_example2
(loan_duration INTERVAL YEAR (3) TO MONTH);
INSERT INTO time_example2 (loan_duration)
VALUES (INTERVAL '120' MONTH(3)T;
SELECT TO_CHAR( sysdate+loan_duration, 'dd-mon-yyyy')
FROM time_example2; —текущая дата 26-Sep-2001
26-sep-2011
Introduction to Oracle9/: SQL 9-17
ТИП данных INTERVAL DAY ТО SECOND
INTERVAL DAY ТО SECOND хранит период
времени, используя дни, часы, минуты и секунды.
INTERVAL DAY [(точность_в_днях)]
ТО SECOND [(точность_в_долях_секунды)]
INTERVAL ’4 5:12:10.222' DAY TO SECOND(3)
Indicates 4 days, 5 hours, 12 minutes, 10 seconds,
and 222 thousandths of a second.INTERVAL '123' YEAR(3) .
INTERVAL '7’ DAY
Indicates 7 days.
INTERVAL '180' DAY(3)
9-18
Copyright © Oracle Corporation, 2001 All rights reserved.
ТИП Данных INTERVAL DAY TO SECOND
INTERVAL DAY TO SECOND хранит период времени, используя дни, часы, минуты и
секунды.
Используйте INTERVAL DAY ТО SECOND для представления точной разницы между двумя
значениями типа datetime. Например, вы можете использоват ь это значение для напоминания в
будущем о том, что прошло 36 часов или для записи времени между стартом и окончанием
гонки. Для представления с высокой точностью длительных промежутков времени,
включающих многие годы, можно задавать большие значения в днях.
Задавайте INTERVAL DAY ТО SECOND следующим образом:
INTERVAL DAY [(точность_в_днях)]
ТО SECOND [(точность_в_долях_сскунды)]
Синтаксис:
точность в_днях количество цифр для отражения дней (DAY) в
поле datetime. Допустимые значения от 0 до 9.
По умолчанию значение 2.
точность_в_долях_секунды количество цифр в дробной части секунд
(SECOND) поля datetime. Допустимые значения от
О до 9. По умолчанию значение 6.
Introduction to Огас1е9т: SQL 9-18
в
Тип данных INTERVAL DAY ТО SECOND
• INTERVAL DAY TO SECOND хранит Период
времени, используя дни, часы, минуты и секунды.
ORACLG
9-19
Copyright © Oracle Corporation. 2001. All rights reserved
ТИП данных INTERVAL DAY TO SECOND
Пример
CREATE TABLE time_example3
(day_duration INTERVAL DAY (3) TO SECOND);
INSERT INTO time_example3 (day_duration)
VALUES (INTERVAL '180' DAY(3));
SELECT sysdate + day duration "Half Year"
FROM time_example3; —текущая дата 26-Sep-2001
ж " ; HalfYeai
i25-MAR-02
Introduction to Oracle9i: SQL 9-19
Синтаксис создание таблицы с
использованием подзапроса
• Создание таблицы и вставка строк путем
совместного использования команды create
TABLE И ОПЦИИ AS подзапрос.
CREATE TABLE table
[(столбец, столбец...)]
AS подзапрос;
• Количество заданных столбцов должно
совпадать с количеством столбцов в подзапросе.
• Столбцы могут быть определены с именами и
значениями, используемыми по умолчанию.
ORACUE*
9-20 Copyright © Oracle Corporation. 2001. All rights reserved.
Создание таблицы на основе строк из другой таблицы
В юрой метод создание таблиц - эго использование предложения AS подзапрос как для
создания таблицы, так и для заполнения ее строками, возвращаемыми подзапросом.
Синтаксис:
таблица
столбец
подзапрос
имя таблицы
имя столбца, значение по умолчанию и правило целостности данных
команда SELECT, определяющая множество строк, коюрые должны
быть вставлены в новую таблицу
Указания
* Таблица создается с заданными именами столбцов, и в нес вставляются строки,
возвращаемые командой SELECT.
• Определение столбца содержит только имя столбца и значение по умолчанию
• Если описания столбцов для новой таблицы заданы, их количество должно
соответствовать количеству столбцов в списке выбора (SELECT) подзапроса.
• Если описания столбцов не заданы, их имена в таблице будут такими же, как имена
столбцов в подзапросе.
• Правила целостности не передаются новой таблице, передаются только определения
типов данных столбцов.
Introduction to Oracle9z: SQL 9-20
Создание таблицы с использованием
подзапроса
CREATE TABLE dept8О
AS
i SELECT employee id, last name, [
I salary*12 ANNSAL, |
| hire__date !
| FROM employees j
iWHERE department id =80;
Tabl^_____ —___
DESCRIBE dept80
WWOW, '' '' ' 'W;, •'/Тур?
[EMPLOYEEJD [ ~ ~ NIJMBEP(6)
LAST_NAME N TNI ILL VAR HAR.p5)
ANNSAL ~ Г NUMBER
[hire~oate nut null bate
8-21 Copyright © Oracle Corporation, 2001. All nghts reserved.
Создание таблицы на основе строк из другой таблицы (продолжение)
D этом примере создается таблица DEPT80, которая содержит сведения о всех служащих
отдела 80. Обратите внимание на го, что данные для згой 1аблииы берутся из таблицы
EMPLOYEES.
Проверить факт существования таблицы базы данных и определения столбцов можно с
помощью команды DESCRIBE /SQL*Plus.
Если выборка производится по выражению, то следует обязательно указывать псевдоним
Для выражения SALARY* 12 определяется псевдоним ANNSAL. Если псевдоним 01сутствуе1,
выдастся сообщение об ошибке:
ERROR at line 3:
ORA-00998: must name this expression with a column alias
Introduction to Oracle9<: SQL 9-21
Команда alter table
Команда alter table используется для
следующих операций:
• Добавление столбца
• Изменение существующего столбца
• Задание значения по умолчанию для нового
столбца
• Удаление столбца
g_22 Copyright © Oracle Corporation, 2001. All rights reserved.
Команда alter table
После создания таблицы может потребоваться изменить ее структуру из-за тою, что вы забыли
включить столбец или определение столбца, а также, если необходимо удалить столбцы. Вы
можете выполнить эти действия, используя команду ALTER TABLE.
Introduction to Oracle9/: SQL 9-22
Команда alter table
Используйте команду alter table для
добавления, изменения или удаления столбцов.
ALTER TABLE таблица
ADD (столбец тип_данных [DEFAULT выражение]
[, столбец тип даюшх] . . .) ;
ALTER TABLE таблица
MODIFY (столбец тип_данных [DEFAULT выражение]
[, столбец тип_дашшх] . . .) ;
Команда alter table (продолжение)
Вы можете добавить, изменить или удалить столбцы, используя команду ALTER TABLE.
Синтаксис:
таблица
ADD I MODIFY)DROP
столбец
тип_данных
DEFAULT выражение
имя таблицы
вид проводимых изменений (добавление, изменение или
удаление)
имя нового или изменяемого столбца
тип данных и длина нового или изменяемого столбца
значение по умолчанию нового или изменяемого столбца
Примечание
Па слайде приведен сокращенный синтаксис команды ALTER
ALTER TABLE рассматривается в последующих уроках.
TABLE. Более полно команда
Introduction to Oracle9Z: SQL 9-23
DEPT80
Добавление столбца
Новый столбец
HIRE OAlt
LAST NAME
AHNSAL
EMPLOYEE lb ?
149 | Zlotkey 1 126000” :29-' JAN 00
174 j 17G ! [Abel 132000 [11 MAY -96 [Taylor j 103200 [24-MAR-96'
“Вставка
столбца в
таблицу
DEPT80.”
DEPT80
EMPLOYEE JO
"fig
LAST NAME
ANNSAL
HIRE ОЛТЕ
JOE 10
1PGTMTI
1320®
103200
T1-MAY-96
.24-MAR-98
г
Copyright © Oracle Corporation, 2001. All rights reserved.
Добавление столбца
На слайде показало добавление столбца JOB_ID в таблицу DEPT8 0. Следует отменив, что
новый столбец становится последним столбцом таблицы.
Introduction to Oracle9/: SQL 9-24
4
Добавление столбца
* Столбцы добавляются с помощью предложения
ADD
ALTER TABLE deptSО
ADD (j ob_id VARCHAR2(9)) ;
Table altered.
• Новый столбец становится в таблице последним
149 Zlotkey
126000 :29- JAN 00
13200б"|Й-МАУ^96
103200 24-MAR-98
9-25
Copyright © Oracle Corporation, 2001. All rights reserved.
Указания по добавлению столбца
• Столбцы можно добавлять и изменять.
* Указать положение столбца в таблице невозможно. Новый столбец всегда становится
последним.
В примере на слайде в таблицу DEPT80 добавляется столбец JOB_ID . Столбец JOB ID
становится в таблице последним.
Примечание
Если в момент добавления столбца таблица уже содержит строки, новый столбец во всех
строках сначала принимает неопределенное значение.
Introduction to Oracle9z: SQL 9-25
Изменение столбца
• Вы можете изменить тип данных столбца,
размер и значение, используемое по
умолчанию.
ALTER TABLE deptBО
MODIFY (last_name VARCHAR2(30) );
Table altered.
• Новое значение по умолчанию влияет только
на последующие вставки в таблицу.
Изменение столбца
Измени п> определение столбца можно с помощью команды ALTER ' ABLE с предложением
MODIFY. Изменение столбца может включать изменение типа данных, размера и значения ио
умолчанию.
Указания
• Увеличение ширины или точности числовою столбца.
• Увеличение ширины числовых или символьных столбцов.
• Уменьшение ширины столбца, если он содержит только неопределенные значения или
таблица нс имеет строк.
• Измсненис типа данных, если столбец содержит неопределенные значения.
• Преобразование столбца с типом данных CHAR в VARCHAR2 или столбца с типом
данных VARCHAR2 в CHAR, если столбец содержи г неопределенные значения пли вы нс
меняете размер.
• Изменение значения, используемою по умолчанию, влияет только на последующие
вставки в таблицу.
Introduction to Огас1е9т: SQL 9-26
Удаление столбца
Для удаления столбца, который больше не нужен
можно использовать предложение drop column.
ALTER TABLE dept8О
DROP COLUMN job_id
Table altered.
ORACL_e
9-27
Copyright © Oracle Corporation, 2001. All rights reserved.
Удаление столбца
Для удаления столбца таблицы используется команда ALTER TABLE с предложением DROP
COLUMN. Эта возможность доступна в Огас1е8/ и последующих версиях.
Рекомендации
• Столбец может содержать или не содержать данные.
• Используя команду ALTER TABLE, можно удалить только один столбец в какой-то
момент времени.
• Последний столбец в таблице удалить нельзя.
• Откатить команду нельзя.
Introduction to Oracle9Z: SQL 9-27
ОПЦИЯ SET UNUSED
Для таблице большим числом строк процедура удаления столбца может занять мною времени.
Опция SET UNUSED помечает один или несколько столбцов как неиспользуемые. Эти столбцы
можно будет удалить из таблицы позже, когда база данных будет меньше загружена.. Эта
возможность доступна в Огас1е8/ и последующих версиях. Данная команда нс удаляет
физически значения столбца из каждой строки и поз тому выполняется быстрее, чем команда с
предложением DROP. Хотя столбцы, помеченные как UNUSED удаляются логически, откатить
назад эту команду невозможно. Для пользователей столбец перестает существовать. Ни запрос
вида “SELECT ни команда DESCRIBE уже не высветят столбцы, помеченные как
UNUSED. Болес того, в таблицу можно добавить новый столбец с гем же самым именем, что и
UNUSED. Информация о том, сколько ст олбцов помечено как неиспользуемые, может быть
получена из представления словаря данных USER_UNUSED_COL_TABS.
The DROP UNUSED COLUMN
DROP UNUSED COLUMNS физически удаляет из таблицы вес столбцы, помеченные как
UNUSED. Это поможет освободить место, которое занято столбцами, помеченными как
UNUSED и косвенно повысит производительность при работе с данной таблицей. Если в
таблице нет столбцов, помеченных как UNUSED, команда нс выдаст ошибки.
ALTER TABLE dept8О
SET UNUSED (last_name);
Table altered.
ALTER TABLE dept80
DROP UNUSED COLUMNS;
Table altered.
Introduction to Oracle9/: SQL 9-28
Удаление таблицы
* Удаляются все данные и структура таблицы
• Все незафиксированные транзакции
фиксируются
* Все индексы удаляются
• Откат этой команды невозможен
DROP TABLE dept80;
Table dropped.
ORACLG
9-29 Copyright © Oracle Corporation, 2001. All rights reserved.
Удаление таблицы
Команда DROP TABLE удаляет определение таблицы Oracle. Если таблица удаляется, база
данных теряет все данные, содержащиеся в таблице, и соответствующие индексы.
Синтаксис
DROP TABLE таблица
где:
таблица имя таблицы
Указания
• Все данные удаляются из таблицы.
• Все представления и синонимы остаются, но имеют статус недействительных.
• Все незафиксированные транзакции фиксируются.
• Удалить таблицу может только ее владелец или пользователь с привилегией DROP ANY
TABLE.
Примечание
Отменить результат команды DROP TABLE невозможно. Когда посылается команда DROP
TABLE , сервер Oracle не просит подтверждения. Если вы являетесь владельцем таблицы или
имеете привилегию высокою уровня, таблица удаляется немедленно. Все команды DDL
выполняют неявную команду COMMIT, что фиксирует транзакцию.
Introduction to Oracle9t: SQL 9-29
Переименование объекта
* Для переименования таблицы, представления,
последовательности или синонима
используется команда rename .
RENAME dept ТО detail_dept;
Table renamed.
• Вы должны быть владельцем объекта.
Copyright © Oracle Corporation, 2001. All rights reserved.
Переименование таблицы
К дополнительным командам DDL относится команда RENAME, которая используется для
переименования таблиц, представлении, последовательностей и синонимов.
Синтаксис
RENAME
старое_имя
ТО новое имя;
где:
старое имя
новое имя
старое имя габлнцы, представления или синонима,
новое имя таблицы, представления или синонима.
Чтобы переименовать объект, необходимо быть сю владельцем.
Introduction to Oracle9z: SQL 9-30
Усечение таблицы
• Команда truncate table:
- Удаляет все строки из таблицы
- Освобождает пространство, используемое
таблицей
TRUNCATE TABLE d©tail_dept;
Table truncated.
• Если используется команда truncate, откат
операций удаления строк невозможен.
* Альтернативный способ удаления строк -
команда delete (DML).
ORACLG
9-31 Copyright © Oracle Corporation, 2001. All rights reserved.
Усечение таблицы
Еще одной командой DDL является команда TRUNCATE TABLE, используемая для удаления
всех строк таблицы и освобождения памяти таблицы. Откат команды TRUNCATE TABLE
невозможен.
Синтаксис
TRUNCATE TABLE таблица;
где:
таблица имя таблицы
Для усечения таблицы необходимо быть се владельцем или иметь системную привилегию
DELETE ANY TABLE.
Команда DELETE также удаляет строки из габлицы, но не освобождает место в табличном
пространстве, занимаемое строками. Команда TRUNCATE выполняется быстрее. Вычеркивание
строк с помощью команды команды TRUNCATE происходит быстрее, чем по команде DELETE,
так как:
• TRUNCATE TABLE - это команда DDL, поэтому данные отмены не т енсрирутотся и
команда фиксируется неявно.
• При выполнении этой команды нс запускаются триггеры удаления
• Таблица, на которую организована ссылка при помощи внешнею ключа, очищена быть
не может. Отключите ограничение перед выполнением команды.
Introduction to Oracle9<: SQL 9-31
Добавление комментариев к таблице
• Добавить комментарий к таблице или столбцу
можно с помощью команды comment
COMMENT ON TABLE employees
IS 'Employee Information';
Comment created.
• Т^омментарикПиожнопросматривать^череТ"-
представления словаря данных:
- ALL_COL_COMMENTS
- USER_COL_COMMENTS
- ALL_TAB_COMMENTS
- USER_TAB_COMMENTS
Добавление комментариев к таблице
Команда COMMENT позволяет добавить комментарий длиной до 2000 байтов к столбцу,
таблице, представлению или моментальному снимку (snapshot). Комментарий хранится в
словаре данных. Увидеть сю можно в столбце COMMENTS в одном из следующих
представлений словаря :
• ALL_COL_COMMENTS
• USER_COL_COMMENTS
• ALL__TAB_COMMENTS
• USER_TAB_COMMENTS
Синтаксис
COMMENT ON TABLE таблица | COLUMN таблица.столбец
IS 'текст';
где:
таблица имя таблицы
столбец имя столбца таблицы
текст текст комментария
Удалить комментарий из базы данных можно с помощью той же команды, но с пустой строкой
С '):
COMMENT ON TABLE employees IS ' ' ;
Introduction to Oracle9r: SQL 9-32
Итоги
В этом уроке вы узнали, как использовать команды
языка DDL для создания, изменения, удаления и
переименования таблиц.
Команда Описание
CREATE TABLE Создает таблицу
ALTER TABLE Изменяет структуру таблицы
DROP TABLE Удаляет строки и структуру таблицы
RENAME Изменяет имя таблицы, представления, последовательности или синонима
TRUNCATE Удаляет все строки из таблицы и освобождает память таблицы
COMMENT Добавляет комментарий к таблице или представлению
9-33 Copyright © Oracle Corporation. 2001. Ail rights reserved.
Итоги
В этом урокс вы узнали, как использовать команды языка DDL для создания, изменения, удаления и
переименования таблиц, а также для усечения таблиц и добавления комментариев к таблице.
CREATE TABLE
• Создание таблицы.
• Создание таблицы на основе другой таблицы с помощью подзапроса.
ALTER TABLE
• Изменение структуры таблицы.
• Изменение ширины и типа данных столбца; добавление столбца.
DROP TABLE
• Удаление строк и структуры таблицы.
• Откат этой команды невозможен.
RENAME
• Переименование таблицы, представления, последовательности или синонима.
TRUNCATE
• Удаление всех строк из таблицы и освобождение памяти таблицы.
• Команда DELETE только удаляет строки; возможен откат.
COMMENT
• Добавление комментария к таблице или столбцу.
• Увидеть комментарии можно через представления словаря данных.
Introduction to Oracle9Z: SQL 9-33
Обзор практического занятия 9
• Создание новых таблиц
* Создание новой таблицы с помощью
синтаксиса create table as
• Изменение определений столбцов
• Проверка существования таблицы
* Добавление комментариев к таблицам
• Удаление таблиц
• Изменение таблиц
ORACL&
9-34 Copyright © Oracle Corporation. 2001. All rights reserved
Обзор практического занятия 9
С помощью команды CREATE TABLE создай ic новую таблицу. Убедитесь в том, что новая
таблица в бате данных создана. Сохраните команду в скрип г-файле, а затем выполните файл
для создания таблицы.
Introduction to Oracle9/: SQL 9-34
Практическое занятие 9
I. Создайте таблицу DEPT на основе следующею экземпляра таблицы. Сохраните команду в
скрипт-файле 1аЬ9_1. sql, а затем выполните файл для создания таблицы. Убедитесь в
том, что таблица создана.
Имя столбца ID NAME
Тип ключа
Nulls/Unique
Таблица FK
Столбец FK
Тип данных NUMBER VARCHAR2
Длина 7 25 .
Null?
Name
ID
|name
NUMBERS)
VARCH~AR2(25)
5
2. Заполните таблицу DEPT данными из таблицы DEPARTMENTS. Включите только нужные
вам столбцы.
Создайте таблицу ЕМР на основе экземпляра таблицы. Сохраните команду в скрипт-файле
1аЬ9_3. sql, а затем выполните ет о, чтобы создать таблицу. Убедитесь в том, что таблица
создана.
Имя столбца ID LAST_NAME FIRST_NAME DEPT_ID
Тип ключа
Nulls/Unique
Таблица FK
Столбец FK
Тип данных NUMBER VARCHAR2 VARCHAR2 NUMBER
Длина 7 25 2 7
1 Name Null?" . Type ШШЙЙШ
ID NUMBERS)
LAST_NAME VARCHAR2(25)
FIRST_NAME VARCHAR2(25)
DEPT_ID i - NUMBER(7)
Introduction to Oracle9/: SQL 9-35
Практическое занятие 9 (продолжение)
4. Измените столбец в таблице ЕМР так, чюбы он вмещал фамилии большей длины.
Проверьте изменение.
[ Null? Гуре
NUMBER(7)
LAST NAME [” ’ ’ [VARCHAR2(50)
FIRST.NAME
DEPT ID
|VARCHAR2(25)
[NUMBER?)
5. Убедитесь в том, что и таблица DEPT, и таблица ЕМР храня юя в словаре данных.
(Подсказка USER TABLES)
а 37"57 ’ ~~
• *"*'*** 'J-1 -.-."l* *j ‘“’Г1*’--’' . *’*. •r.-LT -- ’-Г **^*^^^*^*Rn*MaM>* -J- ILTT “_ЧТЖ*АААПГ "Л”.’ “in *>Aj* t * * "l’ ".r’L-'VT. “ ’ i*.it "u“ -L-|--.- Х’’-L’ 'l'*.’'’ »*Li*ii* • ЧААА*ААЛААЯ* • -A* A • АЙЛЯ- «• аяАйа ЧМ i ‘M ' «lAA* • "1АЧЯ w SA* ***<М*Ая^А* М ж» « ^1.» aAa* - Ila - । ~1и - - • - Тц 1 ^1^
DEPT
EMP * 11
6. Создайте таблицу EMPLOYEES2 на основе структуры таблицы EMPLOYEES, включив
только столбцы EMPLOYEE_ID, FIRST_NAME, LAST NAME, SALARY и
DEPARTMENT—ID. Присвойте столбцам новой таблицы имена ID, FIRST NAME,
LAST_NAME, SALARY и DEPT_ID.
7. Удалите таблицу EMP.
8. Переименуйте таблицу EMPLOYEES2 в ЕМР.
9. Добавьте описательные комментарии в определения таблиц DEPT и ЕМР. Проверьте
добавления в словаре данных.
10. Удалите столбец FIRST—NAME из таблицы ЕМР. Проверьте описание таблицы, чюбы
убедиться, что столбец удален.
11. Пометьте столбец DEPT_ID в таблице ЕМР как (UNUSED). Проверьте описание
таблицы, чтобы убедиться, что изменения выполнены.
12. Удалите из таблицы ЕМР все столбцы, помеченные как UNUSED Проверьте описание
таблицы, чтобы убедиться, что столбцы удалены.
Introduction to Oracle9/: SQL 9-36
Включение ограничений
ORACLG
Copyright © Oracle Corporation, 2001. All nghts reserved
Рассматриваемые вопросы
• Что такое ограничения?
• Создание и сопровождение ограничений
Цели урока
В этом уроке вы узнаете, как реализовать бнзнсс-нравила путем введения ограничений.
Introduction to Oracle9/: SQL 10-2
Что такое ограничения?
• Ограничения обеспечивают выполнение правил на
уровне таблицы
• Ограничения предотвращают удаление таблицы
при наличии подчиненных данных в других
таблицах
• В Oracle допускаются следующие виды
ограничений:
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
Ограничения
Сервер Oracle использущ ограничения или правила це лостности (constraints) во избежание
попадания неправильных данных в таблицы.
Ограничения используются в следующих целях:
• Контроль за соблюдением правил на уровне таблицы при каждой вставке, обновлении
или удалении данных. Операция может быть успешной только в случае выполнения
заданного условия.
• Запрет удаления таблицы при наличии подчиненных данных в друг их таблицах.
• Обеспечение правил для инструментария Oracle, например, Oracle Developer.
Виды ограничений
Oi раничснис Описание
NOT NULL Означает, что столбец нс может содержать неопределенное значение.
UNIQUE Обозначает столбец или группу столбцов, которые нс должны повторяйся в сгроках таблицы.
PRIMARY KEY Однозначно идентифицирует каждую строку таблицы.
FOREIGN KEY Создаст и контролирует связь по внешнем г ключу между столбцом и столбцом таблицы, на которую делается ссылка.
CHECK Задаст бизнес-правило (условие), которое должно выполняться.
Дополнительную информацию см. в руководстве C)racle9i SQL Reference, “CONSTRAINT ”
Introduction to Oracle9/: SQL 10-3
Указания по ограничениям
• Присваивайте имена ограничениям сами; в
противном случае сервер Oracle присвоит имя в
формате SYS_Cn.
• Создавайте ограничения:
- при создании таблицы;
- после создания таблицы.
• Устанавливайте ограничения на уровне столбца
или таблицы.
• Просматривайте ограничения в словаре данных.
ORACLE1
10-4
Copyright © Oracle Corporation 2001. All rights reserved.
Указания по ограничениям
Информация об ограничениях хранится в словаре данных. Ссылаться на ограничения легко, если
давать им имена, несущие смысл Имена ограничений должны соответствовать стандартным
правилам именования. Если вы нс присваиваете имя ограничению сами, его генерирует Oracle в
формате SYS Сп, где п - эю целое число, обеспечивающее уникальность имени ограничения.
Задавать ограничения можно при создании таблицы или после юго, как таблица была создана.
Информацию об имеющихся ограничениях на конкретную таблицу можно получить из
представления словаря данных USER_CONSTRAINTS.
Introduction to Oracle9/: SQL 10-4
10-5
Определение ограничений
CREATE TABLE [схема.]таблица
(столбец тил_данних [DEFAULT аьгражение]
[ограничение_на_уровне~столбца] ,
[ограничение_на_уровне_таблицы]
CREATE TABLE employees(
employee_id NUMBER(6) ,
first name VARCHAR2(20)
j ob_id VARCHAR2 (10)
CONSTRAINT emp_emp_id_pk
PRIMARY KEY
NOT NULL,
(EMPLOYEE ID));
Copyright © Oracle Corporation, 2001 All rights reserved.
Определение ограничений
На слайде показаны команды для задания ограничений при создании таблицы.
Синтаксис:
схема то же, что и имя пользователя.
таблица имя таблицы
DEFAULT выражение задает значение, которое должно использоваться по
умолчанию при отсутствии значения в команде INSERT.
столбец имя столбца
ти!1_данных тип данных и длина столбца
ограничение_ на_уровне_столбца
ограничение, являющееся частью определения столбца
ограничение_ на__уровне таблицы
ограничение, являющееся частью определения таблицы
Дополнительную информацию см. в руководстве Oracle9i SQL Reference, “CREATE TABLE.”
Introduction to Oracled/: SQL 10-5
Определение ограничений
• Ограничение на уровне столбца
• Ограничение на уровне таблицы
столбец,...
[CONSTRAINT имя_ограничения] тип_ограничения
(столбец, ...),
OPACLG
I
10-6
Copyright© Oracle Corporation, 2001. All rights reserved.
Определение ограничений (продолжение)
Обычно ограничения создаются одновременно с таблицей. Кроме того, ограничения могут быть
созданы после создания таблицы, а также временно отключены
Задавать ограничения можно на двух уровнях.
Уровень ограничения Описание
Столбец Ссылается на один столбец и является частью определения этою столбца. На этом уровне можно задать граничение любо! о тина.
Таблица rrftKerret Ссылается на один или несколько столбцов и нс входит в определения столбцов таблицы. На этом уровне можно задать любое ограничение, кроме NOT NULL.
имя огра.ничения
тип ограничения
имя ограничения
тип ограничения
Introduction to Oracle9Z: SQL 10-6
Ограничение not null
Предотвращает появление неопределенных
значений в столбце
[fMPyMEJO l| ASTNAME • EMAIL f ’"кю][Мпд :SMNG | 101 (kochhar [nKOCHHAR ; RHONE J4IIMBER-; 515 123 4567 515 123 4568 HIREJMTE 21 SEPt® JOB ( ID SAI ARY AO.PRES 1 24000 AD_VP Г' 17000 DEPARTMENT Ю 90 90 I J
I 102 | | ' 103 ; De Haan LOEHAAN Hunoid (ahunolo" 515 123 4569 590 423 4567 •13-JAN-93 &3-JAN-90 AD_VP : 17000 Г 90 ; IT PROG = 9000 I 60 i
1 104 Ernst BERNST p9i 0 423 4568 21 MAY-91 IT PROG 6000 ' 60 1
1 V | 20 8 0 Grant KGRANT Whalen J WHALEN j 011 44 1644 429263 515 123 4444 24 MAY-99 j 17-SEP-87 ' SA_REP 7000 AD_ASST 4400 10
20 rows selected
Ограничение not null
(ни одна строка не может
содержать
неопределенное
значение в этом столбце)
Ограничение
NOT NULL
Отсутствие ограничения
not null (любая строка
может содержать
неопределенное
значение в этом столбце)
ORACLe
Copyright © Oracle Corporation, 2001. All rights reserved.
Ограничение not null
Ограничение NOT NULL означает, чго столбец не можег содержать неопределенное значение.
Столбцы, не имеющие ограничения NOT NULL , могут содержать неопределенные значения по
умолчанию
Introduction to Oracle9/: SQL 10-7
Ограничение not null
Может быть задано только для столбца
CREATE TABLE employees( I
employee id NUMBER(6), I
last name varchar2 (25) not NULL/ < системное
Lv aVk-HMAVAtWYI z. \V,>A VAYAX\>'^MAVVZ«*Z/VV\VV-,».'A*'A'A1A<. ^VZA'>AvVVAV.«^vAv, Л А*»Л**ЛЧ A4\\ - AS5V.>SV/A'»S4-,V..>VVA»>,. . .*A‘, v/ v^^v.v, .v, -a*5A\vma vamvav ayvzz AA Л Г\ Ц Го”}
salary NUMBER(8,2), I ими
commission_pct NUMBER(2,2), I
Tixre__date DATE j|
CONSTRAINT emp__hire_date_nn |l
NOT NULL. A ’I
Пользовательское
имя
ORAC
10-8
Copyright© Oracle Corporation, 2001. All nghts reserved.
Ограничение NOT null (продолжение)
Ограничение NOT NULL можно задать только для столбца, но не д т таблицы.
В примере на слайде ограничение NOT NULL применяется к столбцам LAST_NAME и
HIRE_DATE таблицы EMPLOYEES. Т.к. имя ограничения для столбца LAST_NAME не задано,
сервер Oracle создаст его автоматически.
Имя ограничения можно задать во время создания ограничения:
... last_name VARCHAR2(25)
CONSTRAINT emp_last_name_nn NOT NULL...
Примечание
Приведенные примеры могут отсутствовать в прилагаемых учебных таблицах. По желанию
можно добавить эти Офаничения в таблицы.
Introduction to Oracle9Z: SQL 10-8
Ограничение unique
EMPLOYEES
Ограничение unique
EMPLOYEE ID
LAST NAME
*
a» «MAaAAAMBWwa
101 |Kochhar
102 |0e Haan
103 [Hunold
104 [Ernst
EMAIL
SkING
NkOCHHAR
[ldehaan
ahunold'
!BERNST
INSERT INTO
208 Smith
JSMITH
209 iSmith
JSMITH
Разрешается
He
^>азрешается
уже
существует)
ORACLE
10-9
Copyright © Oracle Corporation, 2001 All rights reserved.
Ограничение unique
Ограничение UNIQUE означает, чго каждое значение в столбце или наборе столбцов должно быть
уникально, т.е. никакие две строки таблицы не должны содержа и. одинаковые значения в этом
столбце или наборе столбцов. Столбец (или набор столбцов), указанный в определении
ограничения UNIQUE, называется уникальным ключом (unique key). Если уникальный ключ
состоит из нескольких столбцов, ею называют составным уникальным ключом (composite unique
key).
Ограничение UNIQUE допускает ввод неопределенных значений в столбцы уникальною ключа
при условии, что для этих же самых столбцов нс задано ограничение NOT NULL Фактически, в
отсутствии ограничения NOT NULL неопределенные значения в столбцах допускаются в любом
количестве строк., т.к. считается, что неопределенное значение не равно ничему. Неопределенное
значение в столбце (или всех столбцах составною уникального ключа) всегда удовлетворяет
требованию ограничения UNIQUE.
Примечание
Если в составном уникальном ключе имеются столбцы, где допускаются неопределенные
значения, то определенные значения в остальных столбцах не должны повторяться. Эю связано с
механизмом поиска для ограничений UNIQUE.
Introduction to Oracled/: SQL 10-9
Ограничение unique
Может быть задано на уровне столбца или таблицы
ORACLE
10-10 Copyright© Oracle Corporation, 2001. All rights reserved.
Ограничение unique (продолжение)
Ограничение UNIQUE можно задать как для столбца, так и для габлицы. Составной уникальный
ключ определяется на уровне таблицы.
В примере ia слайде ограничение UNIQUE применяется к столбцу EMAIL таблицы EMPLOYEES .
Имя ограничения - EMP_EMAIL_UK
Примечание
Сервер Oracle обеспечивает соблюдение ограничения UNIQUE, неявно создавая индекс по
столбцу или столбцам уникальною ключа.
a;- cni 4Л_1Л
Ограничение primary key
DEPARTMENTS
r— ГЛАВНЫЙ КЛЮЧ
DEPARTMENT JD DEPARTMENT^NAME ДОСАПОМЮ.
10 [Admmislralion 200 S zoi 1700 Гото
\ 20 Marketing
S 50 j 60 j ~ ~~8Q Shipping Sales i 124 [7™7777777" .1® » ж ° «UH 'Г1 •_ « X .1 J ? * - • 149 1500 Г 1400
He разрешается
(неопределенное
значение) I
••••••••••»•• ••••«•••••••«•
(Public Accounting
inane e
INSERT INTO
1400
1500
He разрешаемся
(50 уже существует)
ORACLE
10-11 Copyright © Oracle Corporation, 2001. All rights reserved
Ограничение primary key
Ограничение PRIMARY KEY соадасг главный ключ для таблицы. Главный ключ у каждой габлицы
можетбыть только один. Ограничение PRIMARY KEY -это столбец или набор столбцов,
уникально идентифицирующий каждую строку габлицы. Это ограничение обеспечивает
уникальность значения столбца или комбинации столбцов, а также контроль за тем, чтобы ни
одна из частей составного главного ключа не содержала неопределенное значение.
Introduction to Oracle9z: SQL 10-11
Ограничение primary key
Может быть задано на уровне таблицы или столбца
CREATE TABLE departments(
department_id NUMBER(4),
depar tment_name VARCHAR2(30)
CONSTRAINT dept_name_nn NOT NULL,
manager_id NUMBER(6),
location id NUMBER(4),
CONSTRAINT dept id pk PRIMARY KEY(department id));
ORACLE'
10-12 Copyright© Oracle Corporation, 2001. All rights reserved
Ограничение primary key (продолжение)
Ограничение PRIMARY KEY может быть задано как на уровне столбца, гак и на уровне таблицы.
Составной PRIMARY KEY описывается на уровне таблицы.
В примере на слайде ограничение PRIMARY KEY применяется к с 1 олбцу DEPARTMENT_ID
таблицы DEPARTMENTS. Имя ограничения - DEPT_ID_PK.
Примечание
Для столбца с ограничением PRIMARY KEY автоматически создастся индекс.
Introduction to Oracle9f: SQL 10-12
Ограничение foreign key
DEPARTMENTS
ГЛАВНЫЙ
КЛЮЧ"""0"
DEPARTMENT ID DEPARTMENT ДАМЕ **** MANAGERJO LOCATION ID
io | [ 20 i Administration Marketing 200 201 1700 1800
Г 50 [ Shipping 124 1500
I 60 [ 103 1400
I 80 | 149: 2500
EMPLOYEES
CMPLOYELJD
f ^LAST_NAME
100 [king
-.--..у—-W .«S ;
WDEPARTMENT ID
ВНЕШНИМ
КЛЮЧ
101
kochhar
102 De Haan
' 103 |Hunold '
107 Lorentz
60
He
-p INSERT INTO
200 :[Foid [ ~ — 9
201 Ford [ 60
разрешается
< (9 не
существует)
^“Разрешается
ORACLG'
10-13
Copyright © Oracle Corporation. 2001. All rights reserved.
Ограничение foreign key
Ограничение FOREIGN KEY, называемое также ограничением ссылочной целостности (referential
integrity constraint), обозначает столбец или комбинацию столбцов как внешний ключ {foreign key)
и через этот ключ устанавливает связь между данным столбцом и главным или уникальным
ключом этой же самой или другой таблицы. В примере на слайде столбец DEPARTMENT_ID
определен как внешний ключ таблицы EMPLOYEES (зависимой или дочерней). Этот внешний
ключ ссылается на столбец DEPARTMENT_ID в родительской I мастер”) таблице DEPARTMENTS.
Значение внешнего ключа должно соответствовать существующему значению первичного ключа
в родительской таблице или быть неопределенным (NULL).
Внешние ключи основаны на значениях данных и являются чисто noi ичсскими указателями, а нс
физическими.
Introduction to OracleSz: SQL 10-13
Ограничение foreign key
Может быть задано на уровне таблицы или
столбца
CREATE TABLE employees(
employee__id NU
last_name VA
email VA
salary NU
commission_pct NU
hire date DA
NUMBER(6),
VARCHAR2(25) NOT NULL,
VARCHAR2(25),
NUMBER(8,2),
NUMBER(2,2),
DATE NOT NULL,
department id NUMBER(4),
,W?.4V.V,-. .V.MAS '.'A*4 .VA’ -WAA' %’.%• *.«%V.V.4%Z-Va•% . ,*Л*Л ,,AV,.. « . * » -VS.4 . Л . ЛЧ WA . . WA л ЧЛА 'гл». Л AV^-.v. » - AV I VA'.’ $
CONSTRAINT emp_dept_fk FOREIGN KEY (department_id) |
REFERENCES departments(department_id),
CONSTRAINT" emp_email2uk UNIQUE(email)) ;............
10-14
Copyright © Oracle Corporation, 2001. Ail rights reserved.
Ограничение foreign key (продолжение)
Ограничение FOREIGN FEY может быть задано как на уровне столбца, так и на уровне таблицы.
Составной внешний ключ создается на уровне габлицы.
В примере на слайде ограничение FOREIGN KEY применяется к столбцу DEPARTMENT_ID
таблицы EMPLOYEES. Имя ограничения - EMP_DEPTID_FK.
FOREIGN KEY, основанный на одном столбце, может быть добавлен сра ту после описания этот о
столбца. Синтаксис отличается только тем, что фраза FOREIGN KEY отсутствует. Например’
CREATE TABLE employees
( - - .
department_id NUMBER(4) CONSTRAINT emp_deptid fk
REFERENCES departments(department_id),
Introduction to Oracle9/: SQL 10-14
Ограничение foreign key (продолжение)
Внешний ключ определяется в подчиненной (дочерней) таблице, а столбец, на который ссылается
ограничение, находится в родительской таблице. Для определения внешнего ключа используется
комбинация следующих ключевых слов:
• FOREIGN KEY - используется для определения столбца в подчиненной таблице в
ограничении на уровне таблицы.
• REFERENCES - указывает таблицу и столбец в родительской таблице.
• ON DELETE CASCADE - означает, что если удаляется строка родительской таблицы, то
одновременно с ней удаляются и подчиненные С1роки в дочерней таблице.
• ON DELETE SET NULL — при удалении строк в родительской таблице преобразует зависимое
значение внешнего ключа в неопределенное.
По умолчанию действует правило, ограничивающее изменение и удаление данных в родительской
таблице, для которых есть связанные данные в дочерней таблице.
Если опции ON DELETE CASCADE или ON DELETE SET NULL нс установлены, зо строка
родительской таблицы не может быть удалена до тех пор, пока на нее имеется ссылка в дочерней
таблице.
Introduction to Oracle9Z: SQL 10-15
Ограничение check
• Задает условие, которому должна удовлетворять
каждая строка
• Не допускаются:
- ссылки на псевдостолбцы currval, nextval, level и
rownum ;
- ВЫЗОВЫ функций SYSDATE, UID, USER И USERENV ;
- запросы, ссылающиеся на другие значения в других
строках.
, salary NUMBER (2)
CONSTRAINT emp_salary_min
I CHECK (salary > 0),
4 > • . . - 4 > A. • --w V. .• • • v - 2 4~ _ ... _
ORACLE
10-16 Copyright © Oracle Corporation. 2001. All rights reserved.
Ограничение check
Ограничение СНЕСКзадаст условие, которому должна удовлетворять каждая строка. Для задания
условия можно использовать такие же конструкции, как в условиях запроса, за исключением
следующего:
• ссылки на пссвдостолбцы CURRVAL, NEXTVAL, LEVEL и ROWNUM,
• вызовы функций SYSDATE, UID, USER и USERENV;
• запросы, ссылающиеся на другие значения в других строках.
В определении столбца может быть задано несколько ограничений CHECK. Количество
ограничений CHECK для одного столбца неограниченно.
Ограничения CHECK можно задать как на уровне столбца, так и на уровне таблицы
CREATE TABLE employees
(. . .
salary NUMBER(8,2) CONSTRAINT emp_salary_min
CHECK (salary > 0),
Introduction to Oracle9i: SQL 10-16
Синтаксис команды добавления
ограничения
Используйте команду alter table для:
* добавления или удаления ограничения
(изменить структуру ограничения нельзя).
• включения и выключения ограничений;
• добавления ограничения not null с помощью
предложения modify.
ALTER TABLE таблица
ADD [CONSTRAINT ограничение] тип (столбец);
10-17 Copyright © Oracle Corporation, 2001. All rights reserved.
Добавление ограничения
Ограничение для существующей таблицы можно добавить с помощью команды ALTER TABLE с
предложением ADD.
Синтаксис:
таблица имя таблицы
ограничение имя ограничения
тип тип ограничения
столбец имя столбца, на который ссылается ограничение
Задавать имя ограничению необязательно, но рекомендуйся. Если вы не задаете имена
ограничений сами, их генерирует система.
Указания
• Ограничение можно добавить, удалить, включить и выключить, но нельзя изменить ею
структуру.
• Добавить ограничение NOT NULL для существующего столбца можно командой ALTER
TABLE с предложением MODIFY.
Примечание: добавить столбец с ограничением NOT NULL можно только в случае, если в
таблице нет ни одной строки, или значения в столбце строго определены в каждой строке.
Introduction to Oracled/: SQL 10-17
Добавление ограничения
Добавление ограничения foreign key для
таблицы employees. Это ограничение означает,
что менеджер уже должен существовать как
служащий в таблице employees.
ALTER TABLE employees
ADD CONSTRAINT emp_manager_fk
FOREIGN KEY(manager_id)
REFERENCES employees(employee_id);
Table altered.
ORACLe
10-18 Copyright © Oracle Corporation. 2001. All rights reserved
Добавление ограничения (продолжение)
В примере на слайде создастся ограничение FOREIGN KEY для таблицы EMPLOYEES. Это
ограничение означает, что менеджер должен существовать как служащий в таблице EMPLOYEES.
Introduction to Oracle9i: SQL 10-18
Удаление ограничения
• Удаление ограничения для менеджеров из
таблицы EMPLOYEES
ALTER TABLE employees
DROP CONSTRAINT emp__manager__fk
Table altered.
• Удаление ограничения primary key для
таблицы departments и соответствующего
ограничения foreign key для столбца
EMPLOYEES. DEPARTMENT__ID
ALTER TABLE departments
DROP PRIMARY KEY CASCADE;
Table altered.
ORACLS
10-19 Copyright © Oracle Corporation, 2001. Ail rights reserved
Удаление ограничения
Имя удаляемого ограничения можно выяснить по представлениям словаря данных
USERJ2ONSTRAINTS и USER_CONS_COLUMNS . Затем удаление производится командой ALTER
TABLE с предложением DROP. Опция CASCADE предложения DROP вызывает одновременное
удаление всех подчиненных ограничений.
Синтаксис
ALTER TABLE таблица
DROP PRIMARY KEY | UNIQUE {столбец) I
CONSTRAINT ограничение [CASCADE];
где:
таблица имя таблицы
столбец имя столбца, к которому применяется ограничение
ограничение имя ограничения
Если вы удаляете ограничение, то информация о нем удаляется из словаря данных, а сервер Oracle
уже не будет обеспечивать его соблюдение.
Introduction to Oracie9/: SQL 10-19
Выключение ограничений
• Для выключения ограничения используется
команда alter table с предложением
DISABLE.
• Для отмены ограничения, связанного с
зависимыми строками, используется опция
CASCADE.
ALTER TABLE employees
DISABLE CONSTRAINT emp_emp_id_pk CASCADE
Table altered.
ORACLG
10-20
Copynght® Oracle Corporation 2001 All nghts reserved.
Выключение ограничений
Команда ALTER TABLE с предложением DISABLE позволяет отключить ограничение без его
удаления и повторного создания.
Синтаксис
ALTER TABLE таблица
DISABLE CONSTRAINT ограничение [CASCADE];
где:
таблица имя таблицы
ограничение имя ограничения
Указании
• Предложение DISABLE можно использован, как в команде CREATE TABLE, так и в
команде ALTER TABLE.
• Предложение CASCADE выключает также зависимые oi раничения.
• Отключение ограничений PRIMARY KEY или UNIQUE приводи! к удалению
сооптетствующею уникального индекса.
Introduction to Oracle9z: SQL 10-20
Включение ограничений
• Вновь включить выключенное ограничение в
определении таблицы можно с помощью
предложения enable.
ALTER TABLE
ENABLE CONSTRAINT
Table altered.
employees
emp__emp_id_jpk ;
Когда включается ограничение unique или
primary key, автоматически создается
соответствующий индекс.
10-21
Copyright © Oracle Corporation. 2001. All rights reserved.
Включение ограничений
Команда ALTER TABLE с предложением ENABLE позволяет включить ограничение без его
удаления и повторного создания.
Синтаксис
ALTER TABLE таблица
ENABLE CONSTRAINT ограничение;
где:
та блица
имя таблицы
ограничение
Указания
имя ограничения.
• Если ограничение включено, оно применяется ко всем данным таблицы. Все данные в
таблице должны удовлетворять этому ограничению.
• Если включается ограничение UNIQUE или PRIMARY KEY, автомагически создается
соответствующий индекс.
• Предложение ENABLE можно использовать как в команде CREATE TABLE, так и в команде
ALTER TABLE.
• Включение ограничения PRIMARY KEY, которое было выключено с опцией CASCADE, нс
включает никакою зависимого ограничения внешнего ключа.
Introduction to Oracle9£: SQL 10-21
Каскадное удаление ограничений
целостности
• Вместе с предложением drop для удаления
столбцов можно использовать ОПЦИЮ CASCADE
CONSTRAINTS.
• Опция cascade constraints удаляет все
ограничения целостности, которые ссылаются
на первичный или уникальный ключи,
основанные на удаляемых столбцах.
• При помощи предложения cascade
constraints также удаляются все
многостолбцовые ограничения, основанные на
удаляемых столбцах.
ORACLG
10-22 Copyright О Oracle Corporation, 2001. All rights reserved.
Каскадное удаление ограничений целостности
Следующий пример пояснит использование опции CASCADE CONSTRAINTS Предположим, что
таблица TEST1 создана командой:
CREATE TABLE testl (
pk NUMBER PRIMARY KEY,
fk NUMBER,
coll NUMBER,
CO12 NUMBER,
CONSTRAINT fk_constraint FOREIGN KEY (fk) REFERENCES testl,
CONSTRAINT ckl CHECK (pk > 0 and coll > 0),
CONSTRAINT ck2 CHECK (col2 > 0));
Выполнение следующих команд вызовет ошибку:
ALTER TABLE testl DROP (pk) ; — pk является первичным ключом
ALTER TABLE testl DROP (coll) coll задействован в ограничении целостности
-- целостности ckl
Introduction to Oracle9/: SQL 10-22
Каскадное удаление ограничений
целостности
Пример:
ALTER TABLE testl
DROP (pk) CASCADE CONSTRAINTS
Table altered.
ALTER TABLE testl
DROP (pk, fk, coll) CASCADE CONSTRAINTS
Table altered.
10-23 Copyright © Oracle Corporation, 2001. All rights reserved.
Каскадное удаление ограничений целостности (продолжение)
Следующая команда удалит столбец РК, первичный ключ , внешний ключ fk_constraint и
ограничение СК1 типа CHECK:
ALTER TABLE testl DROP (pk) CASCADE CONSTRAINTS;
Если все столбцы, которые входят в oi раничения целоегности удаляклся, то опцию CASCADE
CONSTRAINTS указывать не обязательно. Например, если внешних ключей из jtpyi их таблиц на
столбец РК нет, то следующая команда будет исполнена без ошибки, хоть в пен и отсутствует
опция CASCADE CONSTRAINTS:
ALTER TABLE testl DROP (pk, fk, coll);
Introduction to Oracle9Z: SQL 10-23
Просмотр ограничений
Просмотреть все определения и имена
ограничений можно путем запроса к таблице
USER CONS TRAINT S
SELECT constraint_name, constraint_type,
search_condition
FROM user constraints I
WHERE table_name - ’EMPLOYEES';
} 'il.'CONSTiWMilNAMf 4:^ “I c . T~“~ ’slAROFc^DlnON”” C’
iEMP_LAST NAME NN |ё |т/\5Т_МА1ИЕ'Ч5_|'ЮТNULL
feMP_EMAJL^NN... ...........[6 (“EMAIL" IS NOT NULL
;EMP_HIRE_DAIE_NN ’ "...... ft....~ [,'HIRE_DATE“ IS NOT NULL
teMPJOBJIN ’ [c |rJ0Bjb7is NOT NULL
:EMP^SALARY_MIN ...........(c |salaiy > 0
1EMP_EMA1LJJI< |U I
ORACLG
10-24 Copyright © Oracle Corporation, 2001 Ail rights reserved.
Просмотр ограничений
Проверить существование созданной таблицы можно с помощью команды DESCRIBE В этом
случае можно проверить только одно ограничение NOT NULL. Для просмотра всех ограничений
следует дагь запрос в представление USER_CONSTRAINTS.
Пример на слайде показывает все ограничения на таблицу EMPLOYEES.
Примечание
Ограничения, которым не дал имя владелец таблицы, получают имена, сгенерированные
системой. В выходном столбце типов ограничений символ “С” означает CHECK, Р — PRIMARY
KEY, R - ограничение ссылочной целостности, a U - UNIQUE. Следует отмстить, что ограничение
NOT NULL фактически является ограничением CHECK.
Introduction to Oracle9/: SQL 10-24
Просмотр столбцов, связанных с
ограничениями
Просмотреть столбцы, связанные с ограничениями,
можно путем запроса к представлению
USER_CONS_COLUMNS._____________________________
SELECT cons train t_namez column_name I
FROM Iuser_cons_columns ! I
WHERE table_name = ’EMPLOYEES•; I
|EMP_DEPT ГК EMP EMAIL NN DEPARTMENT JD EMAIL
|EMP_EMAILUK EMAIL
|emp_empjo_pik EMPLOYEEJD
|emp_hire_date_nn [eMP_JOB_FK HIREDATE JOBJD
[EMP_JOB_ NN JOBJD
ORACLe
10-25
Copynght © Oracle Corporation, 2001. All rights reserved.
Просмотр ограничений (продолжение)
Просмотреть имена столбцов, на которые наложены ограничения, можно с помощью
представления словаря данных USER_CONS COLUMNS . Эго представление особенно полезно
для ограничений, имена которым были присвоены автоматически сервером.
Introduction to Oracie9i: SQL 10-25
Итоги
• Типы ограничений:
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
• Просмотреть все ограничения и их имена можно путем
запроса к представлению user_constraints.
Итоги
С помощью ограничений сервер Oracle предотвращает попадание неправильных данных в
таблицы.
В Oracle используются следующие виды ограничений:
• NOT NULL
• UNIQUE
• PRIMARY KEY
• FOREIGN KEY
• CHECK
Просмотреть определения и имена всех щраничений можно с помощью запроса к
представлению USER_CONSTRAINTS.
Introduction to Oracle9z: SQL 10-26
Обзор практического занятия 10
* Добавление ограничений к существующим таблицам
• Добавление столбцов в таблицу
* Вывод информации из представлений словаря
данных
ORACLE
10-27
Copyright © Oracle Corporation, 2001. All rights reserved.
Обзор практического занятия 10
На этом занятии вы будете добавлять ограничения и столбцы в таблицы с помощью изученных
команд.
Примечание
Рекомендуется присваивать имена ограничениям, создаваемым в ходе выполнения
практического занятия.
Introduction to Oracle9i: SQL 10-27
Практическое занятие 10
I. Добавьте ограничение PRIMARY KEY на уровне таблицы ЕМР, используя столбец ID
11азовите ограничение my_emp_id рк.
Подсказка: ограничение целостности может быть включено с помощью команды
ALTER TABLE.
2. Создайте ограничение PRIMARY KEY для таблицы DEPT, используя столбец ID.
Ограничение должно получить название при создании. Назовите ограничение
my_dept_id_pk.
Подсказка: ограничение целостности может быть включено с помощью команды
ALTER TABLE.
3. Добавьте столбец DEPT_ID к таблице ЕМР. Добавьте ссылку в определение таблицы ЕМР,
благодаря которой служащий нс сможет быть приписан к несуществующему отделу.
11азовите ограничение my_emp_dept_id_f к.
4. Проверьте добавленные ограничения путем запроса к представлению
USER_CONSTRAINTS . Запомните типы и имена oiраничений. Сохраните команду в
скрипт-файлс 1аЫ0_4. sql.
CONSTRAINT NAME
MY DEPT ID PK
SYS C002541
MY EMP ID PK
MY EMP DEPT ID FK
чтения, заметьте, что созданы новые таолицы и новый индекс.
Если осталось время, сделайте следующие упражнение.
6. Измените таблицу ЕМР . Добавьте в нее столбец COMMISSION с типом данных NUMBER
точностью 2 и масштабом 2. Добавьте ограничение для столбца COMMISSION , чюбы
величина комиссионных была больше нуля.
inn HrarlaQ;- SOI 10-28
Introduction to Oracled/: SQL 10-29
Introduction to Oracle9n SQL 10-30