
- •Введение в бд
- •Файловые системы
- •Системы с базами данных
- •Модели данных
- •Альтернативная терминология Терминология, используемая в реляционной модели, порой может привести к путанице, поскольку помимо предложенных двух наборов терминов существует еще один – третий.
- •Сетевая модель данных
- •Иерархическая модель данных
- •Вопросы:
- •Упражнения:
- •Реляционная модель.
- •Реляционная алгебра. Реляционное исчисление.
- •Реляционная модель
- •Реляционные языки
- •Реляционная алгебра
- •Унарные операции реляционной алгебры
- •Операции с множествами
- •Операции соединения
- •Деление
- •Реляционное исчисление
- •Реляционное исчисление кортежей
- •Реляционное исчисление доменов
- •Другие языки
- •Тема 3 Моделирование данных Модель «сущность-связь»
- •Элементы модели «сущность-связь»
- •Сущность
- •Атрибуты
- •Идентификаторы
- •Три типа бинарных связей
- •Диаграммы «сущность-связь»
- •Изображение атрибутов в диаграммах «сущность-связь»
- •Слабые сущности
- •Подтипы сущностей
- •Пример er-диаграммы
- •Диаграммы «сущность-связь» в стиле uml
- •Сущности и связи в uml
- •Представление слабых сущностей
- •Представление подтипов
- •Конструкции ооп, введенные языком uml
- •Семантическая объектная модель
- •Семантические объекты
- •Определение семантических объектов
- •Атрибуты
- •Кардинальное число атрибута
- •Экземпляры объектов
- •Парные атрибуты
- •Объектные идентификаторы
- •Домены атрибутов
- •Представления семантических объектов
- •Создание семантических объектных моделей данных
- •Пример: база данных администрации нтуу «кпи»
- •Спецификация объектов
- •Типы объектов
- •Простые объекты
- •Составные объекты
- •Гибридные объекты
- •Ассоциативные объекты
- •Объекты вида родитель/подтип
- •Объекты вида архетип/версия
- •Переход от семантической объектной модели к модели «сущность-связь»
- •Вопросы:
- •Упражнения:
- •Тема 4 Нормализация
- •Классы отношений
- •Нормальные формы от первой до пятой
- •Тема 5 Методология проектирования баз данных Введение в методологию проектирования баз данных
- •Методология концептуального проектирования базы данных
- •Методология логического проектирования реляционных баз данных
- •Суть состоит в том, что при устранении избыточности очень важно исследовать значение каждой из связей, существующих между сущностями.
- •Методология физического проектирования базы данных
- •Трехуровневая архитектура ansi-sparc
- •Система управления Базами Данных
- •1. Хранение, извлечение и обновление данных
- •2. Каталог доступный конечным пользователям
- •Поддержка транзакций
- •Сервисы управления параллельностью
- •Сервисы восстановления
- •6. Сервисы контроля доступа к данным
- •Поддержка обмена данными
- •8. Вспомогательные службы
- •Преимущества:
- •Недостатки:
- •Вопросы:
- •Упражнения:
- •История языка sql
- •Особая роль языка sql
- •Используемая терминология
- •Запись операторов sql
- •Манипулирование данными
- •Литералы
- •Простые запросы
- •Выборка строк (конструкция where)
- •Сортировка результатов (конструкция order by)
- •Использование агрегирующих функций языка sql
- •Группирование результатов (конструкция group by)
- •Ограничения на выполнение группирования (конструкция having)
- •Подзапросы
- •Ключевые слова any и all
- •Многотабличные запросы
- •Выполнение соединений
- •Внешние соединения
- •Ключевые слова exists и not exist
- •Комбинирование результирующих таблиц (операции union, intersect и except)
- •Изменение содержимого базы данных
- •Добавление новых данных в таблицу (оператор insert)
- •Модификация данных в базе (оператор update)
- •Удаление данных из базы (оператор delete)
- •Скалярные типы данных языка sql
- •Логические данные (тип boolean)
- •Символьные данные (тип character)
- •Битовые данные (тип bit)
- •Точные числовые данные (тип exact numeric)
- •Округленные числовые данные (тип approximate numeric)
- •Дата и время (тип datetime)
- •Интервальный тип данных interval
- •Скалярные операторы
- •Средства поддержки целостности данных
- •Обязательные данные
- •Ограничения для доменов
- •Целостность сущностей
- •Ссылочная целостность
- •Требования данного предприятия
- •Определение данных
- •Создание баз данных
- •Создание таблиц (оператор create table)
- •Модификация определения таблицы (оператор alter table)
- •Удаление таблиц (оператор drop table)
- •Создание индекса (оператор create index)
- •Удаление индекса (оператор drop index)
- •Представления
- •Создание представлений (оператор create view)
- •Удаление представлений (оператор drop view)
- •Замена представлений
- •Ограничения на использование представлений
- •Обновление данных в представлениях
- •Использование конструкции with check option
- •Преимущества и недостатки представлений
- •Преимущества
- •Недостатки
- •Материализация представлений
- •Использование транзакций
- •Немедленные и отложенные ограничения поддержки целостности данных
- •Управление доступом к данным
- •Идентификаторы пользователей и права владения
- •Привилегии
- •Предоставление привилегий другим пользователям (оператор grant)
- •Отмена предоставленных пользователям привилегий (оператор revoke)
- •Приложение
- •Тема 7.3 Хранимые процедуры и функции. Триггеры.
- •Создание хранимых процедур и функций
- •Простые формы выражений
- •Поддержка транзакций
- •Свойства транзакций
- •Архитектура базы данных
- •Управление параллельным доступом
- •Проблема потерянного обновления
- •Проблема зависимости от незафиксированных результатов (или "грязного" чтения)
- •Проблема анализа несогласованности
- •Упорядочиваемость и восстанавливаемость
- •Конфликтная упорядочиваемость
- •Упорядочиваемость по просмотру
- •Восстанавливаемость
- •Методы управления параллельным доступом
- •Методы блокировки
- •Двухфазная блокировка
- •Управление параллельным выполнением при использовании индексных структур
- •Защелки
- •Взаимоблокировка
- •Тайм-ауты
- •Предотвращение взаимоблокировок
- •Обнаружение взаимоблокировок
- •Частота выполнения операции обнаружения взаимоблокировок
- •Возобновление нормальной работы после обнаружения взаимоблокировки
- •Использование временных отметок
- •Правило записи Томаса
- •Сравнение методов
- •Упорядочение временных отметок в случае многих версий
- •Оптимистические методы упорядочения
- •Степень детализации блокируемых элементов данных
- •Иерархия степеней детализации
- •Блокировка с учетом нескольких степеней детализации
- •Восстановление базы данных
- •Необходимость восстановления
- •Транзакции и восстановление
- •Управление буферами базы данных
- •Функции восстановления
- •Механизм резервного копирования
- •Файл журнала
- •Создание контрольных точек
- •Методы восстановления
- •Метод восстановления с использованием отложенного обновления
- •Метод восстановления с использованием немедленного обновления
- •Метод теневого страничного обмена
- •Улучшенные модели транзакций
- •Модель вложенных транзакций
- •Эмуляция механизма вложенных транзакций с помощью точек сохранения
- •Хроники
- •Модель многоуровневых транзакций
- •Динамическая реструктуризация
- •Модели рабочих потоков
- •Общий обзор методов обработки запросов
- •Основные этапы обработки запросов
- •Динамическая и статическая оптимизация запросов
- •Декомпозиция запросов
- •Нормализация
- •Семантический анализ
- •Упрощение
- •Реструктуризация запросов
- •Эвристический подход к оптимизации запросов
- •Правила преобразования операций реляционной алгебры
- •Оценка стоимости операций реляционной алгебры
- •Статистические показатели базы данных
- •Вариант 6. Поиск по равенству значению кластеризующего (вторичного) индекса
- •Вариант 7. Поиск по равенству значению некластеризующего (вторичного) индекса
- •Составные предикаты
- •Конъюнктивная выборка без дизъюнкций
- •Выборки с дизъюнкциями
- •Конвейерная обработка данных
- •Тема 10
- •Основные типы угроз
- •Контрмеры – компьютерные средства контроля
- •Авторизация пользователей
- •Привилегии
- •Права владения и привилегии
- •Представления (подсхемы)
- •Резервное копирование и восстановление
- •Поддержка целостности
- •Шифрование
- •Raid (массив независимых дисковых накопителей с избыточностью)
- •Средства защиты субд Microsoft Access
- •Установка пароля
- •Защита на уровне пользователя
Выборка строк (конструкция where)
В приведенных выше примерах в результате выполнения операторов SELECT выбирались все строки указанной таблицы. Однако очень часто требуется тем или иным образом ограничить набор строк, помещаемых в результирующую таблицу запроса. Это достигается с помощью указания в запросе конструкции WHERE. Она состоит из ключевого слова WHERE, за которым следует перечень условий поиска, определяющих те строки, которые должны быть выбраны при выполнении запроса. Существует пять основных типов условий поиска (или предикатов, если пользоваться терминологией ISO).
Сравнение. Сравниваются результаты вычисления одного выражения с результатами вычисления другого выражения.
Диапазон. Проверяется, попадает ли результат вычисления выражения в заданный диапазон значений.
Принадлежность к множеству. Проверяется, принадлежит ли результат вычисления выражения к заданному множеству значений.
Соответствие шаблону. Проверяется, отвечает ли некоторое строковое значение заданному шаблону.
Значение NULL. Проверяется, содержит ли данный столбец NULL (неопределенное значение).
Конструкция WHERE эквивалентна операции выборки реляционной алгебры. Рассмотрим примеры использования всех указанных типов условий поиска.
Пример 7.1.5. Условие поиска путем сравнения
Перечислите всех студентов с проходным баллом >4.75.
SELECT НГ, НС, ФИО, ПБАЛЛ
FROM СТУДЕНТ
WHERE ПБАЛЛ > 4.75;
В этом запросе используются таблица СТУДЕНТ и предикат ПБАЛЛ > 4.75. При выполнении запроса будет создана новая таблица, содержащая только те строки таблицы СТУДЕНТ, в которых значение столбца ПБАЛЛ больше 4.75. Результаты выполнения запроса представлены в табл. 7.1.6.
Таблица 7.1.6. Результат выполнения запроса из примера 7.1.5
-
Группа
№ студента
ФИО
Проходной балл
001
01
Васильев
5
В языке SQL можно использовать простые операции сравнения, перечисленные в табл 7.1.7.
Таблица 7.1.7. Операции сравнения
Знак операции |
Назначение |
= |
Равно |
<> |
Не равно (стандарт ISO) |
!- |
Не равно (используется в некоторых диалектах) |
< |
Меньше |
> |
Больше |
<= |
Меньше или равно |
>= |
Больше или равно |
Более сложные предикаты могут быть построены с помощью логических операций AND, OR или NOT, а также с помощью скобок, используемых для определения порядка вычисления выражения (если это необходимо или желательно). Вычисление выражений в условиях выполняется по следующим правилам.
Выражение вычисляется слева направо.
Первыми вычисляются подвыражения в скобках.
Операции NOT выполняются перед операциями AND и OR.
Операции AND выполняются перед операциями OR.
Для устранения любой возможной неоднозначности рекомендуется использовать круглые скобки.
Пример 7.1.6. Сложные условия поиска
Перечислите всех преподавателей, которые являются профессорами или ассистентами.
SELECT *
FROM ПРЕПОДАВАТЕЛЬ
WHERE ЗВ =’профессор’ OR ЗВ=’ассистент’;
В этом примере для выборки сведений об ученых званиях преподавателей, в конструкции WHERE используется логический оператор OR. Результаты выполнения запроса представлены в табл. 7.1.8.
Таблица 7.1.8. Результат выполнения запроса из примера 7.1.6
Таб.номер |
ФИО препод. |
Уч.степень |
Уч. звание |
Код кафедры |
101 |
Андреев А.П. |
д-р техн. наук |
профессор |
01 |
201 |
Блюмкина И.П. |
д-р ф-мат. наук |
профессор |
02 |
202 |
Львова П.Р. |
|
ассистент |
02 |
203 |
Шапошников С.И. |
д-р техн. наук |
профессор |
02 |
204 |
Новиков П.Н. |
|
ассистент |
02 |
405 |
Кудряшова Г.М. |
|
ассистент |
04 |
503 |
Ермолин Е.Н. |
|
ассистент |
05 |
801 |
Якорнов Е.А. |
д-р техн. наук |
профессор |
08 |
604 |
Соловьев С.И. |
|
ассистент |
06 |
Пример 7.1.7. Использование диапазонов (BETWEEN/NOT BETWEEN) в условиях поиска
Перечислите всех студентов с проходным баллом от 4,5 до 4,75
SELECT НГ, НС, ФИО, ПБАЛЛ
FROM СТУДЕНТ
WHERE ПБАЛЛ BETWEEN 4,5 AND 4,75;
Наличие ключевого слова BETWEEN требует задания границ диапазона значений. В данном случае результаты проверки будут положительными для всех студентов с проходным баллом от 4,5 до 4,75 включительно. Результаты выполнения запроса представлены в табл. 7.1.9.
Таблица 7.1.9. Результаты выполнений запроса из примера 7.1.7
Группа |
№ студента |
ФИО |
Проходной балл |
101 |
01 |
Аристов Р.П. |
4,5 |
101 |
02 |
Бондаренко С.А. |
4,5 |
101 |
04 |
Макова Н.В. |
4,75 |
102 |
01 |
Боярская Н.П. |
4,5 |
102 |
03 |
Сидоров И.Р. |
4,5 |
103 |
02 |
Петров О.К. |
4,75 |
104 |
01 |
Иванов К.К. |
4,5 |
104 |
07 |
Григорьева Е.А. |
4,75 |
105 |
01 |
Серов И.Г. |
4,5 |
105 |
12 |
Антоненко К. П. |
4,5 |
ТМ-31 |
07 |
Глушко И.В. |
4,5 |
ТМ-31 |
19 |
Самойленко Ю.А. |
4,75 |
ТМ-31 |
20 |
Святненко Ю.В. |
4,75 |
ТМ-31 |
23 |
Терпило Д.А. |
4,75 |
Существует также версия проверки диапазона значений, которая имеет противоположный смысл (NOT BETWEEN), В этом случае требуется, чтобы проверяемое значение лежало вне границ заданного диапазона. Наличие ключевого слова BETWEEN и соответствующей проверки лишь незначительно повышает выразительную мощность языка SQL, поскольку те же результаты могут быть достигнуты с помощью выполнения двух обычных проверок. Приведенный выше запрос можно представить следующим образом:
SELECT НГ, НС, ФИО, ПБАЛЛ
FROM СТУДЕНТ
WHERE ПБАЛЛ BETWEEN >=4,5 AND <=4,75
Однако многие полагают, что проверка принадлежности к диапазону с помощью ключевого слова BETWEEN является более простым способом записи условий выборки, чем обычные проверки.
Пример 7.1.8. Условия поиска с проверкой принадлежности к множеству (IN/NOT IN)
Составьте список всех преподавателей, которые являются профессорами или ассистентами.
SELECT ТАБН, ФИО, СТ, ЗВ, ККАФ
FROM ПРЕПОДАВАТЕЛЬ
WHERE ЗВ IN ('профессор', 'ассистент');
Проверка принадлежности к множеству обеспечивается с помощью ключевого слова IN. При этом проверяется, соответствует ли результат вычисления выражения одному из значений в предоставленном списке – в нашем случае это строки 'профессор' и 'ассистент'. Результаты выполнения запроса представлены в табл. 7.1.10.
Таблица 7.1.10. Результат выполнения запроса из примера 7.1.8
Таб. номер |
ФИО препод. |
Уч. степень |
Уч. звание |
Код кафедры |
101 |
Андреев А.П. |
д-р техн. наук |
профессор |
01 |
201 |
Блюмкина И.П. |
д-р ф-мат. наук |
профессор |
02 |
202 |
Львова П.Р. |
|
ассистент |
02 |
203 |
Шапошников С.И. |
д-р техн. наук |
профессор |
02 |
204 |
Новиков П.Н. |
|
ассистент |
02 |
405 |
Кудряшова Г.М. |
|
ассистент |
04 |
503 |
Ермолин Е.Н. |
|
ассистент |
05 |
801 |
Якорнов Е.А. |
д-р техн. наук |
профессор |
08 |
604 |
Соловьев С.И. |
|
ассистент |
06 |
Существует также версия такой проверки, имеющая противоположный смысл (NOT IN), которая используется для отбора любых значений, кроме тех, которые указаны в представленном списке. Как и оператор BETWEEN, оператор IN незначительно повышает выразительную мощность языка SQL – тот же самый запрос может быть представлен следующим образом:
SELECT ТАБН, ФИО, СТ, ЗВ, ККАФ
FROM ПРЕПОДАВАТЕЛЬ
WHERE ЗВ ='профессор' OR ЗВ= 'ассистент');
Однако использование оператора IN представляет собой более эффективный способ записи условий поиска, особенно если набор допустимых значений достаточно велик.
Пример 7.1.9. Условия поиска с указанием шаблонов (LIKE/NOT LIKE)
Найдите всех зав. кафедрой, в фамилиях которых содержится строка ‘Ж’
При выполнении данного запроса необходимо организовать поиск строки ‘Ж’, которая может находиться в любом месте значений столбца ФИО_зав.кафедрой таблицы КАФЕДРА.
SELECT ККАФ, НКАФ, ТЕЛ, ЗАВ
FROM КАФЕДРА
WHERE ЗАВ LIKE ' %Ж%' ;
Результаты выполнения этого запроса представлены в табл. 7.1.11.
Таблица 7.1.11. Результат выполнения запроса из примера 7.1.9
-
Код
Название
ТЕЛ
ФИО зав. каф.
04
ИНОСТРАННОГО ЯЗ
310-47-17
Жданова А.Е.
В языке SQL существуют два специальных символа шаблона, используемых при проверке символьных значений.
%. Символ процента представляет любую последовательность из нуля или более символов (поэтому часто именуется также подстановочным символом).
_. Символ подчеркивания представляет любой отдельный символ.
Все остальные символы в шаблоне представляют сами себя.
ЗАВ LIKE 'Ж%'. Этот шаблон означает, что первый символ значения обязательно должен быть символом Н, а все остальные символы не представляют интереса и не проверяются.
ЗАВ LIKE 'Ж___ '. Этот шаблон означает, что значение должно иметь длину, равную строго четырем символам, причем первым символом обязательно должен быть символ ' Ж '.
ЗАВ LIKE ' %а'. Этот шаблон определяет любую последовательность символов длиной не менее одного символа, причем последним символом обязательно должен быть символ а.
ЗАВ LIKE 'Ж'. Этот шаблон означает, что нас интересует любая последовательность символов, включающая подстроку 'Ж’;
ЗАВ NOT LIKE ' К%'. Этот шаблон указывает, что требуются любые строки, которые не начинаются с символа К.
Если требуемая строка должна включать также служебный символ, обычно применяемый в качестве символа подстановки, то следует определить с помощью конструкции ESCAPE "маскирующий" символ, который указывает, что следующий за ним символ больше не имеет специального значения, и поместить его перед символом подстановки. Например, для проверки значений на соответствие литеральной строке ‘15%' можно воспользоваться таким предикатом:
LIKE '15#%' ESCAPE '#'
Пример 7.1.10. Использование значения NULL в условиях поиска (IS NULL/IS NOT NULL)
Составьте список всех преподавателей c кодом кафедры 02, для которых нет данных об их ученой степени.
Просматривая таблицу ПРЕПОДАВАТЕЛЬ, можно прийти к заключению, что данные записи можно выбрать с помощью следующих условий поиска:
(ККАФ =’02’ AND СТ = ‘ ‘ )
Однако это решение ошибочно. Отсутствующий комментарий (значение NULL) рассматривается как неопределенное значение, поэтому нельзя определить его равенство или неравенство с другой строкой. Если попробовать выполнить запрос с приведенным выше условий поиска, то результирующая таблица окажется пустой. Правильное решение состоит в явной проверке на наличие пустого значения, для чего используется специальное ключевое слово IS NULL:
SELECT ФИО, ТАБН
FROM ПРЕПОДАВАТЕЛЬ
WHERE ККАФ =’02’ AND СТ = IS NULL;
Результаты выполнения запроса представлены в табл. 7.1.12.
Таблица 7.1.12. Результат выполнения запроса из примера 7.1.10
Таб. номер |
ФИО препод. |
202 |
Львова П.Р. |
204 |
Новиков П.Н. |
Для проверки присутствия в столбце значений, отличных от NULL, может использоваться версия данного условия поиска, которая имеет противоположный СМЫСЛ (IS NOT NULL).