
- •Понимание 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
Именование столбца для вставки (insert)
Вы можете также указывать столбцы, куда вы хотите вставить значение имени. Это позволяет вам вставлять имена в любом порядке. Предположим что вы берете значения для таблицы Заказчиков из отчета выводимого на принтер, который помещает их в таком порядке: city, cname, и cnum, и для упрощения, вы хотите ввести значения в том же порядке:
INSERT INTO Customers (city, cnamе, cnum)
VALUES ('London', 'Honman', 2001);
Обратите внимание что столбцы rating и snum - отсутствуют. Это значит, что эти строки автоматически установлены в значение - по умолчанию. По умолчанию может быть введено или значение NULL или другое значе- ние определяемое как - по умолчанию. Если ограничение запрещает использование значения NULL в данном столбце, и этот столбец не установлен как по умолчанию, этот столбец должен быть обеспечен значением для любой команды INSERT которая относится к таблице( смотри Главу 18 для информации об ограничениях на NULL и на "по умолчанию" ).
Вставка результатов запроса
Вы можете также использовать команду INSERT чтобы получать или вы- бирать значения из одной таблицы и помещать их в другую, чтобы использовать их вместе с запросом. Чтобы сделать это, вы просто заменяете предложение VALUES (из предыдущего примера) на соответствующий запрос:
INSERT INTO Londonstaff
SELECT *
FROM Salespeople
WHERE city = 'London';
Здесь выбираются все значения произведенные запросом - то есть все строки из таблицы Продавцов со значениями city = "London" - и помещаются в таблицу называемую Londonstaff. Чтобы это работало, таблица Londonstaff должна отвечать следующим условиям: * Она должна уже быть создана командой CREATE TABLE. * Она должна иметь четыре столбца которые совпадают с таблицей Продавцов в терминах типа данных; то есть первый, второй, и так далее, столбцы каждой таблицы, должны иметь одинаковый тип данных ( причем они не должны иметь одинаковых имен ). Общее правило то, что вставляемые столбцы таблицы, должны совпадать со столбцами выводимыми подзапросом, в данном случае, для всей таб- лицы Продавцов. Londonstaff - это теперь независима таблица которая получила некоторые значения из таблицы Продавцов(Salespeople). Если значения в таблице Продавцов будут вдруг изменены, это никак не отразится на таблице Londonstaff ( хотя вы могли бы создать такой эффект, с помощью Представ- лени( VIEW), описанного в Главе 20 ). Так как или запрос или команда INSERT могут указывать столбцы по имени, вы можете, если захотите, переместить только выбранные столбцы а так- же переупорядочить только те столбцы которые вы выбрали. Предположим, например, что вы решили сформировать новую таблицу с именем Daytotals, которая просто будет следить за общим количеством долларов сумм приобретений упорядоченных на каждый день. Вы можете ввести эти данные независимо от таблицы Порядков, но сначала вы должны заполнить таблицу Daytotals информацией ранее представленной в таблице Порядков. Понимая что таблица Порядков охватывает последний финансовый год, а не только несколько дней, как в нашем примере, вы можете видеть преимущество использования следующего условия INSERT в подсчете и вводе значений
INSERT INTO Daytotals (date, total)
SELECT odate, SUM (amt)
FROM Orders
GROUP BY odate;
Обратите внимание что, как предложено ранее, имена столбцов таблицы Порядков и таблицы Daytotals - не должны быть одинаковыми. Кроме того, если дата приобретения и общее количество - это единственные столбцы в таблице, и они находятся в данном порядке, их имена могут быть исключены из вывода из-за их очевидной простоты.