
- •Понимание sql (Understanding sql)
- •С о д е р ж а н и е
- •Введение в реляционную базу данных
- •В в е д е н и е
- •Что такое - реляционная база данных?
- •Связывание одной таблицы с другой
- •Порядок строк произволен
- •Идентификация строк ( первичные ключи )
- •Столбцы именуются и нумеруются
- •Типовая база данных
- •Работа с sql
- •2. Sql : обзор
- •Как работает sql?
- •Что делает ansi ?
- •Интерактивный и вложенный sql
- •Субподразделения sql
- •Различные типы данных
- •Sql несогласованности
- •Что такое - пользователь?
- •Условия и терминология
- •Работа с sql
- •Команда select
- •Выбирайте всегда самый простой способ
- •Описание select
- •Просмотр только определенного столбца таблицы
- •Переупорядочение столбца
- •Удаление избыточных данных
- •Параметры distinct
- •Distinct вместо all
- •Квалифицированный выбор при использовании предложений
- •Работа с sql
- •4. Использование реляционных и булевых операторов для создания более изощренных предикатов
- •Реляционные операторы
- •Булевы операторы
- •Работа с sql
- •5. Использование специальных операторов в условиях
- •Оператор in
- •Оператор between
- •Оператор like
- •Работа с нулевыми( null ) значениями
- •Null оператор
- •Использование not со специальными операторами
- •Работа с sql
- •6. Обобщение данных с помощью агрегатных функций
- •Что такое агрегатные функции ?
- •Как использовать агрегатные функции ?
- •Специальные атрибуты count
- •Использование distinct
- •Использование count со строками, а не значениями
- •Включение дубликатов в агрегатные функции
- •Агрегаты построенные на скалярном выражении
- •Предложение group by
- •Предложение having
- •Не делайте вложенных агрегатов
- •Работа с sql
- •7. Формирование выводов запросов
- •Строки и выражения
- •Скалярное выражение с помощью выбранных полей
- •Столбцы вывода
- •Помещение текста в вашем выводе запроса
- •Упорядочение вывода полей
- •Упорядочение с помощью многочисленных столбцов
- •Упорядочение агрегатных групп
- •Упорядочение вывода по номеру столбца
- •Упорядочение с помощью оператора null
- •Работа с sql
- •8. Запрашивание многочисленных таблиц также как одной
- •Объединение таблиц
- •Имена таблиц и столбцов
- •Создание объединения
- •Объединение таблиц через справочную целостность
- •Объединения таблиц по равенству значений в столбцах и другие виды объединений
- •Объединение более двух таблиц
- •Работа с sql
- •9. Объединение таблицы с собой
- •Как делать объединение таблицы с собой ?
- •Псевдонимы
- •Устранение избыточности
- •Проверка ошибок
- •Больше псевдонимов
- •Еще больше комплексных объединений
- •Работа с sql
- •10. Вставка одного запроса внутрь другого
- •Как работает подзапрос?
- •Значения, которые могут выдавать подзапросы
- •Distinct с подзапросами
- •Предикаты с подзапросами являются необратимыми
- •Использование агрегатных функций в подзапросах
- •Использование подзапросов которые выдают много строк с помощью оператора in
- •Подзапросы выбирают одиночные столбцы
- •Использование выражений в подзапросах
- •Подзапросы в предложении having
- •Работа с sql
- •11. Соотнесенные подзапросы
- •Как сформировать соотнесенный подзапрос
- •Как работает соотнесенный подзапрос
- •Использование соотнесенных подзапросов для нахождения ошибок
- •Сравнение таблицы с собой
- •Соотнесенные подзапросы в предложении having
- •Соотнесенные подзапросы и объединения
- •Работа с sql
- •12. Использование оператора exists
- •Как работает exists?
- •Выбор столбцов с помощью exists
- •Использование exists с соотнесенными подзапросами
- •Комбинация из exists и объединения
- •Использование not exists
- •Exists и агрегаты
- •Более удачный пример подзапроса
- •Работа с sql
- •13. Использование операторов any, all и some
- •Специальные операторы any или some
- •Использование операторов in или exists вместо оператора any
- •Как any может стать неоднозначным
- •Специальный оператор all
- •Равенства и неравенства
- •Правильное понимание any и all
- •Как any, all, и exist поступают с отсутствующими и неизвестными данными
- •Когда подзапрос возвращается пустым
- •Any и all вместо exists с пустым указателем( null )
- •Использование count вместо exists
- •Работа с sql
- •14. Использование предложения union
- •Объединение многочисленных запросов в один
- •Когда вы можете делать объединение между запросами ?
- •Union и устранение дубликатов
- •Использование строк и выражений с union
- •Использование union с order by
- •Внешнее объединение
- •Работа с sql
- •15. Ввод, удаление и изменение значений полей
- •Команды модификации языка dml
- •Ввод значений
- •Вставка пустых указателей (null)
- •Именование столбца для вставки (insert)
- •Вставка результатов запроса
- •Удаление строк из таблиц
- •Изменение значений поля
- •Модифицирование только определенных строк
- •Команда update для многих столбцов
- •Использование выражений для модификации
- •Модифицирование пустых(null) значений
- •Работа с sql
- •16. Использование подзапросов с командами модификации
- •Использование подзапросов с insert
- •Не вставляйте дубликаты строк
- •Использование подзапросов созданных во внешней таблице запроса
- •Использование подзапросов с delete
- •Использование подзапросов с update
- •Столкновение с ограничениями подзапросов команды dml
- •Работа с sql
- •17. Создание таблиц
- •Команда создания таблицы
- •Индексы
- •Уникальность индекса
- •Удаление индексов
- •Изменение таблицы после того как она была создана
- •Удаление таблицы
- •Работа с sql
- •18. Ограничение значений ваших данных
- •Ограничение таблиц
- •Объявление ограничений
- •Использование ограничений для исключения пустых( null ) указателей
- •Убедитесь что значения - уникальны
- •Уникальность как ограничение столбца
- •Уникальность как ограничение таблицы
- •Ограничение первичных ключей
- •Первичные ключи более чем одного поля
- •Проверка значений полей
- •Использование - check, чтобы предопределять допустимое вводимое значение
- •Проверка условий базирующийся на многочисленных полях
- •Установка значений по умолчанию
- •Работа с sql
- •19. Поддержка целостности ваших данных
- •Внешний ключ и родительский ключ
- •Много-столбцовые внешние ключи
- •Смысл внешнего и родительского ключей
- •Ограничение foreign key
- •Как можно поля представить в качестве внешних ключей
- •Внешний ключ как ограничение таблицы
- •Внешний ключ как ограничение столбцов
- •Не указывать список столбцов первичных ключейm
- •Как справочная целостность ограничивает значения родительского ключа
- •Первичный ключ как уникальный внешний ключ
- •Ограничения внешнего ключа
- •Что случится, если вы выполните команду модификации
- •Включение описаний таблицы
- •Действие ограничений
- •Внешние ключи которые ссылаются обратно к их подчиненным таблицам
- •Работа с sql
- •20. Введение: представления
- •Что такое представление ?
- •Команда create view
- •Модифицирование представлений
- •Именование столбцов
- •Комбинирование предикатов представлений и основных запросов в представлениях
- •Групповые представления
- •Представления и объединения
- •Представления и подзапросы
- •Что не могут делать представления
- •Удаление представлений
- •Работа с sql
- •21. Изменение значений с помощью представлений
- •Модифицирование представления
- •Определение модифицируемости представления
- •Модифицируемые представления и представления только_чтение.
- •Что является - модифицируемыми представлением
- •Проверка значений помещаемых в представление
- •Предикаты и исключенные поля
- •Проверка представлений которые базируются на других представлениях
- •Работа с sql
- •22. Кто что может делать в базе данных
- •Пользователи
- •Регистрация
- •Предоставление привилегий
- •Стандартные привилегии
- •Команда grant
- •Группы привилегий, группы пользователей
- •Ограничение привилегий на определенные столбцы
- •Использование аргументов all и public
- •Предоставление привилегий с помощью with grant option
- •Отмена привилегий
- •Использование представлений для фильтрации привилегий
- •Кто может создавать представления?
- •Другие типы привилегий
- •Типичные привилегии системы
- •Создание и удаление пользователей
- •Работа с sql
- •23. Глобальные аспекты sql
- •Переименование таблиц
- •Переименование с тем же самым именем
- •Одно имя для каждого
- •Удаление синонимов
- •Как база данных распределена для пользователей ?
- •Когда сделанные изменения становятся постоянными ?
- •Как sql общается сразу со многими пользователями
- •Типы блокировок
- •Другие способы блокировки данных
- •Работа с sql
- •24. Как данные sql содержатся в упорядоченном виде
- •Каталог системы
- •Типичный системный каталог
- •Использование представлений в таблицах каталога
- •Комментарий в содержании каталога
- •Остальное из каталога
- •Systemindexes - индексация в базе данных
- •Systemuserauth - пользовательские и системные привилегии в базе данных
- •Systemtabauth - привилегии объекта которые не определяют столбцы
- •Systemcolauth
- •Systemsynons - синонимы для таблиц в базе данных
- •Другое использование каталога
- •Работа с sql
- •25. Использование sql с другим языком ( вложенный sql )
- •Что такое - вложение sql
- •Зачем вкладывать sql?
- •Как делаются вложения sql.
- •Использование переменных основного языка в sql
- •Объявление переменных
- •Извлечение значений переменных
- •Sql коды
- •Использование sqlcode для управления циклами
- •Предложение whenever
- •Модифицирование курсоров
- •Переменная indicator
- •Использование переменной indicator для эмуляции null значений sql
- •Примечание: Последняя строка этого примера содержит ремарку - { begin и end необходимы только для понимания }
- •Другое использование переменной indicator
- •Работа с sql
- •Приложение a
- •Глава 5
- •Глава 6
- •Глава 7
- •Глава 8
- •Глава 9
- •Глава 10
- •Глава 11
- •Глава 12
- •Глава 13
- •Глава 14
- •Глава 15
- •Глава 16
- •Глава 17
- •Глава 18
- •Глава 19
- •Глава 20
- •Глава 21
- •Глава 22
- •Глава 23
- •Глава 24
- •Глава 25
- •Приложение b
- •Типы данных в sql
- •Типы ansi
- •Эквивалентные типы данных в других языках
- •Типы текстовой строки
- •Команда format
- •Функции
- •Математические функции
- •Символьные функции
- •Функции даты и времени
- •Другие функции
- •Intersect и minus
- •Автоматические внешние объединения
- •Отслеживание действий
- •Приложение d
- •Синтаксис и команда ссылки
- •Sql элементы
- •Элементы языка бейсика
- •Функциональные элементы
- •Предикаты
- •Sql команды
- •Create view (создать просмотр)
- •Declare cursor (объявить курсор)
- •Delete (удалить)
- •Exec sql (выполнить sql)
- •Fetch (выборка)
- •Grant (передать права)
- •Insert (вставка)
- •Union (объединение)
- •Update (модификация)
- •Whenever (всякий раз как)
- •Приложение e
- •Таблицы, используемые в sql
Когда сделанные изменения становятся постоянными ?
Визуально, среда базы данных, это картина которая постоянно отображает для существующих пользователей, постоянно вводимые и изменяемые данные, допуская, что если система правильно разработана, она будет функционировать без сбоев. Однако реально, благодаря человеческим или компьютерным сбоям, ошибки время от времени случаются, и поэтому хорошие компьютерные программы стали применять способы отмены действий вызвавших такие ошибки. Команда SQL, которая воздействует на содержание или структуру базы данных - например команда модификации DML или команда DROP TABLE, - не обязательно будет необратимой. Вы можете определить после окончания ее действия, останутся ли изменения сделанные данной командой или группой команд постоянными в базы данных, или они будут полностью проигнорированы. С этой целью, команды обрабатываются группами, называемыми - транзакциями. Транзакция начинается всякий раз, когда вы начинаете сеанс с SQL. Все команды которые вы введете будут частью этой транзакции, пока вы не за- вершите их вводом команды COMMIT WORK или команды ROLLBACK WORK. COMMIT может сделать все изменения постоянными с помощью транзакции, а ROLLBACK может откатить их обратно или отменить. Новая транзакция начинается после каждой команды COMMIT или ROLLBACK. Этот процесс известен как диалоговая обработка запросов или транзакция. Синтаксис, чтобы оставить все ваши изменения постоянными во время регистрации, или во время последнего COMMIT или ROLLBACK
COMMIT WORK;
Синтаксис отмены изменения -
ROLLBACK WORK;
В большинстве реализаций, вы можете установить параметр, называемый AUTOCOMMIT. Он будет автоматически запоминать все действия которые будут выполняться. Действия которые приведут к ошибке, всегда будут автоматически "прокручены" обратно. Если это предусмотрено в вашей системе, для фиксации всех ваших действий, вы можете использовать эту возможность с помощью команды типа:
SET AUTOCOMMIT ON;
Вы можете вернуться к обычной диалоговой обработке запросов с помощью такой команды:
SET AUTOCOMMIT OFF;
Имеется возможность установки AUTOCOMMIT которую система выполнит автоматически при регистрации. Если сеанс пользователя завершается аварийно - например, произошел сбой системы или выполнена перезагрузка пользователя, - то текущая транзакция выполнит автоматический откат изменений. Это - одна из причин, по которой вы можете управлять выполнением вашей диалоговой обработки запросов, разделив ваши команды на большое количество различных транзакций. Одиночная транзакция не должна содержать много несвязанных команд; фактически, она может состоять из единственной команды. Транзакции которые включают всю группу несвязанных изменений не оставляют вам фактически никакого выбора сохранить или отклонить целую группу, если вы хотите отменить только одно определенное изменение. Хорошим правилом которому надо следовать, это делать ваши транзакции состоящими из одной команды или нескольких близко связанных команд. Например, предположим вы хотите удалить продавца Motika из базы данных. Прежде, чем вы удалите его из таблицы Продавцов, вы сначала должны сделать что-нибудь с его порядками и его заказчиками. ( Если используются ограничения внешнего ключа, и ваша система, следу ANSI, ограничивает изменение родительского ключа, у вас не будет выбора делать или не делать этого. Это будет сделано обязательно.) Одно из логических решений, будет состоять в том, чтобы установить поле snum в его порядках в NULL, в следствии чего ни один продавец не получит комиссионные в этих порядках, пока комиссионные не будут предоставлены заказчикам для Peel. Затем вы можете удалить их из таблицы Продавцов:
UPDATE Orders
SET snum = NULL
WHERE snum = 1004;
UPDATE Cudomers
SET snum = 1001
WHERE snum = 1004;
DELETE FROM Salespeople
WHERE snum = 1004;
Если у вас проблема с удалением Motika ( возможно имеется другой внешний ключ ссылающийся на него о котором вы не знали и не учитывали ), вы могли бы отменить все изменения которые вы сделали, до тех пор пока проблема не будет определена и решена. Более того, это должна быть группа команд, чтобы обрабатывать ее как одиночную транзакцию. Вы можете предусмотреть это с помощью команды COMMIT, и завершить ее с помощью команды COMMIT или ROLLBACK.