Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
М. ГРУБЕР_SQL.doc
Скачиваний:
22
Добавлен:
18.04.2019
Размер:
1.4 Mб
Скачать

Sql команды

Этот раздел подробно описывает синтаксис различных команд SQL. Это даст вам возможность быстро отыскивать команду, находить ее синтаксис и краткое описание ее работы.

ИМЕЙТЕ ВВИДУ: Команды, которые начинаются словами EXEC SQL, а также команды или предложения заканчивающиеся словом — <SQL term> могут использоваться только во вложенном SQL.

BEGIN DECLARE SECTION

(НАЧАЛО РАЗДЕЛА ОБЪЯВЛЕНИЙ)

Синтаксис

EXEC SQL BEGIN DECLARE SECTION <SQL term> <host-language variable declarations> EXEC SQL END DECLARE SECTION<SQL term>

Эта команда создает раздел программы главного языка для объявления в ней главных переменных, которые будут использоваться во вкладываемых операторах SQL. Переменная SQLCODE должна быть включена как одна из объявляемых переменных главного языка.

CLOSE CURSOR

(ЗАКРЫТЬ КУРСОР)

Синтаксис

EXEC SQL CLOSE CURSOR <cursor name> <SQL term>;

Эта команда указывает курсору закрыться, после чего ни одно значение не сможет быть выбрано из него до тех пор пока он не будет снова открыт.

COMMIT (WORK)

(ФИКСАЦИЯ (ТРАНЗАКЦИИ))

Синтаксис

COMMIT WORK;

Эта команда оставляет неизменными все изменения, сделанные в базе данных, до тех пор, пока начавшаяся транзакция не закончится, и не начнется новая транзакция.

CREATE INDEX (*NONSTANDARD*)

(СОЗДАТЬ ИНДЕКС) (*НЕСТАНДАРТНО*)

Синтаксис

CREATE [UNIQUE] INDEX <Index name> ON <table name> (<column list>);

Эта команда создает эффективный маршрут с быстрым доступом для поиска строк содержащих обозначенные столбцы. Если UNIQUE — указана, таблица не сможет содержать дубликатов (двойников) значений в этих столбцах.

CREATE SYNONYM (*NONSTANDARD*)

(СОЗДАТЬ СИНОНИМ) (*НЕСТАНДАРТНО*)

Синтаксис

CREATE IPUBLICl SYNONYM <synonym> FOR <owner>.<table name>;

Эта команда создает альтернативное (синоним) имя для таблицы. Синоним принадлежит его создателю, а сама таблица, обычно другому пользователю. Используя синоним, его владелец может не ссылаться к таблице ее полным (включая имя владельца) именем. Если PUBLIC — указан, синоним принадлежит каталогу SYSTEM и следовательно доступен всем пользователям.

CREATE TABLE

(СОЗДАТЬ ТАБЛИЦУ)

Синтаксис

CREATE TABLE <table name> ({<column name> <data type>[<size>] [<colconstralnt> ...] [<defvalue>]} .,.. <tabconstraint> .,..);

Команда создает таблицу в базе данных. Эта таблица будет принадлежать ее создателю. Столбцы будут рассматриваться в поименном Заказе.

<data type> определяет тип данных который будет содержать столбец. Стандарт <data type> описывается в Приложении B; все прочие используемые типы данных <data type>, обсуждались в Приложении C. Значение размера <size> зависит от типа данных <data type>.

<colconstraint> и <tabconstraint> налагают ограничения на значения, которые могут быть введены в столбце.

<defvalue> определяет значение (по умолчанию) которое будет вставлено автоматически, если никакого другого значения не указано для этой строки. (См. Главу 17 для подробностей о самой команде CREATE TABLE и Главы 18 И 19 для подробностей об ограничениях и о <defvalue>).

CREATE VIEW

(СОЗДАТЬ ПРОСМОТР)

Синтаксис

CREATE VIEW <table name> AS <query> [WITH CHECK OPTION];

Просмотр обрабатывается как любая таблица в командах SQL. Когда команда ссылается на имя таблицы <table name>, запрос <query> выполняется, и его вывод соответствует содержанию таблицы указнной в этой команде.

Некоторые просмотры могут модифицироваться, что означает, что команды модификации могут выполняться в этих просмотрах и передаваться в таблицу, на которую была ссылка в запросе <query>. Если указано предложение WITH CHECK OPTION, эта модификация должна также удовлетворять условию предиката <predicate> в запросе <query>.

DECLARE CURSOR

(ОБЬЯВИТЬ КУРСОР)

Синтаксис

EXEC SQL DECLARE <cursor name> CURSOR FOR <query><SQL term>

