Предисловие ...................................................................................................................................... 6 Введение ............................................................................................................................................. 6 1. Реляционная модель данных .................................................................................................. 7 1.1. Определение реляционной модели ........................................................................................ 8 1.2. Таблицы .................................................................................................................................. 11 1.3. Первичные ключи .................................................................................................................. 13 1.4. Внешние ключи...................................................................................................................... 14 1.5. Связи между таблицами ........................................................................................................ 15 1.6. Нормализация отношений .................................................................................................... 17 1.7. Модели базы данных на логическом и физическом уровнях ............................................ 19 1.8. Целостность данных .............................................................................................................. 22 1.9. Архитектура "клиент-сервер" ............................................................................................... 23 Контрольные вопросы .................................................................................................................. 32 2. Введение в SQL ........................................................................................................................ 32 2.1. Объекты структуры базы данных ........................................................................................ 33 2.2. Функции SQL ......................................................................................................................... 36 2.3. Достоинства SQL ................................................................................................................... 40 2.4. SQL-сервер Firebird ............................................................................................................... 43 2.5. Правила синтаксиса и основные запросы SQL ................................................................... 47 2.6. Формы использования SQL ................................................................................................. 52 2.7. Имена объектов в SQL. Константы, отсутствующие данные ........................................... 53 2.8. Выражения.............................................................................................................................. 55 2.9. Типы данных .......................................................................................................................... 57 Контрольные вопросы .................................................................................................................. 61 3. Язык выборки данных ........................................................................................................... 61 3.1. Синтаксис запроса SELECT ................................................................................................. 61 3.2. Запросы к одной таблице ...................................................................................................... 63 3.2.1. Предложения SELECT и FROM .................................................................................... 65 3.2.2. Предложение WHERE .................................................................................................... 70 3.2.2.1. Простое сравнение .................................................................................................... 71 3.2.2.2. Проверка на принадлежность диапазону значений ............................................... 72 3.2.2.3. Проверка на соответствие шаблону ........................................................................ 73 3.2.2.4. Проверка на наличие последовательности символов ............................................ 74 3.2.2.5. Проверка на совпадение с началом строки ............................................................ 75 3.2.2.6. Проверка на членство в множестве ......................................................................... 75 3.2.2.7. Проверка значения на NULL ................................................................................... 76 3.2.2.8. Проверка двух значений на отличие ....................................................................... 77 3.2.2.9. Составные условия поиска ....................................................................................... 77 3.2.3. Функции в SQL ................................................................................................................ 79 3.2.3.1. Классификация функций .......................................................................................... 79 3.2.3.2. Скалярные функции .................................................................................................. 81 3.2.3.2.1. Строковые функции ........................................................................................... 81 3.2.3.2.2. Числовые функции ............................................................................................. 87 3.2.3.2.3. Функции даты и времени ................................................................................... 89 3.2.3.2.4. Функция преобразования типа .......................................................................... 92 3.2.3.3. Агрегатные функции ................................................................................................ 94 3.2.3.3.1. Общее описание агрегатных функций .............................................................. 94 3.2.3.3.2. Вычисление среднего значения ......................................................................... 94 3.2.3.3.3. Вычисление суммы значений в столбце ........................................................... 95 3.2.3.3.4. Вычисление экстремумов .................................................................................. 96 3.2.3.3.5. Вычисление количества значений в столбце ................................................... 96 3.2.3.4. Функции на списке значений ................................................................................... 97 3.2.3.4.1. Функции MAXVALUE и MINVALUE ............................................................. 97 3.2.3.4.2. Функция LIST...................................................................................................... 98 3.2.3.5. Дополнительные возможности вывода в предложении SELECT ........................ 98 3.2.3.5.1. Операция выбора CASE ..................................................................................... 99 3.2.3.5.2. Функция COALESCE ....................................................................................... 101 3.2.3.5.3. Функция NULLIF .............................................................................................. 102 3.2.3.5.4. Функция IIF ....................................................................................................... 103 3.2.3.5.5. Функция DECODE ............................................................................................ 104 3.2.4. Сортировка результатов запроса ................................................................................. 105 3.2.5. Предложение GROUP BY ............................................................................................. 109 3.2.6. Предложение HAVING ................................................................................................. 113 3.3. Многотабличные и вложенные запросы ........................................................................... 116 3.3.1. Соединения таблиц ....................................................................................................... 117 3.3.1.1. Неявное соединение таблиц ................................................................................... 117 3.3.1.2. Явное соединение таблиц ....................................................................................... 121 3.3.1.3. Стандартные соединения (объединения) таблиц ................................................. 125 3.3.1.3.1. Декартово произведение .................................................................................. 125 3.3.1.3.2. Эквисоединение ................................................................................................ 126 3.3.1.3.3. Естественное соединение таблиц .................................................................... 127 3.3.1.3.4. Композиция ....................................................................................................... 127 3.3.1.3.5. Тета-соединение................................................................................................ 128 3.3.1.4. Соединение таблицы со своей копией ................................................................ 129 3.3.2. Запросы с вложенными запросами .............................................................................. 130 3.3.2.1. Виды вложенных запросов ..................................................................................... 130 3.3.2.2. Запросы с простыми подзапросами ....................................................................... 132 3.3.2.2.1. Простые подзапросы в предложении WITH .................................................. 132 3.3.2.2.2. Простые подзапросы в предложении SELECT .............................................. 136 3.3.2.2.3. Простые подзапросы в предложении FROM ................................................. 137 3.3.2.2.4. Простые подзапросы в предложениях WHERE и HAVING ......................... 140 3.3.2.3. Запросы со связанными подзапросами ................................................................. 145 3.3.2.3.1. Связанные подзапросы в предложении SELECT .......................................... 146 3.3.2.3.2. Связанные подзапросы в предложениях WHERE и HAVING .................... 148 3.3.2.4. Предикаты ANY и ALL .......................................................................................... 153 3.3.2.5. Предикат SINGULAR ............................................................................................. 156 3.3.2.6. Предикат EXISTS .................................................................................................... 157 3.3.3. Объединение результатов нескольких запросов ........................................................ 160 Контрольные вопросы ................................................................................................................ 164 4. Язык определения данных .................................................................................................. 164 4.1. Домены ................................................................................................................................. 165 4.2. Создание, изменение и удаление базовых таблиц БД ...................................................... 169 4.2.1. Создание таблицы ......................................................................................................... 169 4.2.2. Определение ограничений столбца ............................................................................. 171 4.2.3. Определение ограничений на таблицу ........................................................................ 174 4.2.4. Удаление таблицы БД ................................................................................................... 177 4.2.5. Изменение определения таблицы ................................................................................ 177 4.3. Индексы ................................................................................................................................ 181 4.4. Временные таблицы ............................................................................................................ 184 4.5. Представления...................................................................................................................... 187 4.6. Комментарии к объектам базы данных ............................................................................. 194 Контрольные вопросы ................................................................................................................ 195 5. Язык манипулирования данными ..................................................................................... 195 5.1. Добавление новых данных .................................................................................................. 196 5.1.1. Однострочный запрос INSERT ................................................................................... 196 5.1.2. Многострочный запрос INSERT .................................................................................. 197 5.2. Обновление существующих данных.................................................................................. 199 5.2.1. Простой запрос UPDATE ............................................................................................. 199 5.2.2. Запрос UPDATE с подзапросом ................................................................................... 200 5.3. Обобщенное обновление и добавление данных ............................................................... 204 5.4. Слияние данных ................................................................................................................... 206 5.5. Удаление существующих данных ...................................................................................... 208 5.5.1. Простой запрос DELETE .............................................................................................. 208 5.5.2. Запрос DELETE с подзапросом ................................................................................... 209 5.6. Обновление представлений ................................................................................................ 212 Контрольные вопросы ................................................................................................................ 221 6. Процедурный язык ............................................................................................................... 221 6.1. Основы разработки модулей на PSQL ............................................................................... 222 6.1.1. Переменные ................................................................................................................... 222 6.1.2. Условные операторы ..................................................................................................... 224 6.1.2.1. Оператор ветвления IF ............................................................................................ 224 6.1.2.2. Оператор WHILE .................................................................................................... 225 6.1.3. Курсоры в PSQL ............................................................................................................ 225 6.1.3.1. Неявный курсор ....................................................................................................... 226 6.1.3.2. Явный курсор .......................................................................................................... 228 6.1.4. SQL сценарии................................................................................................................. 229 6.1.5. Генераторы ..................................................................................................................... 232 6.1.6. Исключительные ситуации .......................................................................................... 234 6.2. Хранимые процедуры .......................................................................................................... 236 6.2.1. Определение хранимых процедур ............................................................................... 236 6.2.2. Процедуры выбора ........................................................................................................ 240 6.2.3. Выполняемые процедуры ............................................................................................. 245 6.3. Триггеры ............................................................................................................................... 252 6.3.1. Триггеры DML ............................................................................................................... 252 6.3.1.1. Определение триггера ............................................................................................ 252 6.3.1.2. Примеры поддержания ссылочной целостности ................................................. 258 6.3.1.3. Модификация и удаление триггера ....................................................................... 261 6.3.2. Триггеры базы данных .................................................................................................. 262 6.4. Выполняемые блоки ............................................................................................................ 264 Контрольные вопросы ................................................................................................................ 265 7. Защита данных ...................................................................................................................... 265 7.1. Управление доступом к данным ........................................................................................ 266 7.1.1. Требования к безопасности данных ............................................................................ 266 7.1.2. Привилегии доступа и передача привилегий ............................................................. 267 7.1.3. SQL роли ........................................................................................................................ 271 7.1.4. Отмена привилегий ....................................................................................................... 273 7.1.5. Привилегии на представления ..................................................................................... 275 7.2. Транзакции ........................................................................................................................... 277 7.2.1. Понятие транзакции ...................................................................................................... 277 7.2.2. Восстановление данных ................................................................................................ 278 7.2.3. Восстановление системы .............................................................................................. 282 7.2.4. Параллелизм................................................................................................................... 285 Контрольные вопросы ................................................................................................................ 288 Приложение А ............................................................................................................................... 289