Понимание SQL
Шрифт:
* Если 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 | Clemens | London | 100 | 1001 |
2008 | Cisneros | SanJose | 300 | 1007 |
2007 | Pereira | Rome | 100 | 1004 |
ТАБЛИЦА 3: ПОРЯДКИ
onum | amt | odate | cnum | snum |
3001 | 18.69 | 10/03/1990 | 2008 | 1007 |
3003 | 767.19 | 10/03/1990 | 2001 | 1001 |
3002 | 1900.10 | 10/03/1990 | 2007 | 1004 |
3005 | 5160.45 | 10/03/1990 | 2003 | 1002 |
3006 | 1098.16 | 10/03/1990 | 2008 | 1007 |
3009 | 1713.23 | 10/04/1990 | 2002 | 1003 |
3007 | 75.75 | 10/04/1990 | 2004 | 1002 |
3008 | 4723.00 | 10/05/1990 | 2006 | 1001 |
3010 | 1309.95 | 10/06/1990 | 2004 | 1002 |
3011 | 9891.88 | 10/06/1990 | 2006 | 1001 |