Эта команда связывает имя курсора <cursor name>, с запросом <query>. Когда курсор открыт (см. OPEN CURSOR), запрос <query> выполняется, и его результат может быть выбран (командой FETCH) для вывода. Если курсор модифицируемый, таблица на которую ссылается запрос <query>, может получить изменение содержания с помощью операции модификации в курсоре (См. Главу 25 о модифицируемых курсорах).

DELETE

(УДАЛИТЬ)

Синтаксис

DELETE FROM <table name> {[WHERE <predicate>];} | WHERE CURRENT OF <cursor name><SQL term>

Если предложение WHERE отсутствует, ВСЕ строки таблицы удаляются. Если предложение WHERE использует предикат <predicate>, строки, которые удовлетворяют условию этого предиката <predicate> удаляются. Если предложение WHERE имеет аргумент CURRENT OF (ТЕКУЩИЙ) в имени курсора <cursor name>, строка из таблицы <table name> на которую в данный момент имеется ссылка с помощью имени курсора <cursor name> будет удалена. Форма WHERE CURRENT может использоваться только во вложенном SQL, и только с модифицируемыми курсорами.

EXEC SQL

(ВЫПОЛНИТЬ SQL)

Синтаксис

EXEC SQL <embedded SQL command> <SQL term>

EXEC SQL используется, чтобы указывать начало всех команд SQL, вложенных в другой язык.

FETCH

(ВЫБОРКА)

Синтаксис

EXEC SQL FETCH <cursorname> INTO <host-varlable llst><SQL term>

FETCH принимает вывод из текущей строки запроса <query>, вставляет ее в список главных переменных <host-variable list>, и перемещает курсор на следующую строку. Список <host-variable list> может включать переменную indicator в качестве целевой переменной (См. Главу 25.)

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>) | <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

(МОДИФИКАЦИЯ)

Синтаксис

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

Таблицы, используемые в SQL

ТАБЛИЦА 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

San Jose

200

1002

2004

Grass

Berlin

300

1002

2006

Clemens

London

100

1001

2008

Cisneros

San Jose

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

СОДЕРЖАНИЕ

Введение в реляционные базы данных 1

Введение 1

Что такое реляционная база данных? 1

Связывание одной таблицы с другой 2

Порядок строк произволен 2

Идентификация строк (первичные ключи) 2

Столбцы именуются и нумеруются 3

Типовая база данных 3

СОДЕРЖАНИЕ 5

Резюме 5

Работа с SQL 6

SQL: обзор 7

Как работает SQL? 7

Что делает ANSI? 7

Интерактивный и встроенный SQL 8

Подразделы SQL 8

Различные типы данных 8

Несогласованности SQL 9

Что такое пользователь? 9

Условия и терминология 10

Резюме 10

Работа с SQL 10

Использование SQL для извлечения информации из таблиц 11

Создание запроса 11

Что такое запрос? 11

Где применяются запросы? 11

Команда SELECT 11

Выбирайте всегда самый простой способ 12

Описание SELECT 13

Просмотр определенного столбца таблицы 13

Переупорядочивание столбцов 13

Удаление избыточных данных 14

Параметры DISTINCT 15

ALL вместо DISTINCT 15

Квалифицированный выбор при использовании предложений 15

Резюме 16

Работа с SQL 17

Использование реляционных и булевых операторов для создания более изощрённых предикатов 18

Реляционные операторы 18

Булевы операторы 19

Резюме 22

Работа с SQL 22

Использование специальных операторов в условиях 23

Оператор IN 23

Оператор BETWEEN 24

Оператор LIKE 25

Работа с нулевыми (NULL) значениями 27

Оператор NULL 27

Использование NOT со специальными операторами 27

Резюме 28

Работа с SQL 28

Обобщение данных с помощью агрегатных функций 29

Что такое агрегатные функции? 29

Как использовать агрегатные функции? 29

Специальные атрибуты COUNT 30

Использование DISTINCT 30

Использование COUNT со строками, а не значениями 30

Включение дубликатов в агрегатные функции 31

Агрегаты, построенные на скалярном выражении 31

Предложение GROUP BY 31

Предложение HAVING 33

Не делайте вложенных агрегатов 34

Резюме 34

Работа с SQL 35

Форматирование вывода запросов 36

Строки и выражения 36

Скалярное выражение на основе выбираемых полей 36

Столбцы вывода 36

Помещение текста в вашем выводе запроса 37

Упорядочение вывода полей 38

Упорядочение по нескольким столбцам 38

Упорядочение агрегатных групп 39

Упорядочение вывода по номеру столбца 40

Упорядочение с помощью оператора NULL 41

Резюме 41

Работа с SQL 41

Запрос из нескольких таблиц так же, как из одной 44

Объединение таблиц 44

Имена таблиц и столбцов 44

Создание объединения 44

Объединение таблиц через справочную целостность 45

Объединения таблиц по равенству значений в столбцах и другие виды объединений 46

