Программирование >>  Понятие sql 

1 ... 84 85 86 [ 87 ] 88 89 90 ... 95


выведут строки, произведенные обоими запросами, производящими всех продавцов в Лондоне, которые имели по крайней мере одного заказчика, размещенного там также. С другой стороны, запрос

SELECT *

FROM Salespeople WHERE city = London

MINUS SELECT *

FROM Salespeople

WHERE London IN (SELECT sity

FROM Customers

WHERE Customers.snum = Salespeople.snum);

удалит строки, выбранные вторым запросом из вывода первого, и таким образом, будут выводены все продавцы в Лондоне, которые не имели там заказчиков. MINUS иногда еще называют DIFFERENCE (ОТЛИЧИЕ).

АВТОМАТИЧЕСКИЕ ВНЕШНИЕ ОБЬЕДИНЕНИЯ

ВГлаве14 мы обсуждали внешнее обьединение и показывали вам, как выполнять его, используя команду UNION. Некоторые программы базы данных имеют более непосредственный способ выполнения внешних обьединений. В некоторых реализациях, вводимый знак + после предиката может выводить строки, которые удовлетворяют условию, также как и строки, которые ему не удовлетворяют. В условии предиката может содержаться поле, совпадающее для обеих таблиц, и NULL значения будут вставлены там, где такого совпадения не будет найдено.

Например, предположим, вы хотите видеть ваших продавцов и соответствующих им заказчиков, не исключая тех продавцов, которым не назначено ни одного заказчика (хотя такого нет в наших типовых таблицах, но в действительности это возможно):

SELECT a.snum, sname, cname FROM Salespeople a, Customers b WHEREa.snum = b.snum(+);

Это является эквивалентом следующего объединения (UNION):

SELECT a.snum, sname, cname FROM Salespeople a, Customers b WHERE a.snum = b.snum

UNION

SELECT snum, sname, FROM Salespeople WHERE snum NOT IN (SELECT snum FROM Customers);

Мы считаем, что подчеркивания будут отображены NULL значениями (см. команду FORMAT ранее в этом приложении, где описывалось отображение NULL значениями).



ОТСЛЕЖИВАНИЕ ДЕЙСТВИЙ

Ваша SQL реализация достаточна хороша, если она доступна многим пользователям, чтобы обеспечивать для них некий способ слежения за действиями, выполняемыми в базе данных. Имеются две основные формы, чтобы делать это:

Journaling (Протоколирование) и Auditing (Ревизия).

Эти формы отличаются по назначению.

Journaling применяется с целью защиты ваших данных при разрушении вашей системы. Сначала Вы используете реализационно-зависимую процедуру, чтобы архивировать текущее содержание вашей базы данных, поэтому копия ее содержания где-нибудь будет сохранена. Затем вы просматриваете протокол изменений сделанных в базе данных. Он сохраняется в некоторой области памяти, но не в главной памяти базы данных а желательно на отдельном устройстве, и содержит список всех команд которые произвели изменения в структуре или в содержании базы данных. Если у вас вдруг появились проблемы и текущее содержание вашей базы данных оказалось нарушенным, вы можете повторно выполнить все изменения зарегистрированные в протоколе на резервной копии вашей базы данных, и снова привести вашу базу данных в состояние, которое было до момента последней записи в протокол. Типичной командой, чтобы начать протоколирование, будет следующая:

SET JOURNAL ON;

Auditing используется c целью защиты. Она следит за тем, кто и какие действия выполнял в базе данных, и сохраняет эту информацию в таблице, доступной только очень немногим высоко привилегированным пользователям. Конечно, вы редко будете прибегать к процедуре ревизии, потому что очень скоро она займет много памяти и вам будет сложно работать в вашей базе данных. Но вы можете устанавливать ревизию для определенных пользователей, определенных действий или определенных объектов данных. Имеется такая форма команды AUDIT:

AUDIT INSERT ON Salespeople BY Diane;

Или предложение ON, или предложение BY могут быть исключены, устанавливая ревизию либо всех объектов, или всех пользователей, соответственно. Применение AUDIT ALL, вместо AUDIT INSERT, приведет к отслеживанию всех действий Diane в таблице Продавцов.



Приложение D

СПРАВОЧНИК ПО КОМ1АНДАМ И СИНТАКСИСУ



1 ... 84 85 86 [ 87 ] 88 89 90 ... 95

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика