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