Объединение более двух таблиц 47

Резюме 47

Работа с SQL 47

Объединение таблицы с собой 48

Как делать объединение таблицы с собой? 48

Псевдонимы 48

Устранение избыточности 49

Проверка ошибок 50

Больше псевдонимов 50

Еще больше комплексных объединений 50

Резюме 52

Работа с SQL 52

Вставка одного запроса внутрь другого 53

Как работает подзапрос? 53

Значения, которые могут выдавать подзапросы 54

DISTINCT с подзапросами 54

Предикаты с подзапросами являются необратимыми 55

Использование агрегатных функций в подзапросах 55

Использование подзапросов, которые выдают много строк с помощью оператора IN 56

Подзапросы выбирают одиночные столбцы 58

Использование выражений в подзапросах 58

Подзапросы в предложении HAVING 59

Резюме 59

Работа с SQL 60

Соотнесенные подзапросы 61

Как сформировать соотнесенный подзапрос 61

Как работает соотнесенный подзапрос 62

Использование соотнесенных подзапросов для нахождения ошибок 63

Сравнение таблицы с собой 64

Соотнесенные подзапросы в предложении HAVING 65

Соотнесенные подзапросы и объединения 65

Резюме 65

Работа с SQL 66

Использование оператора EXISTS 67

Как работает EXISTS? 67

Выбор столбцов с помощью EXISTS 68

Использование EXISTS с соотнесенными подзапросами 68

Комбинация из EXISTS и объединения 68

Использование NOT EXISTS 69

EXISTS и агрегаты 70

Более удачный пример подзапроса 70

Резюме 71

Работа с SQL 71

Использование операторов ANY, ALL и SOME 73

Специальные операторы ANY или SOME 73

Использование операторов IN или EXISTS вместо оператора ANY 74

Как ANY может стать неоднозначным 75

Специальный оператор ALL 77

Равенства и неравенства 78

Правильное понимание ANY и ALL 79

Как ANY, ALL, и EXIST поступают с отсутствующими и неизвестными данными 80

Когда подзапрос возвращается пустым 80

ANY и ALL вместо EXISTS с пустым указателем (NULL) 80

RATING 80

Использование COUNT вместо EXISTS 81

Резюме 82

Работа с SQL 82

Использование предложения UNION 83

Объединение нескольких запросов в один 83

Когда вы можете делать объединение между запросами? 83

UNION и устранение дубликатов 84

Использование строк и выражений с UNION 85

Использование UNION с ORDER BY 86

Внешнее объединение 87

Резюме 89

Работа с SQL 89

Ввод, удаление и изменение значений полей 91

Команды модификации языка DML 91

Ввод значений 91

Вставка пустых указателей (NULL) 91

Именование столбца для вставки (INSERT) 92

Вставка результатов запроса 92

Изменение значений поля 93

Модифицирование только определенных строк 93

Команда UPDATE для многих столбцов 93

Использование выражений для модификации 94

Модифицирование пустых (NULL) значений 94

Резюме 94

Работа с SQL 94

Использование подзапросов с командами модификации 96

Использование подзапросов с INSERT 96

Не вставляйте дубликаты строк 96

Использование подзапросов, созданных во внешней таблице запроса 97

Использование подзапросов с DELETE 97

Использование подзапросов с UPDATE 99

Столкновение с ограничениями подзапросов команды DML 99

Резюме 100

Работа с SQL 100

Создание таблиц 101

Команда создания таблицы 101

Индексы 102

Уникальность индекса 103

Удаление индексов 103

Изменение таблицы после того, как она была создана 103

Удаление таблиц 104

Резюме 104

Работа с SQL 104

Ограничение значений ваших данных 105

Ограничение таблиц 105

Объявление ограничений 105

Использование ограничений для исключения пустых (NULL) указателей 105

Убедитесь, что значения уникальны 106

Уникальность как ограничение столбца 106

Уникальность как ограничение таблицы 106

Ограничение первичных ключей 107

Первичные ключи более чем одного поля 108

Проверка значений полей (CHECK) 108

Использование CHECK, чтобы предопределять допустимое вводимое значение 108

Проверка условий, базирующаяся на нескольких полях 109

Установка значений по умолчанию 110

Резюме 111

Работа с SQL 111

Поддержка целостности ваших данных 113

Внешний ключ и родительский ключ 113

Многостолбцовые внешние ключи 113

Смысл внешнего и родительского ключей 113

Ограничение FOREIGN KEY 114

Как можно поля представить в качестве внешних ключей 114

Внешний ключ как ограничение таблицы 115

Внешний ключ как ограничение столбцов 115

Не указывать список столбцов первичных ключей 115

Как справочная целостность ограничивает значения родительского ключа 116

Первичный ключ как уникальный внешний ключ 116

