Понимание SQL - Мартин Грубер
Шрифт:
Интервал:
Закладка:
GRANT (ПЕРЕДАТЬ ПРАВА)
Синтаксис (стандартный)
GRANT ALL [PRIVILEGES] | {SELECT | INSERT | DELETE | UPDATE [(<column llst>)]
| REFERENCES [(<column llst>)l } .,..
ON <table name> .,..
TO PUBLIC | <Authorization ID> .,..
[WITH GRANT OPTION];
Аргумент ALL(ВСЕ), с или без PRIVILEGES(ПРИВИЛЕГИИ), включает каждую ривилегию в список привилегий. PUBLIC(ОБЩИЙ) включает всех существующих пользователей и всех созданых в будущем. Эта команда дает возможность передать права для выполнения действий в таблице с указаным именем. REFERENCES позволяет дать права чтобы использовать столбцы в списке столбцов<column list> как родительский ключ для внешнего ключа. Другие привилегии состоят из права выполнять команды для которых привилегии указаны их имнами в таблице. UPDATE, подобен REFERENCES, и может накладывать ограничения на определенные столбцы. GRANT OPTION дает возможность передавать эти привилегии другим пользователям.
Синтаксис (нестандартный )
GRANT DBA | RESOURCE | CONNECT ... .
TO <Authorization ID> .,..
[IDENTIFIED BY> password>
CONNECT дает возможность передавать право на регистрации и некоторые другие ограниченные права. RESOURCE дает пользователю право создавать таблицы. DBA дает возможность передавать почти все права. IDENTIFIED BY используется вместе с CONNECT, для создания или изменения пароля пользователя.
INSERT (ВСТАВКА)
Синтаксис
INSERT INTO <table name> (<column llst>)
VALUES (<value llst>) I <query>;
INSERT создает одну или больше новых строк в таблице с именем <table name>. Если используется предложение VALUES, их значения вставляются в таблицу с именем< table name>. Если запрос<query > указан, каждая строка вывода будет вставлена в таблицу с именем <table name>. Если список столбцов<column list> отсутствует, все столбцы таблицы<table name>, принимаются в упорядоченном виде.
OPEN CURSOR (ОТКРЫТЬ КУРСОР)
Синтаксис
EXEC SQL OPEN CURSOR <cursorname><SQL term>
OPEN CURSOR выполняет запрос связанный с курсором<cursor name>. Вывод может теперь извлекать по одной строке для каждой команды FETCH.
REVOKE (*NONSTANDARD*) (ОТМЕНИТЬ ПОЛНОМОЧИЯ) (НЕСТАНДАРТНО)
Синтаксис
REVOKE { ALL [PRIVILEGES]
| <privilege> .,.. } [ON <table name>]
FROM { PUBLIC
| <Authorization ID> .,.. };
Привелегия<privelege> может быть любой из указаных в команде GRANT. Пользователь дающий REVOKE должен иметь те же привелегии, что и пользователь который давал GRANT. Предложение ON может быть использовано, если используется привилегия специального типа для особого объекта.
ROLLBACK (WORK) (ОТКАТ) (ТРАНЗАКЦИИ)
Синтаксис
ROLLBACK WORK;
Команда отменяет все изменения в базе данных, сделанные в течение текущей транзакции. Она кроме того заканчивается текущую, и начинает новую транзакцию.
SELECT (ВЫБОР)
Синтаксис
SELECT { IDISTINCT | ALL] < value expression > .,.. } / *
[INTO <host variable list> (*embedded only*)]
FROM < table reference > .,..
[WHERE <predicate>]
[GROUP BY <grouping column> .,..]
[HAVING <predicate>]
[ORDER BY <ordering column> [ASC | DESC] .,.. ];
Это предложение огранизует запрос и выводит значения из базы данных( см. Глава 3 - Глава 14). Применяются следующие правила:
* Если ни ALL, ни DISTINCT - не указаны, принимается - ALL.
* Выражение<value expression> состоит из <column spec>, агрегатной функции <aggregate funct>, нестандартной функции<nonstandard function>, постоянной<constant>, или любой их комбинации с операторами в допустимых выражениях.
* Ссылаемая таблица<table reference>, состоит из имени таблицы, включая префикс владельца если текущий пользователь не владелец, или синоним(нестандартно) для таблицы. Таблица может быть или базовой таблицей или просмотром. В принципе, псевдоним может указать, какой синонимом используется для таблицы только на время текущей команды. Имя таблицы или синоним должны отделяться от псевдонима одним или более разделительными знаками<separator>.
* Если используется GROUP BY, все столбцы<column spec> используемые в предложении SELECT, должны будут использоваться как группа столбцов<grouping column>, если они не содержатся в агрегатной функции<aggregate funct>. Вся группа столбцов<grouping column> должна быть представлена среди выражений< value expressions> указанных в предложении SELECT. Для каждой отдельной комбинации значений группы столбцов<grouping column>, будет иметься одна и только одна строка вывода.
* Если HAVING используется, предикат<predicate > применяется к каждой строке произведенной предложением GROUP BY, и те строки которые сделают этот предикат верным, будут выведены.
* Если ORDER BY используется, вывод имеет определенную последовательность. Каждый идентификатор столбца<column identifer> ссылается к указанному <value expression> в предложении SELECT. Если это <value expression> является указанным столбцом<column spec>, <column identifier> может быть таким же как <column spec>. Иначе <column identifier> может быть положительным целым числом, указывающим место где находится <value expression> в последовательности предложения SELECT. Вывод будет сформирован так чтобы помещать значения содержащиеся в <column identifier > в порядке возрастания, если DESC не указан. Имя идентификатора столбца<column identifier> стоящее первым в предложении ORDER BY будет предшествовать позже стоящим именам в определении последовательности вывода.
Предложение SELECT оценивает каждую строку-кандидат таблицы в которой строки показаны независимо. Строка-кандидат определяется следующим образом:
* Если только одна ссылаемая таблица<table reference> включена, каждая строка этой таблица в свою очередь является строкой-кандидатом.
* Если более одной ссылаемой таблицы<table reference> включено, каждая строка каждой таблицы должна быть скомбинирована в свою очередь с каждой комбинацией строк из всех других таблиц. Каждая такая комбинация будет в свою очередь строкой-кандидатом.
Каждая строка-кандидат производит значения, которые делают предикат <predicate > в предложении WHERE верным, неверным, или неизвестным.
Если GROUP BY не используется, каждое<value expression> применяется в свою очередь для каждой строки-кандидата чье значение делает предикат верным, и результатом этой операции является вывод. Если GROUP BY используется, строки-кандидаты комбинируются, используя агрегатные функции. Если никакого предиката<predicate > не установлено, каждое выражение<value expression> применяется к каждой строке-кандидату или к каждой группе. Если указан DISTINCT, дубликаты( двойники) строк будут удалены из вывода.
UNION (ОБЪЕДИНЕНИЕ)
Синтаксис
<query> {UNION [ALL] <query> } . . . ;
Вывод двух или более запросов<query> будет объединен. Каждый запрос <query > должен содержать один и тот же номер <value expression> в предложение SELECT и в таком порядке что 1.. n каждого, совместим по типу данных<data type> и размеру<size> с 1.. n всех других.
Синтаксис
UPDATE <table name>
SET { <column name>=<value expression> } .,..
{[ WHERE <predlcate>]; }
| {[WHERE CURRENT OF <cursorname>]
<SQL term>]}
UPDATE изменяет значения в каждом столбце с именем<column name> на соответствующее значение<value expression>. Если предложение WHERE использует предикат<predicate>, то только строки таблиц чьи текущие значения делают тот предикат<predicate> верным, могут быть изменены. Если WHERE использует предложение CURRENT OF, то значения в строке таблицы с именем<table name> находящиеся в курсоре с именем<cursor name> меняются. WHERE CURRENT OF пригодно для использования только во вложенном SQL, и только с модифицируемыми курсорами. При отсутствия предложения WHERE - все строки меняются.
WHENEVER (ВСЯКИЙ РАЗ КАК)
Синтаксис
EXEC SQL WHENEVER <SQLcond> <actlon> <SQL term>
<SQLcond> ::=SQLERROR | NOT FOUND | SQLWARNING
(последнее - нестандартное)
<action> ::=CONTINUE | GOTO <target> | GOTO <target>
<target> ::=зависит от главного языка
Приложение E. ТАБЛИЦЫ ИСПОЛЬЗУЕМЫЕ В КНИГЕ
ТАБЛИЦА 1: ПРОДАВЦЫ
snum
sname
city
comm
1001
Peel
London
.12
1002
Serres
San Jose
.13
1004
Motika
London
.11
1007
Rifkin
Barcelona
.15
1003
Axelrod
New York
.10
ТАБЛИЦА 2: ЗАКАЗЧИКИ
cnum
cname
city
rating
snum
2001
Hoffman
London
100
1001
2002
Giovanni
Rome
200
1003
2003
Liu
SanJose
200
1002
2004
Grass
Berlin
300
1002
2006