Вы находитесь на странице: 1из 322

Дж.Боуман, С.Эмерсон, М.

Дарновски
ПРАКТИЧЕСКОЕ РУКОВОДСТВО ПО 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 составной индекс, 56
нормальная форма, 36 список выбора, 75
О список таблиц, 83
общий подъязык данных, 17 сравнение с эталоном, 211
объект, 16 ссылочная целостность, 24
объектная целостность, 24 столбец, 16
ограничение, 19 столбец соединения, 141
оператор, 17 стратегия доступа, 17
определение данных, 17 строка, 16
оптимизатор запросов, 213 структура данных, 27
отношение, 16 сущность, 16
П схема, 48
первичный ключ, 16 Т
подзапрос, 159 таблица, 16
поисковая таблица, 42 терминатор, 47
поле, 16 транзакция, 207
пользовательская таблица, 16 триггерные действия, 218
порядок сортировки, 100 триггерные условия, 218
права на доступ и модификацию У
данных, 23 уникальный индекс, 56
правило, 58 управление транзакциями, 24; 207
проектирование базы данных, 25 устройство базы данных, 48
производная таблица, 20 Ф
просматриваемая таблица, 183 файл, 16
псевдоним, 83 физическая независимость данных,
Р 17
различаемый нуль, 136 фиктивное значение, 67
С форма, 64
сгруппированный курсор, 197 Ц
системная таблица, 16 целостность, 24
системный администратор, 23 Ш
системный журнал транзакций, 209 шаблон, 96
системный каталог, 16 Э
сканирование таблицы, 58 экземпляр, 31

Оценить