Материал: Graber_Martin_-_SQL_dlya_prostykh_smertnykh_-_2014

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Приложение С. Некоторые общие отклонения от стандарта SQL

бьшо обнаружено. Предположим, нужно узнать имена продавцов, включая тех, кото­ рые в данный момент не обслуживают никаких покупателей (в рассмотренных здесь таблицах их нет, но в реальной жизни такая ситуация возможна).

SELECT a.snum, sname, cname

FROM Salespeople а, Customers Ь

WHERE a.snum=b.snum (+);

что эквивалентно следующей операции UNION:

SELECT a.snum, sname, cname

FROM Salespeople а, Customers Ь

WHERE a.snum = b.snum

UNION

SELECT snum, sname, ·_ FROM Salespeople WHERE snum NOT IN

(SELECT snum

FROM Customers);

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

Ведение журнш~а

Реализация SQL, если она поддерживает доступ многих пользователей, скорее все­

го обеспечивает и какую-то возможность фиксации обращений к базе данных. Суще­ ствуют два основных вида таких средств: ведение журнала и ведение отчета (аудит).

Цели их применения различны.

Ведение ;журнала выполняется для защиты данных от сбоев в системе. Во-первых, ис­

пользуется зависящая от реализации процедура, которая позволяет восстановить текущее

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

ляющая установить режим ведения журнала:

334

Ведение J1еурнш~а

SЕТ JORNAL ON;

Ведение отчета выполняется для обеспечения защиты. В нем фиксируется, кто и какие действия выполнял над базой данных. Эта информация хранится в виде табли­ цы, доступной для ограниченного круга привилегированных пользователей. Потреб­ ность в проверке каждого отдельного действия возникает крайне редко, тогда как для хранения такого подробного отчета требуется очень большой объем памяти. Поэтому на практике можно проверять отдельных пользователей, конкретные действия и объ­ екты данных. Одна из допустимых форм команды AUDIT:

AUDIT INSERT ON Salespeople ВУ Diane;

Предложения ON или ВУ могут быть опущены, в результате задается режим про­ верки для всех объектов и для всех пользователей соответственно. Если вместо AUDIТ INSERT указать AUDIT ALL, будут фиксироваться все действия пользователя Diane, в том числе и с файлом базы данных Salespeople.

335

Справка по синтаксису

и командам,

Приложение D. Справка по синтаксису и командам

Назначение данного приложения - дать быструю и точную справку и сжатые

определения различных команд SQL. Первая часть содержит элементы, используемые для создания SQL-команд; вторая - детали синтаксиса и краткие объяснения команд.

Рассматриваются следующие стандартные соглашения (названные ВNF-со­ rлашениями):

•Ключевые слова задаются большими буквами.

•SQL и другие специальные термины указаны в угловых скобках и курсивом

(< апd >).

•Любые части команды указаны в квадратных скобках ([ and ]).

•Круглые скобки (...) показывают, что предшествующая часть команды может быть повторена любое число раз.

•Вертикальный разделитель ( 1) указывает, что все стоящее перед ним можно за­

менить всем тем, что за ним следует.

• Фигурные скобки ( { and }) определяют: все, что указано внутри них, должно рас­

сматриваться как единое целое при применении к нему других символов.

•Два двоеточия и знак равенства(: : =)означают, что правая часть этой конст­ рукции является определением ее левой части.

Кроме того, последовательность(.,..) означает: все предшествующее можно повто­

рять произвольное число раз, причем каждое вхождение в ней отделяется запятой. Ат­

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

(* nonstandard *).

Замечание: Терминология, используемая здесь, не является официальной термино­ логией ANSI. Официальная терминология представляется слишком запутанной, и ее уп­ ростили. Поэтому иногда используются термины, отличные от ANSI, либо термины ANSI, но с некоторыми отличиями от стандарта. Например, определение <предикат> содержит две части: одна часть - та, которая стандартно называется <предикат>, вто­

рая часть - та, которая называется <условие поиска>.

Элементы SQL

Этот раздел содержит элементы команд SQL. Они разбиты на две категории: ос­ новные элементы языка и функциональные элементы языка. Основные элементы язы­

ка - это основные строительные блоки языка; когда SQL выполняет разбор команды, он, прежде всего, оценивает каждый символ в тексте команды в терминах этих элемен­

тов. <Разделитель> отделяет одну часть команды от другой; все то, что расположено

338

Элементы SQL

между двумя соседними <разделителями> считается единицей. На базе выделения та­ ких единиц в тексте запроса SQL интерпретирует команду.

Элементы, отличные от ключевых слов, являются функциональными и интерпре­ тируются в SQL. Части команды, расположенные между <разделите'lялtи>, имеют специальное значение. Некоторые из них специфичны для отдельных команд и обсуж­ даются вместе с соответствующими командами в этом приложении; другие - общие

для множества команд.

Функциональные элементы определяются в терминах друг друга или в терминах их же самих. Например, понятие <предикат> определяется рекурсивно через это же понятие, поскольку для создания <предиката> используются AND или OR и отдель­ ные <предикаты>.

Определение <предиката> вы найдете в отдельном разделе данного приложения из­ за множественности его форм и сложности этого функционального элемента. Определе­ ние предиката следует за рассмотрением прочих функциональных элементов языка.

Основные элементы языка

Элемент

Определение

<разд~ите'lь>

<ко,1шентарий>l<проб~>l<новая строка>

<комментарий>

- - <строка> <новая строка>

<пробе1>

символ пробела

<новая строка>

символ конца строки (зависит от реализации)

<идентификатор>

<буква>[ {<буква или цифра>! <символ

 

подчеркивания>} ...]

 

Замечание: В строгом соответствии со стандартом

 

ANSI, буквы могут быть только большими

 

и <идентификатор> не может содержать

 

более 18 символов.

<си.wвол подчеркивания>

Элемент

Определение

<символ процента>

%

<ограничитель>

любой из следующих: , ( ) < > . : = + * - / <> >= <=

или

<строка>

<строка>

[любая печатаемая строка в одиночных кавычках]

Элемент

Определение

339

Источник: https://studfile.net/preview/16418473/