
- •Введение в реляционные базы данных Введение
- •Что такое реляционная база данных?
- •Связывание одной таблицы с другой
- •Порядок строк произволен
- •Идентификация строк (первичные ключи)
- •Столбцы именуются и нумеруются
- •Типовая база данных
- •Работа с sql
- •Sql: обзор
- •Как работает sql?
- •Что делает ansi?
- •Интерактивный и встроенный sql
- •Подразделы sql
- •Различные типы данных
- •Несогласованности sql
- •Что такое пользователь?
- •Условия и терминология
- •Работа с sql
- •Использование sql для извлечения информации из таблиц
- •Создание запроса
- •Что такое запрос?
- •Где применяются запросы?
- •Команда select
- •Выбирайте всегда самый простой способ
- •Описание select
- •Просмотр определенного столбца таблицы
- •Переупорядочивание столбцов
- •Удаление избыточных данных
- •Параметры distinct
- •All вместо distinct
- •Квалифицированный выбор при использовании предложений
- •Работа с sql
- •Использование реляционных и булевых операторов для создания более изощрённых предикатов
- •Реляционные операторы
- •Булевы операторы
- •Работа с sql
- •Использование специальных операторов в условиях
- •Оператор in
- •Оператор between
- •Оператор like
- •Работа с нулевыми (null) значениями
- •Оператор null
- •Использование not со специальными операторами
- •Работа с sql
- •Обобщение данных с помощью агрегатных функций
- •Что такое агрегатные функции?
- •Как использовать агрегатные функции?
- •Специальные атрибуты count
- •Использование distinct
- •Использование count со строками, а не значениями
- •Включение дубликатов в агрегатные функции
- •Агрегаты, построенные на скалярном выражении
- •Предложение group by
- •Предложение having
- •Не делайте вложенных агрегатов
- •Работа с sql
- •Форматирование вывода запросов
- •Строки и выражения
- •Скалярное выражение на основе выбираемых полей
- •Столбцы вывода
- •Помещение текста в вашем выводе запроса
- •Упорядочение вывода полей
- •Упорядочение по нескольким столбцам
- •Упорядочение агрегатных групп
- •Упорядочение вывода по номеру столбца
- •Упорядочение с помощью оператора null
- •Работа с sql
- •Запрос из нескольких таблиц так же, как из одной
- •Объединение таблиц
- •Имена таблиц и столбцов
- •Создание объединения
- •Объединение таблиц через справочную целостность
- •Объединения таблиц по равенству значений в столбцах и другие виды объединений
- •Объединение более двух таблиц
- •Работа с sql
- •Объединение таблицы с собой
- •Как делать объединение таблицы с собой?
- •Псевдонимы
- •Устранение избыточности
- •Проверка ошибок
- •Больше псевдонимов
- •Еще больше комплексных объединений
- •Работа с sql
- •Вставка одного запроса внутрь другого
- •Как работает подзапрос?
- •Значения, которые могут выдавать подзапросы
- •Distinct с подзапросами
- •Предикаты с подзапросами являются необратимыми
- •Использование агрегатных функций в подзапросах
- •Использование подзапросов, которые выдают много строк с помощью оператора in
- •Подзапросы выбирают одиночные столбцы
- •Использование выражений в подзапросах
- •Подзапросы в предложении having
- •Работа с sql
- •Соотнесенные подзапросы
- •Как сформировать соотнесенный подзапрос
- •Как работает соотнесенный подзапрос
- •Использование соотнесенных подзапросов для нахождения ошибок
- •Сравнение таблицы с собой
- •Соотнесенные подзапросы в предложении having
- •Соотнесенные подзапросы и объединения
- •Работа с sql
- •Использование оператора exists
- •Как работает exists?
- •Выбор столбцов с помощью exists
- •Использование exists с соотнесенными подзапросами
- •Комбинация из exists и объединения
- •Использование not exists
- •Exists и агрегаты
- •Более удачный пример подзапроса
- •Работа с sql
- •Использование операторов any, all и some
- •Специальные операторы any или some
- •Использование операторов in или exists вместо оператора any
- •Как any может стать неоднозначным
- •Специальный оператор all
- •Равенства и неравенства
- •Правильное понимание any и all
- •Как any, all, и exist поступают с отсутствующими и неизвестными данными
- •Когда подзапрос возвращается пустым
- •Any и all вместо exists с пустым указателем (null)
- •Использование count вместо exists
- •Работа с sql
- •Использование предложения union
- •Объединение нескольких запросов в один
- •Когда вы можете делать объединение между запросами?
- •Union и устранение дубликатов
- •Использование строк и выражений с union
- •Использование union с order by
- •Внешнее объединение
- •Работа с sql
- •Ввод, удаление и изменение значений полей
- •Команды модификации языка dml
- •Insert (вставить), update (модифицировать), delete (удалить).
- •Ввод значений
- •Вставка пустых указателей (null)
- •Именование столбца для вставки (insert)
- •Вставка результатов запроса
- •Изменение значений поля
- •Модифицирование только определенных строк
- •Команда update для многих столбцов
- •Использование выражений для модификации
- •Модифицирование пустых (null) значений
- •Insert — используемой чтобы помещать строки в базу данных; delete — чтобы удалять их; update — чтобы изменять значения в уже вставленных строках.
- •Работа с sql
- •Использование подзапросов с командами модификации
- •Использование подзапросов с insert
- •Не вставляйте дубликаты строк
- •Использование подзапросов, созданных во внешней таблице запроса
- •Использование подзапросов с delete
- •Использование подзапросов с update
- •Столкновение с ограничениями подзапросов команды dml
- •Работа с sql
- •Создание таблиц
- •Команда создания таблицы
- •Индексы
- •Уникальность индекса
- •Удаление индексов
- •Изменение таблицы после того, как она была создана
- •Удаление таблиц
- •Работа с sql
- •Ограничение значений ваших данных
- •Ограничение таблиц
- •Объявление ограничений
- •Использование ограничений для исключения пустых (null) указателей
- •Убедитесь, что значения уникальны
- •Уникальность как ограничение столбца
- •Уникальность как ограничение таблицы
- •Ограничение первичных ключей
- •Первичные ключи более чем одного поля
- •Проверка значений полей (check)
- •Использование check, чтобы предопределять допустимое вводимое значение
- •Проверка условий, базирующаяся на нескольких полях
- •Установка значений по умолчанию
- •Работа с sql
- •Поддержка целостности ваших данных
- •Внешний ключ и родительский ключ
- •Многостолбцовые внешние ключи
- •Смысл внешнего и родительского ключей
- •Ограничение foreign key
- •Как можно поля представить в качестве внешних ключей
- •Внешний ключ как ограничение таблицы
- •Внешний ключ как ограничение столбцов
- •Не указывать список столбцов первичных ключей
- •Как справочная целостность ограничивает значения родительского ключа
- •Первичный ключ как уникальный внешний ключ
- •Ограничения внешнего ключа
- •Что случится, если вы выполните команду модификации
- •Включение описаний таблицы
- •Действие ограничений
- •Внешние ключи, которые ссылаются обратно к их подчиненным таблицам
- •Работа с sql
- •Введение в представления
- •Что такое представление?
- •Команда create view
- •Модифицирование представлений
- •Именование столбцов
- •Комбинирование предикатов представлений и основных запросов в представлениях
- •Групповые представления
- •Представления и объединения
- •Представления и подзапросы
- •Чего не могут делать представления
- •Удаление представлений
- •Работа с sql
- •Изменение значений с помощью представлений
- •Модифицирование представления
- •Определение модифицируемости представления
- •Модифицируемые представления и представления "только чтение"
- •Что является модифицируемым представлением
- •Проверка значений, помещаемых в представление
- •Предикаты и исключенные поля
- •Проверка представлений, которые базируются на других представлениях
- •Работа с sql
- •Кто что может делать в базе данных
- •Пользователи
- •Регистрация
- •Предоставление привилегий
- •Стандартные привилегии
- •Команда grant
- •Группы привилегий, группы пользователей
- •Ограничение привилегий на определенные столбцы
- •Использование аргументов all и public
- •Предоставление привилегий с помощью with grant option
- •Отмена привилегий
- •Использование представлений для фильтрации привилегий
- •Кто может создавать представления?
- •Ограничение привилегии select для определенных столбцов
- •Ограничение привилегий для определенных строк
- •Предоставление доступа только к извлеченным данным
- •Использование представлений в качестве альтернативы к ограничениям
- •Другие типы привилегий
- •Типичные привилегии системы
- •Создание и удаление пользователей
- •Глобальные аспекты sql
- •Переименование таблиц
- •Переименование с тем же самым именем
- •Одно имя для каждого
- •Удаление синонимов
- •Как база данных распределена для пользователей?
- •Когда сделанные изменения становятся постоянными?
- •Как sql общается сразу со многими пользователями
- •Типы блокировок
- •Другие способы блокировки данных
- •Работа с sql
- •Как данные sql содержатся в упорядоченном виде
- •Каталог системы
- •Типичный системный каталог
- •Использование представлений в таблицах каталога
- •Разрешить пользователям видеть (только) их собственные объекты
- •Комментарий в содержании каталога
- •Остальное из каталога
- •Другое использование каталога
- •Работа с sql
- •Использование sql с другим языком (встроенный sql)
- •Что такое вложение sql
- •Зачем вкладывать sql?
- •Как делаются вложения sql
- •Использование переменных основного языка в sql
- •Объявление переменных
- •Извлечение значений переменных
- •Использование sqlcode для управления циклами
- •Предложение whenever
- •Модифицирование курсоров
- •Переменная indicator
- •Использование переменной indicator для эмуляции null значений sql
- •Другое использование переменной indicator
- •Работа с sql
- •Глава 5
- •Глава 6
- •Глава 7
- •Глава 8
- •Глава 9
- •Глава 10
- •Глава 11
- •Глава 12
- •Глава 13
- •Глава 14
- •Глава 15
- •Глава 16
- •Глава 17
- •Глава 18
- •Глава 19
- •Глава 20
- •Глава 21
- •Глава 22
- •Глава 23
- •Глава 24
- •Глава 25
- •Типы данных в sql
- •Типы ansi
- •Эквивалентные типы данных в других языках
- •Некоторые общие нестандартные средства sql
- •Типы данных
- •Ibm Европейский Стандарт (eur) dd.Mm.Yyyy 10.31.1990
- •Ibm Европейский Стандарт hh-mm-ss 21.04.37
- •Ibm usa Стандарт (usa) hh.Mm am/pm 9.04 pm
- •Команда format
- •Функции
- •Автоматические внешние объединения
- •Отслеживание действий
- •Справочник по командам и синтаксису
- •Sql элементы
- •Sql команды
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