КНИГА
25.04.01

Предыдущая часть

Краткое практическое руководство разработчика информационных систем на базе СУБД Oracle

© 2000 А.И. Власов
С.Л. Лыткин
кафедра "Конструирование и технология производства электронной аппаратуры" МГТУ им.Н.Э.Баумана
В.Л. Яковлев
кафедра "Автоматизированные информационные системы" МГТУ им.Н.Э.Баумана

Эта книга была размещена на сайте www.citforum.ru

ОПЕРАТОРЫ МАНИПУЛИРОВАНИЯ ДАННЫМИ.

Среди операторов SQL данного класса мы подробно рассмотрим только четыре основных оператора: INSERT - ВСТАВКА ДАННЫХ, SELECT - ВЫБОРКА ДАННЫХ, DELETE - УДАЛЕНИЕ ДАННЫХ, UPDATE - ИЗМЕНЕНИЕ ДАННЫХ.

INSERT

Вставить строки в таблицу или в базовую таблицу представления.

ОТСЮДА

Пример: В качестве примера рассмотрим вставку даннух в таблицу "Праздничные дни" (PRAZDNIKI)

insert into prazdniki values ('понедельник');
insert into prazdniki values ('вторник');
insert into prazdniki values ('среда');
insert into prazdniki values ('четверг');
insert into prazdniki values ('пятница');
insert into prazdniki values ('суббота');
insert into prazdniki values ('воскресенье');

SELECT

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

Select_list::=

table_list::=

update_list::=

Пример 1: Лучшим примером, иллюстрирующим работу оператора SELECT, является юмористический пример "Как программист SQL охотится на слонов". Дано: Слон живет в Африке. Задача: Что надо сделать чтобы найти слона? Метод решения: Программист SQL делает SELECT.

SELECT "СЛОН" FROM AFRICA; Итог: Все африканские слоны найдены.

Проиллюстрируем использование оператора SELECT на нескольких примерах.

Пример 2: Показать всех врачей заведенных в БД (см. рис.10).

SELECT * FROM doctors ORDER BY dc_name;

Результат: все записи из таблицы DOCTORS отсортированные по полю dc_name по алфавиту.

Пример 3. Показать всех врачей с кодом специальности равным 111.

SELECT dc_name
   FROM doctors
   WHERE dc_speciality_nnn = 111
ORDER BY dc_name;

Пример 4. Показать всех врачей с кодом специальности равным 111 или 112.

SELECT dc_name
   FROM doctors
   WHERE dc_speciality_nnn = 111
           OR dc_speciality_nnn = 112
ORDER BY dc_name;

2-ой способ

SELECT dc_name
   FROM doctors
   WHERE dc_speciality_nnn in (111, 112)
ORDER BY dc_name;

Операции над множествами в операторах SELECT

Операция

Выполняемые функции

UNION

Комбинирует два запроса; возвращает все неповторяющиеся строки, извлеченные хотя бы одним из запросов.

UNION ALL

Комбинирует два запроса; возвращает все строки, извлеченные хотя бы одним из запросов, вклячая повторяющиеся.

INTERSECT

Комбинирует два запроса; возвращает все неповторяющиеся строки, извлеченные каждым из запросов.

MINUS

Комбинирует два запроса; возвращает все неповторяющиеся строки, извлеченные первым запросом, но не извлеченные вторым.

Операция

Выполняемые функции

(+)

Указывает, что предшествующий столбец является столбцом внешнего соединения.

*

Используется вместо имен столбцов при выборке всех

столбцов из таблицы или представления.

PRIOR

Используется в иерархическом древовидном запросе для определения зависимости между родительскими и дочерними строками. Смотрити оператор SELECT.

ALL

Оставляет повторяющиеся строки в результате запроса (установлен по умолчанию ALL, но не DISTINCT).

DISTINCT

Удаляет повторяющиеся строки из результата запроса.

Пример 5. Показать всех врачей с кодом специальности равным 111 и работающих в подразделении №2.

