Текст
                    Введение в 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