Предисловие | 5 |
Для кого предназначена эта книга | 9 |
|
Часть 1. Обзор языка SQL | 11 |
|
|
Глава 1. Обзор | 13 |
|
Язык SQL | 13 |
Роль SQL | 15 |
Достоинства SQL | 17 |
Независимость от конкретных СУБД | 18 |
Переносимость с одной вычислительной системы на другие | 18 |
Стандарты языка SQL | 18 |
Одобрение SQL компанией IBM (СУБД DB2) | 19 |
Протокол ODBC и компания Microsoft | 19 |
Реляционная основа | 19 |
Высокоуровневая структура, напоминающая английский язык | 20 |
Интерактивные запросы | 20 |
Программный доступ к базе данных | 20 |
Различные представления данных | 20 |
Полноценный язык для работы с базами данных | 21 |
Динамическое определение данных | 21 |
Архитектура клиент/сервер | 21 |
|
Глава 2. Краткое введение в SQL | 23 |
|
Простая база данных | 23 |
Чтение данных | 24 |
Получение итоговых данных | 26 |
Добавление данных | 27 |
Удаление данных | 27 |
Обновление данных | 28 |
Защита данных | 28 |
Создание базы данных | 29 |
Резюме | 30 |
|
Глава 3. Развитие SQL | 31 |
|
SQL и управление базами данных | 31 |
Краткая история SQL | 32 |
Первые годы | 33 |
Первые реляционные СУБД | 34 |
СУБД компании IBM | 34 |
Коммерческое признание | 35 |
Стандарты SQL | 37 |
Стандарты ANSI/ISO | 37 |
Другие стандарты SQL | 38 |
ODBC и консорциум SQL Access Group | 39 |
Миф о переносимости | 39 |
SQL и сети | 41 |
Централизованная архитектура | 41 |
Архитектура файл/сервер | 42 |
Архитектура клиент/сервер | 43 |
Влияние SQL | 44 |
SQL и спецификация SAA компании IBM | 44 |
SQL на мини-компьютерах | 45 |
SQL на системах UNIX | 45 |
SQL и обработка транзакций | 46 |
SQL на персональных компьютерах | 47 |
SQL в локальных вычислительных сетях | 48 |
Резюме | 49 |
|
Глава 4. Реляционные базы данных | 51 |
|
Первые модели данных | 51 |
Системы управления файлами | 51 |
Иерархические СУБД | 53 |
Сетевые базы данных | 54 |
Реляционная модель данных | 56 |
Учебная база данных | 57 |
Таблицы | 58 |
Первичные ключи | 60 |
Отношения предок/потомок | 61 |
Внешние ключи | 63 |
Двенадцать правил Кодда * | 64 |
Резюме | 66 |
|
Часть 2. Чтение данных | 69 |
|
|
Глава 5. Основы SQL | 71 |
|
Операторы | 71 |
Имена | 74 |
Имена таблиц | 75 |
Имена столбцов | 75 |
Типы данных | 75 |
Дополнительные типы данных | 77 |
Различия в реализациях типов данных | 81 |
Константы | 83 |
Числовые константы | 83 |
Строковые константы | 84 |
Константы даты и времени | 84 |
Символьные константы | 85 |
Выражения | 87 |
Встроенные функции | 88 |
Отсутствующие данные (значения NULL) | 90 |
Резюме | 91 |
|
Глава 6. Простые запросы на чтение | 91 |
|
Оператор SELECT | 91 |
Предложение SELECT | 93 |
Предложение FROM | 94 |
Результаты запроса на чтение | 94 |
Простые запросы | 97 |
Вычисляемые столбцы | 98 |
Чтение всех столбцов (оператор SELECT *) | 100 |
Повторяющиеся строки (ключевое слово DISTINCT) | 101 |
Отбор строк (предложение WHERE) | 102 |
Условия поиска | 104 |
Сравнение (=, <>, <, <=, >, >=) | 105 |
Проверка на принадлежность диапазону значений (BETWEEN) | 108 |
Поверка на членство в множестве (IN) | 110 |
Проверка на соответствие шаблону (LIKE) | 112 |
Проверка на равенство значению NULL (IS NULL) | 114 |
Составные условия поиска (AND, OR и NOT) | 116 |
Сортировка результатов запроса (предложение ORDER BY) | 119 |
Правила выполнения однотабличных запросов | 121 |
Объединение результатов нескольких запросов (UNION) * | 122 |
Запрос на объединение и повторяющиеся строки * | 124 |
Запрос на объединение и сортировка * | 126 |
Многократные запросы на объединение * | 126 |
Резюме | 128 |
|
Глава 7. Многотабличные запросы на чтение (объединения) | 129 |
|
Пример двухтабличного запроса | 129 |
Простое объединение таблиц (объединение по равенству) | 131 |
Запросы с использованием отношения предок/потомок | 133 |
Объединения с условием для отбора строк | 135 |
Несколько связанных столбцов | 136 |
Запросы на чтение к трём и более таблицам | 136 |
Прочие объединения таблиц по равенству | 139 |
Объединение таблиц по неравенству | 141 |
Особенности многотабличных запросов | 142 |
Полные имена столбцов | 142 |
Чтение всех столбцов | 143 |
Самообъединения | 144 |
Псевдонимы таблиц | 147 |
Производительность при обработке многотабличных запросов | 148 |
Структура объединения таблиц | 149 |
Умножение таблиц | 149 |
Правила выполнения многотабличных запросов | 151 |
Внешнее объединение таблиц * | 152 |
Левое и правое внешние объединения * | 156 |
Система записи внешнего объединения * | 157 |
Объединения и стандарт SQL2 | 159 |
Внутренние объединения в стандарте SQL2 | 160 |
Внешние объединения в стандарте SQL2 | 162 |
Перекрёстные объединения и запросы на объединение в SQL2 | 163 |
Многотабличные объединения в стандарте SQL2 | 164 |
Резюме | 166 |
|
Глава 8. Итоговые запросы на чтение | 167 |
|
Агрегатные функции | 167 |
Вычисление суммы столбца (SUM) | 169 |
Вычисление среднего значения столбца (AVG) | 170 |
Вычисление экстремумов (MIN и МАХ) | 171 |
Вычисление количества значений в столбце (COUNT) | 172 |
Агрегатные функции в списке возвращаемых столбцов | 173 |
Агрегатные функции и значения NULL | 176 |
Удаление повторяющихся строк (DISTINCT) | 177 |
Запросы с группировкой (предложение GROUP BY) | 179 |
Несколько столбцов группировки | 181 |
Ограничения на запросы с группировкой | 185 |
Значения NULL в столбцах группировки | 186 |
Условия поиска групп (предложение HAVING) | 187 |
Ограничения на условия поиска групп | 191 |
Значения NULL и условия поиска групп | 191 |
Предложение HAVING без GROUP BY | 192 |
Резюме | 192 |
|
Глава 9. Вложенные запросы на чтение | 193 |
|
Применение вложенных запросов | 193 |
Что такое вложенный запрос | 194 |
Вложенные запросы в предложении WHERE | 195 |
Внешние ссылки | 197 |
Условия поиска во вложенном запросе | 197 |
Сравнение с результатом вложенного запроса (=, <>, <, <=, >, >=) | 198 |
Проверка на принадлежность результатам вложенного запроса (IN) | 200 |
Проверка на существование (EXISTS) | 201 |
Многократное сравнение (ANY и ALL) * | 203 |
Вложенные запросы и объединения | 208 |
Уровни вложенности запросов | 210 |
Связанные вложенные запросы * | 211 |
Вложенные запросы в предложении HAVING * | 214 |
Резюме | 216 |
SQL-запросы на чтение — заключительное резюме | 217 |
|
Часть 3. Изменение данных | 219 |
|
|
Глава 10. Внесение изменений в базу данных | 221 |
|
Добавление новых данных | 221 |
Однострочный оператор INSERT | 222 |
Многострочный оператор INSERT | 226 |
Утилиты пакетной загрузки | 228 |
Удаление существующих данных | 229 |
Оператор DELETE | 229 |
Удаление всех строк | 231 |
Оператор DELETE с вложенным запросом * | 232 |
Обновление существующих данных | 234 |
Оператор UPDATE | 234 |
Обновление всех строк | 236 |
Оператор UPDATE с вложенным запросом * | 237 |
Резюме | 238 |
|
Глава 11. Целостность данных | 239 |
|
Условия целостности данных | 239 |
Обязательность данных | 241 |
Проверка на правильность | 242 |
Целостность таблицы | 243 |
Прочие условия уникальности | 244 |
Уникальность и значения NULL | 244 |
Ссылочная целостность | 245 |
Проблемы, связанные со ссылочной целостностью | 246 |
Правила удаления и обновления * | 249 |
Каскадные удаления и обновления * | 252 |
Ссылочные циклы * | 254 |
Внешние ключи и значения NULL * | 257 |
Деловые правила | 259 |
Что такое триггер | 260 |
Триггеры и ссылочная целостность | 261 |
Достоинства и недостатки триггеров | 262 |
Триггеры и стандарты SQL | 262 |
Резюме | 263 |
|
Глава 12. Обработка транзакций | 265 |
|
Что такое транзакция | 265 |
Операторы COMMIT и ROLLBACK | 266 |
Модель транзакции в стандарте ANSI/ISO | 269 |
Другие модели транзакций | 270 |
Журнал транзакций * | 273 |
Транзакции и работа в многопользовательском режиме | 274 |
Проблема пропавшего обновления | 275 |
Проблема промежуточных данных | 276 |
Проблема несогласованных данных | 277 |
Проблема строк-призраков | 278 |
Параллельные транзакции | 279 |
Блокировка * | 281 |
Уровни блокировки | 282 |
Жёсткая и нежёсткая блокировки | 283 |
Тупиковые ситуации * | 284 |
Усовершенствованные методы блокировки * | 286 |
Резюме | 292 |
|
Часть 4. Структура базы данных | 293 |
|
|
Глава 13. Создание баз данных | 295 |
|
Язык определения данных | 295 |
Создание базы данных | 297 |
Определения таблиц | 298 |
Создание таблицы (оператор CREATE TABLE) | 298 |
Удаление таблицы (оператор DROP TABLE) | 306 |
Изменение определения таблицы (оператор ALTER TABLE) | 307 |
Определение ограничительных условий | 310 |
Условия проверки | 311 |
Утверждения | 312 |
Определения доменов | 312 |
Синонимы (операторы CREATE/DROP SYNONYM) | 313 |
Индексы (операторы CREATE/DROP INDEX) | 314 |
Другие объекты базы данных | 317 |
Структура базы данных | 319 |
Однобазовая архитектура | 320 |
Многобазовая архитектура | 321 |
Каталоговая архитектура | 323 |
DDL и стандарт ANSI/ISO | 325 |
Резюме | 328 |
|
Глава 14. Представления | 329 |
|
Что такое представление | 329 |
Как СУБД работает с представлениями | 331 |
Преимущества представлений | 331 |
Недостатки представлений | 332 |
Создание представлений (оператор CREATE VIEW) | 332 |
Горизонтальные представления | 333 |
Вертикальные представления | 335 |
Смешанные представления | 336 |
Сгруппированные представления | 337 |
Объединённые представления | 339 |
Обновление представлений | 340 |
Обновление представлений и стандарт ANSI/ISO | 342 |
Обновление представлений в коммерческих СУБД | 342 |
Контроль обновления представления (предложение WITH CHECK OPTION) | 343 |
Удаление представления (оператор DROP VIEW) | 345 |
Резюме | 346 |
|
Глава 15. SQL и безопасность баз данных | 347 |
|
Принципы защиты данных, применяемые в SQL | 347 |
Идентификатор пользователя | 349 |
Защищаемые объекты | 353 |
Привилегии | 353 |
Представления и защита данных в SQL | 355 |
Предоставление привилегий (оператор GRANT) | 358 |
Привилегии на столбцы | 359 |
Передача привилегий (предложение WITH GRANT OPTION) | 361 |
Отмена привилегий (оператор REVOKE) | 363 |
Оператор REVOKE и право предоставления привилегий | 365 |
Оператор REVOKE и стандарт ANSI/ISO | 367 |
Резюме | 368 |
|
Глава 16. Системный каталог | 369 |
|
Что такое системный каталог | 369 |
Системный каталог и средства формирования запросов | 370 |
Системный каталог и стандарт ANSI/ISO | 371 |
Содержимое системного каталога | 372 |
Информация о таблицах | 373 |
Информация о столбцах | 376 |
Информация о представлениях | 378 |
Комментарии и метки | 380 |
Информация об отношениях между таблицами | 381 |
Информация о пользователях | 383 |
Информация о привилегиях | 384 |
Информационная схема в стандарте SQL2 | 386 |
Прочая информация | 391 |
Резюме | 392 |
|
Часть 5. Программирование на SQL | 393 |
|
|
Глава 17. Встроенный SQL | 395 |
|
Обзор программного SQL | 395 |
Выполнение операторов SQL в СУБД | 397 |
Основные концепции встроенного SQL | 399 |
Разработка программы со встроенным SQL | 401 |
Выполнение программы со встроенным SQL | 403 |
Простые операторы встроенного SQL | 406 |
Объявления таблиц | 409 |
Обработка ошибок | 410 |
Использование базовых переменных | 416 |
Чтение данных с помощью встроенного SQL | 423 |
Однострочные запросы | 424 |
Многострочные запросы | 430 |
Удаления и обновления данных с использованием курсоров | 439 |
Курсоры и обработка транзакций | 444 |
Резюме | 445 |
|
Глава 18. Динамический SQL* | 447 |
|
Недостатки статического SQL | 447 |
Основная концепция динамического SQL | 449 |
Динамическое выполнение операторов (оператор EXECUTE IMMEDIATE) | 451 |
Динамическое выполнение в два этапа | 453 |
Оператор PREPARE | 456 |
Оператор EXECUTE | 457 |
Оператор DECLARE STATEMENT | 465 |
Динамические запросы на чтение | 466 |
Оператор DESCRIBE | 471 |
Динамический оператор DECLARE CURSOR | 474 |
Динамический оператор OPEN | 475 |
Динамический оператор FETCH | 477 |
Динамический оператор CLOSE | 478 |
Диалекты динамического SQL | 478 |
Динамический SQL в SQL/DS | 479 |
Динамический SQL в Oracle * | 482 |
Динамический SQL и стандарт SQL2 | 485 |
Стандарт SQL2 и область SQLDA | 488 |
Стандарт SQL2 и динамические SQL-запросы | 492 |
Резюме | 495 |
|
Глава 19. Интерфейсы программирования приложений SQL | 497 |
|
Принципы применения интерфейса программирования приложений | 497 |
Интерфейс программирования приложений в SQL Server | 499 |
Основные принципы работы SQL Server | 501 |
Запросы на чтение в SQL Server | 509 |
Хранимые процедуры | 514 |
Позиционные обновления | 521 |
Динамические запросы | 526 |
Другие интерфейсы программирования приложений | 529 |
Интерфейс вызовов в Oracle | 530 |
Интерфейс программирования приложений в SQLBase | 534 |
Резюме | 539 |
|
Часть 6. Перспективы развития языка SQL | 535 |
|
|
Глава 20. Управление распределёнными базами данных | 537 |
|
Проблемы управления распределёнными данными | 537 |
Уровни доступа к распределённым данным | 542 |
Удалённые запросы | 543 |
Удалённые транзакции | 544 |
Распределённые транзакции | 545 |
Распределённые запросы | 547 |
Распределённые таблицы | 549 |
Горизонтальное разделение таблиц | 549 |
Вертикальное разделение таблиц | 551 |
Зеркальные таблицы | 552 |
Реплицированные таблицы | 553 |
Метод двухфазного выполнения * | 555 |
Резюме | 559 |
|
Глава 21. SQL и основные тенденции развития баз данных | 561 |
|
Тенденции на рынке баз данных | 561 |
Повышение производительности аппаратного обеспечения | 563 |
Война за показатели производительности | 565 |
Стандарты языка SQL | 566 |
Расширения языка SQL | 568 |
Сложные типы данных | 569 |
Приложения для архитектуры клиент/сервер | 570 |
Доступ к реляционным базам данных из приложений для персональных |
компьютеров | 571 |
Клиентские программы для работы с базами данных | 572 |
Распределённые базы данных | 573 |
Объектно-ориентированные базы данных | 573 |
|
Приложение А. Учебная база данных | 577 |
Приложение Б. Синтаксис языка SQL (стандарт ANSI/ISO) | 583 |
Предметный указатель | 587 |