Ограничения внешнего ключа 116

Что случится, если вы выполните команду модификации 116

Включение описаний таблицы 117

Действие ограничений 117

Внешние ключи, которые ссылаются обратно к их подчиненным таблицам 119

Резюме 120

Работа с SQL 120

Введение в представления 121

Что такое представление? 121

Команда CREATE VIEW 121

Модифицирование представлений 122

Именование столбцов 122

Комбинирование предикатов представлений и основных запросов в представлениях 123

Групповые представления 124

Представления и объединения 124

Представления и подзапросы 125

Чего не могут делать представления 125

Удаление представлений 126

Резюме 126

Работа с SQL 126

Изменение значений с помощью представлений 127

Модифицирование представления 127

Определение модифицируемости представления 128

Модифицируемые представления и представления "только чтение" 128

Что является модифицируемым представлением 129

Проверка значений, помещаемых в представление 129

Предикаты и исключенные поля 130

Проверка представлений, которые базируются на других представлениях 131

Резюме 132

Работа с SQL 132

Кто что может делать в базе данных 134

Пользователи 134

Регистрация 134

Предоставление привилегий 134

Стандартные привилегии 135

Команда GRANT 135

Группы привилегий, группы пользователей 135

Ограничение привилегий на определенные столбцы 136

Использование аргументов ALL и PUBLIC 136

Предоставление привилегий с помощью WITH GRANT OPTION 137

Отмена привилегий 137

Использование представлений для фильтрации привилегий 138

Кто может создавать представления? 138

Ограничение привилегии SELECT для определенных столбцов 138

Ограничение привилегий для определенных строк 138

Предоставление доступа только к извлеченным данным 139

Использование представлений в качестве альтернативы к ограничениям 139

Другие типы привилегий 140

Типичные привилегии системы 140

Создание и удаление пользователей 141

Резюме 141

Работа с SQL 141

Глобальные аспекты SQL 143

Переименование таблиц 143

Переименование с тем же самым именем 143

Одно имя для каждого 144

Удаление синонимов 144

Как база данных распределена для пользователей? 144

Когда сделанные изменения становятся постоянными? 145

Как SQL общается сразу со многими пользователями 146

Типы блокировок 147

Другие способы блокировки данных 148

Резюме 149

Работа с SQL 149

Как данные SQL содержатся в упорядоченном виде 150

Каталог системы 150

Типичный системный каталог 150

Использование представлений в таблицах каталога 151

Разрешить пользователям видеть (только) их собственные объекты 151

Комментарий в содержании каталога 152

Остальное из каталога 153

Другое использование каталога 157

Резюме 157

РАБОТА С SQL 157

Использование SQL с другим языком (встроенный SQL) 159

Что такое вложение SQL 159

Зачем вкладывать SQL? 159

Как делаются вложения SQL 159

Использование переменных основного языка в SQL 160

Объявление переменных 161

Извлечение значений переменных 162

Курсор 162

SQLCODE 164

Использование SQLCODE для управления циклами 164

Предложение WHENEVER 164

Модифицирование курсоров 165

Переменная INDICATOR 166

Использование переменной INDICATOR для эмуляции NULL значений SQL 167

Другое использование переменной INDICATOR 168

Резюме 168

Работа с SQL 169

Ответы для упражнений 171

Глава 1 171

Глава 2 171

Глава 3 171

Глава 4 171

Глава 5 172

Глава 6 173

Глава 7 173

Глава 8 173

Глава 9 174

Глава 10 174

Глава 11 174

Глава 12 175

Глава 13 175

Глава 14 176

Глава 15 176

Глава 16 177

Глава 17 177

Глава 18 177

Глава 19 178

Глава 20 178

Глава 21 179

Глава 22 179

Глава 23 179

Глава 24 180

Глава 25 181

Типы данных в SQL 184

Типы ANSI 184

Эквивалентные типы данных в других языках 184

SQL ТИП ЭКВИВАЛЕНТ PL/1 185

КОБОЛ 185

NUMERIC PIC S (<nines with embedded V>) DISPLAY SING LEADING 185

DOUBLE PRECISION DOUBLE PRECISION 185

Некоторые общие нестандартные средства SQL 186

Типы данных 186

IBM Европейский Стандарт (EUR) dd.mm.yyyy 10.31.1990 186

Японский Индустриальный Стандарт (JIS) hh-mm-ss 21.04.37 186

IBM USA Стандарт (USA) hh.mm AM/PM 9.04 PM 186

Команда FORMAT 187

Функции 188

INTERSECT и MINUS 189

Автоматические внешние объединения 189

Отслеживание действий 190

Справочник по командам и синтаксису 191

SQL элементы 191

OR 193

SQL команды 194

Таблицы, используемые в SQL 199

СОДЕРЖАНИЕ 200