Uploaded by Eugen Tikhonov

Боуман Дж. Практическое руководство по SQL

advertisement
Дж.Боуман, С.Эмерсон, М.Дарновски
ПРАКТИЧЕСКОЕ РУКОВОДСТВО ПО SQL
Эта книга поможет даже в тех случаях, когда бесполезно самое лучшее
руководство пользователя. Здесь раскрываются темы, которые часто
пропускаются или очень кратко описаны в стандартных руководствах
пользователя — структуры баз данных, индексация, подзапросы, виртуальные
таблицы, производительность и целостность данных.
Вы шаг за шагом изучите основы SQL и научитесь с помощью этого языка
создавать приложения для работы с базами данных.
Книга предназначена для пользователей реляционных баз данных —
независимо от того, работают ли они на больших многопользовательских
компьютерных системах или на персональных компьютерах.
Содержание
Предисловие
5
Предисловие ко второму и третьему изданиям
7
Введение
9
Глава 1. SQL и управление реляционными базами данных
15
УПРАВЛЕНИЕ РЕЛЯЦИОННЫМИ БАЗАМИ ДАННЫХ
15
Реляционная модель: одни таблицы
16
Независимость
17
Язык высокого уровня
17
Реляционные операции
19
Альтернативный способ просмотра данных
22
Нули
23
Безопасность
23
Целостность
24
ПРИСТУПАЯ К ПРОЕКТИРОВАНИЮ БАЗЫ ДАННЫХ
24
Глава 2. Проектирование баз данных
25
СТРУКТУРА БАЗЫ ДАННЫХ
25
Как подходить к проектированию базы данных
26
Что такое "хорошая структура"
28
Описание нашей базы данных
29
ДАННЫЕ И ВЗАИМОСВЯЗИ
30
Объекты
30
Отношение один-ко-многим
32
Отношение многий-ко-многим
34
Отношение один-к-одному
35
Последние замечания к объектному подходу
35
РУКОВОДСТВО ПО НОРМАЛИЗАЦИИ
36
Первая нормальная форма
37
Вторая нормальная форма
38
Третья нормальная форма
38
Четвертая и пятая нормальные формы
40
ОБЗОР БАЗЫ ДАННЫХ
41
Последние замечания о базе данных bookbiz
Проверка структуры базы данных
Рассмотрение других понятий из области баз данных
Реализация структуры
Глава 3. Создание и заполнение базы данных
СИНТАКСИС SQL
Обработка ошибок
СОЗДАНИЕ БАЗ ДАННЫХ
Выбор базы данных
СОЗДАНИЕ ТАБЛИЦ
Выбор типа данных
Назначение нулевого статуса
Процесс создания таблицы
СОЗДАНИЕ ИНДЕКСОВ
Оператор CREATE INDEX
Как, что и зачем нужно индексировать
СОЗДАНИЕ ТАБЛИЦ С ПОМОЩЬЮ ОГРАНИЧЕНИЙ SQL-92
ИЗМЕНЕНИЕ И УДАЛЕНИЕ БАЗ ДАННЫХ И ИХ ОБЪЕКТОВ
Изменение баз данных
Изменение определений таблицы
Удаление базы данных
Удаление таблиц
Удаление индекса
ДОБАВЛЕНИЕ, ИЗМЕНЕНИЕ И УДАЛЕНИЕ ДАННЫХ
Добавление новой строки
Использование оператора SELECT в команде INSERT
ИЗМЕНЕНИЕ СУЩЕСТВУЮЩИХ ДАННЫХ
Оператор UPDATE
Предложение SET
Предложение WHERE
УДАЛЕНИЕ ДАННЫХ: КОМАНДА DELETE
ПРИСТУПАЯ К ВЫБОРКЕ ДАННЫХ
Глава 4. Выборка информации из базы данных
ПЕРЕД ВЫБОРОМ
Синтаксис оператора SELECT
ВЫБОР СТОЛБЦОВ: СПИСОК ВЫБОРА
Выбор всех столбцов: SELECT *
Выбор отдельных столбцов
Выражения: больше, чем просто имена столбцов
УКАЗАНИЕ ТАБЛИЦ: СПИСОК ТАБЛИЦ
ВЫБОР СТРОК: ПРЕДЛОЖЕНИЕ WHERE
Операторы сравнения
Совместное использование условных и логических операторов
Диапазоны (BETWEEN и NOT BETWEEN)
42
44
44
44
45
45
47
48
49
49
51
53
54
55
55
57
58
62
62
62
63
63
63
64
64
66
68
68
68
69
70
71
72
72
72
75
75
77
77
83
84
84
86
90
Списки (IN и NOT IN)
Выборка нулевых значений
Поиск по подстрокам: предложение LIKE
ЧТО ДАЛЬШЕ
Глава 5. Сортировка данных и другие методы выбора
ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ ОПЕРАТОРА SELECT
СОРТИРОВКА РЕЗУЛЬТАТОВ ЗАПРОСА: ПРЕДЛОЖЕНИЕ ORDER
BY
Порядок сортировки
Как выполняется сортировка
Синтаксис предложения ORDER BY
Сортировка внутри сортировки
Сортировка по возрастанию и по убыванию
А как насчет выражений?
Как сортировать нулевые значения
УСТРАНЕНИЕ ПОВТОРЯЮЩИХСЯ СТРОК: ПРЕДЛОЖЕНИЯ
DISTINCT И ALL
Синтаксис предложения DISTINCT
Почувствуйте разницу!
АГРЕГИРУЮЩИЕ ФУНКЦИИ
Синтаксис агрегирующих функций
СКАЛЯРНЫЕ И ВЕКТОРНЫЕ ФУНКЦИИ
Глава 6. Группировка данных и построение отчетов
ГРУППИРОВКА
ПРЕДЛОЖЕНИЕ GROUP BY
Синтаксис предложения GROUP BY
Упорядоченные группы
ПРЕДЛОЖЕНИЕ HAVING
Разновидности предложения HAVING
Предложения HAVING и WHERE
ЕЩЕ О НУЛЕВЫХ ЗНАЧЕНИЯХ
Нули и проектирование баз данных
Сравнение нулевых значений
Нули и вычисления
Нули и группы
Значения по умолчанию в качестве альтернативы нулевым значениям
РАБОТА С НЕСКОЛЬКИМИ ТАБЛИЦАМИ
Глава 7. Объединение таблиц и сложный анализ данных
ЧТО ТАКОЕ ОБЪЕДИНЕНИЕ
Синтаксис операции объединения
ПОЧЕМУ НЕОБХОДИМО ОБЪЕДИНЕНИЕ
Объединения и реляционная модель
ПРИМЕР ОБЪЕДИНЕНИЯ
Проверка правильности объединения
92
94
96
99
100
100
100
100
101
102
102
104
105
107
108
109
109
112
114
120
121
121
121
122
131
132
132
133
135
136
136
137
138
138
140
141
141
141
142
142
143
143
КАК ПОЛУЧИТЬ ХОРОШЕЕ ОБЪЕДИНЕНИЕ
Объединения и нулевые значения
УЛУЧШЕНИЕ ЧИТАЕМОСТИ РЕЗУЛЬТАТОВ ОБЪЕДИНЕНИЯ
Выбор столбцов для запросов на объединение
Псевдонимы в списке таблиц улучшают читаемость запросов
ОПРЕДЕЛЕНИЕ УСЛОВИЙ ОБЪЕДИНЕНИЯ
Объединения, основанные на равенстве
Объединения, не основанные на равенствах
Объединение таблицы с самой собой: самообъединение
Использование при самообъединении оператора неравенства
Объединение нескольких таблиц
Внешние объединения
КАК ОБЪЕДИНЕНИЯ ОБРАБАТЫВАЮТСЯ СИСТЕМОЙ
ОПЕРАТОР UNION
Полезный трюк с оператором UNION
ПОДЗАПРОСЫ
Глава 8. Структурированные запросы и подзапросы
ЧТО ТАКОЕ ПОДЗАПРОС
Упрощенный синтаксис подзапроса
КАК РАБОТАЮТ ПОДЗАПРОСЫ
Некоррелированная обработка
Коррелированная обработка
ОБЪЕДИНЕНИЯ ИЛИ ПОДЗАПРОСЫ?
Подзапросы!
Объединения!
Подзапросы или самообъединения?
Что лучше?
ПРАВИЛА ПОДЗАПРОСОВ
ПОДЗАПРОСЫ, НЕ ВОЗВРАЩАЮЩИЕ ЗНАЧЕНИЙ ИЛИ
ВОЗВРАЩАЮЩИЕ НЕСКОЛЬКО ЗНАЧЕНИЙ
Подзапросы, начинающиеся с IN
Подзапросы, начинающиеся с NOT IN
Коррелированные подзапросы с IN
Подзапросы, начинающиеся с операторов сравнения и включающие
ключевые слова ANY или ALL
ПОДЗАПРОСЫ, ВОЗВРАЩАЮЩИЕ ЕДИНСТВЕННОЕ ЗНАЧЕНИЕ
Агрегирующие функции гарантируют единственное значение
Предложения GROUP BY и HAVING должны возвращать единственное
значение
Коррелированные подзапросы с операторами сравнения
ПОДЗАПРОСЫ, ВЫПОЛНЯЮЩИЕ ПРОВЕРКУ НА
СУЩЕСТВОВАНИЕ
NOT EXISTS отыскивает пустой набор
Использование EXISTS для поиска пересечения и разности
144
144
144
145
146
146
146
147
148
150
151
152
154
155
157
158
159
159
159
160
161
162
162
162
164
164
165
165
166
166
167
168
170
174
175
176
176
177
179
180
ПОДЗАПРОСЫ С РАЗНЫМИ УРОВНЯМИ ВЛОЖЕНИЯ
ПОДЗАПРОСЫ В ОПЕРАТОРАХ UPDATE, DELETE И INSERT
В ПОЛЕ ЗРЕНИЯ КУРСОРА
Глава 9. Создание и использование виртуальных таблиц (курсоров)
КУРСОР ОБЕСПЕЧИВАЕТ ГИБКОСТЬ
СОЗДАНИЕ КУРСОРОВ
Удаление курсоров
ПРЕИМУЩЕСТВА КУРСОРОВ
Почему же все-таки курсор?
КАК РАБОТАЮТ КУРСОРЫ
Правила присвоения имен столбцам курсора
Создание курсоров с объединениями и подзапросами
Ограничения на создание курсоров
Предложение Check Option
Разборка курсора
Переопределение курсоров
МОДИФИКАЦИЯ ДАННЫХ ПОСРЕДСТВОМ КУРСОРОВ
Правила в соответствии с ANSI
СОЗДАНИЕ КОПИЙ ДАННЫХ
ВОПРОСЫ АДМИНИСТРИРОВАНИЯ БАЗ ДАННЫХ
Глава 10. Безопасность, транзакции, производительность и
целостность
УПРАВЛЕНИЕ БАЗАМИ ДАННЫХ В РЕАЛЬНОМ МИРЕ
БЕЗОПАСНОСТЬ ДАННЫХ
Идентификация пользователя и особые пользователи
Команды GRANT и REVOKE
Курсоры как механизм обеспечения безопасности
ТРАНЗАКЦИИ
Транзакции и совпадения
Транзакции и восстановление
Транзакции, определяемые пользователем
Получение резервной копии и восстановление
ПРОИЗВОДИТЕЛЬНОСТЬ
Сравнение с эталоном
Структура и индексация
Запросы
Другие инструменты для мониторинга и повышения производительности
ЦЕЛОСТНОСТЬ ДАННЫХ
Ограничения на домен
Целостность объекта
Ссылочная целостность
ОТ АБСТРАКЦИЙ SQL К РЕАЛЬНОМУ МИРУ
Глава 11. Разрешение проблем
КАК ИСПОЛЬЗОВАТЬ SQL В СВОЕЙ РАБОТЕ
181
181
182
183
183
183
184
184
187
189
190
191
192
192
194
194
196
196
198
199
200
200
201
201
202
206
207
208
209
209
210
211
211
212
213
213
215
215
216
217
220
221
221
ФОРМАТИРОВАНИЕ И ОТОБРАЖЕНИЕ ДАННЫХ
Отображение одного поля в виде двух
Выравнивание строки символов по правому краю
Как указать число разрядов после десятичной точки
РАБОТА С ШАБЛОНАМИ
Сопоставление прописных и строчных букв
Поиск символьных данных заданного размера
Как найти данные типа дат
Замена пробелов на нули
ПОИСК ДАННЫХ С ПОМОЩЬЮ СЛОЖНЫХ ОБЪЕДИНЕНИЙ И
ПОДЗАПРОСОВ
Сопоставление пар столбцов в разных таблицах
Поиск данных в определенном диапазоне, если вам не известны точные
значения
Отображение данных в формате электронной таблицы
ПРЕДЛОЖЕНИЕ GROUP BY
Отображение данных по времени
ПОСЛЕДОВАТЕЛЬНЫЕ НОМЕРА
Нахождение максимального значения и добавление 1
Использование отдельной таблицы ключей
Использование произвольного значения
КАК ИЗБЕЖАТЬ ОШИБОК
Глава 12. Ошибки, и как их избежать
НЕТ, ВЫ НЕ ДУРАК
ПРЕДЛОЖЕНИЕ GROUP BY
Подсчет по единицам
ПРЕДЛОЖЕНИЯ WHERE И HAVING
Почему столько строк?
Сочетание значений строк и агрегирующих функций
Как избежать проблем с предложением HAVING
КЛЮЧЕВОЕ СЛОВО DISTINCT
DISTINCT со столбцами и выражениями
DISTINCT с агрегирующими функциями
DISTINCT и DISTINCT?
ДРУГИЕ НЕДОРАЗУМЕНИЯ
Удаление дубликатов
Нахождение "первого" входа
Приложение А. Краткое описание синтаксиса SQL, используемого в
книге
СОГЛАШЕНИЯ ПО СИНТАКСИСУ
ФОРМАТИРОВАНИЕ
Регистр
СПИСОК ОПЕРАТОРОВ
Приложение Б. Аналогии между ключевыми словами разных
222
222
224
227
229
230
231
232
234
236
236
238
239
243
243
244
245
246
247
247
248
248
248
249
249
249
253
256
258
259
260
261
262
262
263
265
265
265
265
266
267
диалектов SQL
СРАВНЕНИЕ СИНТАКСИСОВ
267
ОПРЕДЕЛЕНИЕ ДАННЫХ
267
Операторы базы данных
268
Создание и удаление объектов базы данных
269
МАНИПУЛЯЦИИ С ДАННЫМИ
271
АДМИНИСТРИРОВАНИЕ ДАННЫХ
273
Приложение В. Словарь терминов
276
Приложение Г. Описание базы данных bookbiz
284
ТАБЛИЦЫ
284
ОПЕРАТОРЫ CREATE И INSERT ДЛЯ БАЗЫ ДАННЫХ BOOKBIZ
290
Приложение Д. Список литературы
309
Предметный указатель
311
Предметный указатель
домен, 215
А
Е
агрегирующая функция, 100
естественное объединение, 147
администратор базы данных, 23
З
администрирование данных, 17
запись, 16
аргумент, 114
запрос, 18
атрибут, 16
значение, 16
Б
И
база данных, 16
идентификатор, 45
базовая таблица, 20; 183
индекс, 17
блокировка, 208
К
В
команда, 17
виртуальная таблица, 22
команды управления данными, 19
включающий диапазон, 90
контроль совпадений, 200
владелец, 23
кортеж, 16
вложенная сортировка, 103
курсор, 22
вложенный запрос, 72
кэш данных, 213
внешнее объединение, 146
Л
внешний ключ, 28
логическая независимость, 17
восстановление, 200
логические операторы, 86
вспомогательная таблица, 37
М
выборка данных, 17
моделирование зависимостей, 26
выражение, 67
модификация данных, 17
Г
Н
главная таблица, 37
набор символов, 100
групповой индекс, 56
назначение полномочий, 200
Д
немодифицированный оператор
декартово произведение, 143
сравнения, 174
декомпозиция без потерь, 27
непроцедурный язык
диаграмма зависимостей между
программирования, 19
объектами, 27
нормализация, 26
нормальная форма, 36
О
общий подъязык данных, 17
объект, 16
объектная целостность, 24
ограничение, 19
оператор, 17
определение данных, 17
оптимизатор запросов, 213
отношение, 16
П
первичный ключ, 16
подзапрос, 159
поисковая таблица, 42
поле, 16
пользовательская таблица, 16
порядок сортировки, 100
права на доступ и модификацию
данных, 23
правило, 58
проектирование базы данных, 25
производная таблица, 20
просматриваемая таблица, 183
псевдоним, 83
Р
различаемый нуль, 136
С
сгруппированный курсор, 197
системная таблица, 16
системный администратор, 23
системный журнал транзакций, 209
системный каталог, 16
сканирование таблицы, 58
составной индекс, 56
список выбора, 75
список таблиц, 83
сравнение с эталоном, 211
ссылочная целостность, 24
столбец, 16
столбец соединения, 141
стратегия доступа, 17
строка, 16
структура данных, 27
сущность, 16
схема, 48
Т
таблица, 16
терминатор, 47
транзакция, 207
триггерные действия, 218
триггерные условия, 218
У
уникальный индекс, 56
управление транзакциями, 24; 207
устройство базы данных, 48
Ф
файл, 16
физическая независимость данных,
17
фиктивное значение, 67
форма, 64
Ц
целостность, 24
Ш
шаблон, 96
Э
экземпляр, 31
Download