
- •Понимание 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
Объединение более двух таблиц
Вы можете также создавать запросы объединяющие более двух таблиц. Предположим что мы хотим найти все порядки заказчиков не находящихся в тех городах где находятся их продавцы. Для этого необходимо связать все три наши типовые таблицы ( вывод показывается в Рисунке 8.4 ):
SELECT onum, cname, Orders.cnum, Orders.snum
FROM Salespeople, Customers,Orders
WHERE Customers.city < > Salespeople.city
AND Orders.cnum = Customers.cnum
AND Orders.snum = Salespeople.snum;
=============== SQL Execution Log ==============
| |
| SELECT onum, cname, Orders.cnum, Orders.snum |
| FROM Salespeople, Customers, Orders |
| WHERE Customers.city < > Salespeople.city |
| AND Orders.cnum = Customers.cnum |
| AND Orders.snum = Salespeople.snum; |
| =============================================== |
| onum cname cnum snum |
| ------ ------- ----- ----- |
| 3001 Cisneros 2008 1007 |
| 3002 Pereira 2007 1004 |
| 3006 Cisneros 2008 1007 |
| 3009 Giovanni 2002 1003 |
| 3007 Grass 2004 1002 |
| 3010 Grass 2004 1002 |
===============================================
Рисунок 8. 4: Объединение трех таблиц Хотя эта команда выглядит скорее как комплексна, вы можете следовать за логикой, просто проверяя - что заказчики не размещены в тех городах где размещены их продавцы ( совпадение двух snum полей ), и что пере- численные порядки - выполнены с помощью этих заказчиков( совпадение порядков с полями cnum и snum в таблице Порядков ).
РЕЗЮМЕ
Теперь вы больше не ограничиваетесь просмотром одной таблицы в каждый момент времени. Кроме того, вы можете делать сложные сравнения между любыми полями любого числа таблиц и использовать полученные результаты чтобы решать какую информацию вы бы хотели видеть. Фактически, эта методика настолько полезна для построения связей, что она часто используется для создания их внутри одиночной таблицы. Это будет правильным: вы сможете объединить таблицу с собой, а это очень удобна вещь. Это будет темой Главы 9.
Работа с sql
1. Напишите запрос который бы вывел список номеров порядков сопровождающихся именем заказчика который создавал эти порядки. 2. Напишите запрос который бы выдавал имена продавца и заказчика для каждого порядка после номера порядков. 3. Напишите запрос который бы выводил всех заказчиков обслуживаемых продавцом с комиссионными выше 12% . Выведите им заказчика, им продавца, и ставку комиссионных продавца. 4. Напишите запрос который вычислил бы сумму комиссионных продавца для каждого порядка заказчика с оценкой выше 100.