Дж.Боуман, С.Эмерсон, М.Дарновски ПРАКТИЧЕСКОЕ РУКОВОДСТВО ПО 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