SELECT dc_name
   FROM doctors
   WHERE dc_speciality_nnn = 111
        AND dc_shtat_nnn = 2
ORDER BY dc_name;
Пример 6. Показать всех пациентов врача Иванова А. А.
SELECT pt.pt_name
   FROM patients pt
   ,doctors dc
   WHERE dc.dc_nnn = pt.pt_dc_nnn
         AND dc.dc_name = 'ИВАНОВ А. А.'
ORDER BY pt.pt_name;

На этом примере остановимся подробнее: Первое - здесь впервые появились в запросе псевдонимы таблиц (pt, dc), это очень важный элемент , так как может оказаться, что по нерадивости у Вас в обоих таблицах имеются одинаковые наименования столбцов и тогда для обращения к ним потребуется использование псевдонимов таблиц. Второе - Делая запрос к нескольким таблицам необходимо использовать джойны (dc.dc_nnn = pt.pt_nnn), т.е. явно задавать те поля, которые определяют отношения между таблицами, причем чесло джойнов равняется N-1, где N - число таблиц в запросе. Третье - выборка данных по условию dc.dc_name = 'ИВАНОВ А. А.' накладывает очень жесткие требования на правильность ввода данных (они могут быть набиты маленькими буквами, через несколько пробелов и т.п.), не учет этих особенностей приведет к тому, что некоторая нужная информация не будет выбрана. Чтобы избежать этого лучше в условиях использовать числовые поля, например личный номер врача (если он имеется БД).О принципах написание SELECT можно написать несколько томов, мы здесь изложили только несколько, с нашей точки зрения, важных особенностей, более подробную информацию по синтаксису можно всегда найти в справочной литературе.

DELETE

Удаляет строки из таблицы или из базовой таблицы представления, удовлетворяющие условию WHERE. Удаляет все строки, если условие WHERE не задано.

Пример:

Удаляем все записи из таблицы Праздничных дней.delete from prazdniki;

UPDATE

Изменяет существующие значения в таблице или в представлении (View).

Операции над объектами базы данных.

DROP

Эта команда удаляет объекты и ограничения из базы данных. Для этого действия требуются соответствующие привилегии. Например, для удаления общего канала связи базы данных требуется привилегия

DROP PUBLIC DATABASE LINK.

cluster_clause::=

contects_clause::=

EXPLAIN PLAN

Описывает каждый шаг плана выполнения оператора SQL и помещает (если задано) это описание в указанную таблицу

ROLLBACK (управление транзакцией)

Отменяет все изменения, сделанные до контрольной точки. Отменяет все изменения, произведенные в текущей транзакции, если контрольная точка не задана.

Команды управления привилегиями и ролями

REVOKE (системные привилегии и роли )

Отменяет системные привилегии и роли, ранее предоставленные пользователям и ролям. Действие, обратное команде GRANT (системные привилегии и роли ) .

REVOKE (привилегии доступа к объектам)

Отменяет привилегии доступа к определенному объекту, ранее предоставленные пользователям и ролям. Действие, обратное команде GRANT (привилегии доступа к объектам). CREATE ROLEСоздает роль.

SET ROLE (управление сеансом)

Разрешает заданную роль в текущем сеансе и запрещает псе другие роли пользователя. Должна выполняться в начале транзакции вместе с оператором SET TRANSACTION.

GRANT (системные привилегии и роли)

Предоставляет системные привилегии пользователям и ролям. Предоставляет роли пользователям и другим ролям.

GRANT (привилегии доступа к объектам)

Предоставляет привилегии доступа к определенным объектам (таблицам, представлениям, синонимам, пакетам, процедурам и т.д.) пользователям и ролям.

Продолжение статьи

Дополнительную информацию Вы можете получить в компании Interface Ltd.

Обсудить на форуме Oracle
Отправить ссылку на страницу по e-mail


Interface Ltd.

Ваши замечания и предложения отправляйте автору
По техническим вопросам обращайтесь к вебмастеру
Документ опубликован: 25.04.01