
- •Понимание 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
Модифицирование пустых(null) значений
Предложение SET - это не предикат. Он может вводить пустые NULL значения также как он вводил значения не используя какого-то специального синтаксиса ( такого например как IS NULL ). Так что, если вы хотите установить все оценки заказчиков в Лондоне в NULL, вы можете ввести следующее предложение:
UPDATE customers
SET rating = NULL
WHERE city = 'London';
что обнулит все оценки заказчиков в Лондоне.
РЕЗЮМЕ
Теперь вы овладели мастерством управления содержанием вашей базы данных с помощью трех простых команд:
INSERT - используемой чтобы помещать строки в базу данных;
DELETE - чтобы удалять их;
REFERENCES - чтобы изменять значения в уже вставленных строках.
Вы обучались использованию предиката с командами UPDATE и DELETE чтобы определить, на которую из строк будет воздействовать команда. Конечно, предикаты как таковые - не значимы для INSERT, потому что обсуждаемая строка не существует в таблице до окончания выполнения команды INSERT. Однако, вы можете использовать запросы с INSERT, чтобы сразу помещать все наборы строк в таблицу. Причем это, вы можете делать со столбцами в любом порядке. Вы узнали, что значения по умолчанию, могут помещаться в столбцы, если вы не устанавливаете это значение явно. Вы также видели использование стандартного значения по умолчанию, которым является NULL. Кроме того, вы поняли, что UPDATE может использовать выражение значения, тогда как INSERT не может. Следующая глава расширит ваше познания, показав вам, как использовать подзапросы с этими командами. Эти подзапросы напоминают те, с которыми вы уже знакомы, но имеются некоторые специальные выводы и ограничения, когда подзапросы используются в командах DML, что мы будем обсуждать в Главе 16.
Работа с sql
1. Напишите команду которая бы поместила следующие значения, в их нижеуказанном порядке, в таблицу Продавцов:
city - San Jose,
name - Bianco,
comm - NULL,
cnum - 1100.
2. Напишите команду которая бы удалила все порядки заказчика Clemens из таблицы Порядков. 3. Напишите команду которая бы увеличила оценку всех заказчиков в Риме на 100. 4. Продавец Serres оставил компанию. Переназначьте его заказчиков продавцу Motika.
16. Использование подзапросов с командами модификации
В этой главе, вы узнаете как использовать подзапросы в командах модификации. Вы найдете, что нечто подобное - вы уже видели при использовании под- запросов в запросах. Понимание, как подзапросы используются в командах SELECT, cделает их применение в командах модификации более уверенным, хотя и останутся некоторые вопросы. Завершением команды SELECT является подзапрос, но не предикат, и по- этому его использование отличается от использования простых предикатов с командами модификации, которые вы уже выполняли раннее с командами UPDATE и DELETE. Вы использовали простые запросы чтобы производить значения для INSERT, а теперь мы можем расширить эти запросы чтобы включать в них подзапросы. Важный принцип который надо соблюдать при работе с командами модификации, состоит в том, что вы не можете в предложении FROM любого подзапроса, модифицировать таблицу к которой ссылаетесь с помощью основной команды. Это относится ко всем трем командам мо- дификации. Хотя имеется большое количество ситуаций в которых будет полезно сделать запрос той таблицы которую вы хотите модифицировать причем во врем ее модификации, это слишком усложняет операцию что- бы использовать ее на практике. Не делайте ссылки к текущей строке таблицы указанной в команде, которая является соотнесенным подзапросом.