
- •Введение. Структура предмета. Основные понятия
- •1.История развития баз данных
- •2. История развития субд
- •4.Основные понятия и определения
- •Контрольные вопросы
- •Раздел 1. Структура и технологии субд. Модели данных
- •Тема1.1 Архитектура и технико-экономические характеристики субд. Архитектура бд.
- •1. Основные функции субд
- •2. Обобщенная архитектура субд
- •3. Процесс прохождения пользовательского запроса
- •4. Архитектура бд
- •Контрольные вопросы
- •Тема 1.2 Модели данных. Основные понятия и классификация
- •1. Классификация моделей данных
- •3 Пример разработки простой er-модели
- •Контрольные вопросы
- •Тема 1.3 Иерархическая, сетевая и реляционная модели данных
- •1. Иерархическая модель данных
- •2. Сетевая модель данных
- •3. Реляционная модель данных
- •Базовые понятия реляционных баз данных
- •Контрольные вопросы
- •Тема 1.4 Физические модели данных
- •1. Файловые структуры, используемые для хранения информации в базах данных
- •2. Индексные файлы
- •3. Моделирование отношения 1:м с использованием однонаправленных указателей
- •Контрольные вопросы
- •Тема 1.5 Целостность бд. Нормальные формы
- •1. Основные понятия
- •Null-значения
- •Трехзначная логика (3vl)
- •Потенциальные ключи
- •2.Целостность сущностей
- •2 . Основные нормальные формы
- •Аномалии обновления
- •Определение функциональной зависимости
- •3Нф (Третья Нормальная Форма)
- •Алгоритм нормализации (приведение к 3нф)
- •Контрольные вопросы
- •Тема 1.6 Операции и основные понятия реляционной алгебры и реляционного исчисления
- •1. Реляционная алгебра
- •Замкнутость реляционной алгебры
- •Отношения, совместимые по типу
- •2. Теоретико-множественные операторы
- •3. Специальные реляционные операторы
- •Соединение
- •Общая операция соединения
- •Тэта-соединение
- •Экви-соединение
- •Естественное соединение. Определение 10. Пусть даны отношения и , имеющие одинаковые атрибуты (т.Е. Атрибуты с одинаковыми именами и определенные на одинаковых доменах).
- •Контрольные вопросы
- •Тема 1.7 Проектирование реляционной базы данных
- •1. Методология проектирования базы данных
- •2. Этапы проектирования базы данных
- •Контрольные вопросы
- •Раздел 2. Язык sql и его возможности
- •Тема 2.1 История языка sql. Создание и редактирование схемы бд
- •1. Развитие языка sql
- •Что такое пользователь?
- •Числовые константы
- •2 Создание базы данных и структуры таблицы
- •3. Модификация структуры таблицы и удаление таблицы
- •4. Индексы
- •5. Добавление новых данных
- •Однострочный оператор insert
- •Многострочный оператор insert
- •Утилиты пакетной загрузки
- •6. Удаление существующих данных
- •Оператор delete с вложенным запросом
- •7. Обновление существующих данных
- •Обновление всех строк
- •Контрольные вопросы
- •Тема 2.2 Организация запросов к базе данных.
- •1. Формирование запросов к одной таблице
- •2. Статистические функции
- •3. Группировка и агрегатные функции в запросах
- •4. Объединение таблиц
- •Объединения таблиц по равенству значений в столбцах и другие виды объединений
- •5. Объединение таблицы с собой
- •6. Теоретико-множественные операции с таблицами
- •7. Выполнение сложных запросов с вложенными подзапросами
- •Использование выражений в подзапросах
- •Контрольные вопросы
- •Тема 2.3 Виртуальные таблицы Цель: рассмотреть понятие «виртуальная таблица»; назначение виртуальных таблиц и область их использования
- •1. Команда create view
- •2. Групповые представления
- •3. Представления и объединения
- •4. Представления и подзапросы
- •5. Удаление и модификация представлений
- •Контрольные вопросы
- •1.Определение триггера и его назначение
- •2. Типы триггеров
- •Создание триггеров dml
- •Создание триггеров замещения
- •Создание системных триггеров
- •Другие аспекты использования триггеров
- •3. Хранимые процедуры
- •Хранимые функции
- •Контрольные вопросы
- •Тема 2.5 Защита информации в бд
- •1. Общие понятия привилегий
- •Стандартные привилегии
- •2. Предоставление привилегий с использованием представлений
- •3. Другие типы привилегий
- •Контрольные вопросы
- •Тема 2.6 Транзакции и управлении ими
- •1. Что такое транзакция
- •2 . Операторы commit и rollback
- •3. Журнал транзакций
- •5. Транзакции и работа в многопользовательском режиме
- •Проблема пропавшего обновления
- •Проблема промежуточных данных
- •Проблема несогласованных данных
- •Проблема строк-призраков
- •6. Параллельные транзакции
- •Уровни блокировки
- •Жесткая и нежесткая блокировки
- •Тупиковые ситуации
- •Усовершенствованные методы блокировки
- •Контрольные вопросы
- •Тема 2.7 Распределенные базы данных. Модели серверов
- •1.Распределенная обработка данных
- •2. Модели «клиент—сервер» в технологии баз данных
- •Двухуровневые модели
- •Модель сервера приложений
- •3. Модели серверов баз данных
4. Объединение таблиц
Одна из наиболее важных особенностей запросов SQL — это их способность определять связи между различными таблицами и выводить информацию из них в терминах этих связей, всю внутри одной команды.
Этот вид операции называется — объединением, которое является одним из видов реляционных операций в реляционных базах данных. Главное в реляционном подходе это связи, которые можно создавать между позициями данных в таблицах. Используя объединения, мы непосредственно связываем информацию с любым номером таблицы, и таким образом способны создавать связи между сравнимыми фрагментами данных.
Объединение (JOIN) является одной с сильнейших операций реляционной алгебры, которая используется наиболее часто и является противоположностью другой операции – проецирования (PROJECT). При помощи операции JOIN устанавливаются связи между отношениями.
В разделе FROM оператора SELECT можно использовать соединенные таблицы. Пусть в результате некоторых операций мы получаем таблицы A и B. Такими операциями могут быть, например, оператор SELECT или другая соединенная таблица. Тогда синтаксис соединенной таблицы имеет следующий вид:
Перекрестное соединение ::= Таблица А CROSS JOIN Таблица В
Естественное соединение ::= Таблица А [NATURAL] [Тип соединения] JOIN Таблица В
Соединение посредством предиката ::= Таблица А [Тип соединения] JOIN Таблица В ON Предикат
Соединение посредством имен столбцов ::= Таблица А [Тип соединения] JOIN Таблица В USING (Имя столбца.,..)
Соединение объединения ::= Таблица А UNION JOIN Таблица В
Опишем используемые термины.
CROSS JOIN - Перекрестное соединение возвращает просто декартово произведение таблиц. Такое соединение в разделе FROM может быть заменено списком таблиц через запятую.
NATURAL JOIN - Естественное соединение производится по всем столбцам таблиц А и В, имеющим одинаковые имена. В результирующую таблицу одинаковые столбцы вставляются только один раз.
JOIN … ON - Соединение посредством предиката соединяет строки таблиц А и В посредством указанного предиката.
JOIN … USING - Соединение посредством имен столбцов соединяет отношения подобно естественному соединению по тем общим столбцам таблиц А и Б, которые указаны в списке USING.
OUTER - Ключевое слово OUTER (внешний) не является обязательными, оно не используется ни в каких операциях с данными.
INNER - Тип соединения "внутреннее". Внутренний тип соединения используется по умолчанию, когда тип явно не задан. В таблицах А и В соединяются только те строки, для которых найдено совпадение.
LEFT (OUTER) - Тип соединения "левое (внешнее)". Левое соединение таблиц А и В включает в себя все строки из левой таблицы А и те строки из правой таблицы В, для которых обнаружено совпадение. Для строк из таблицы А, для которых не найдено соответствия в таблице В, в столбцы, извлекаемые из таблицы В, заносятся значения NULL.
RIGHT (OUTER) - Тип соединения "правое (внешнее)". Правое соединение таблиц А и В включает в себя все строки из правой таблицы В и те строки из левой таблицы А, для которых обнаружено совпадение. Для строк из таблицы В, для которых не найдено соответствия в таблице А, в столбцы, извлекаемые из таблицы А заносятся значения NULL.
FULL (OUTER) - Тип соединения "полное (внешнее)". Это комбинация левого и правого соединений. В полное соединение включаются все строки из обеих таблиц. Для совпадающих строк поля заполняются реальными значениями, для несовпадающих строк поля заполняются в соответствии с правилами левого и правого соединений.
UNION JOIN - Соединение объединения является обратным по отношению к внутреннему соединению. Оно включает только те строки из таблиц А и В, для которых не найдено совпадений. В них используются значения NULL для столбцов, полученных из другой таблицы. Если взять полное внешнее соединение и удалить из него строки, полученные в результате внутреннего соединения, то получится соединение объединения.
Использование соединенных таблиц часто облегчает восприятие оператора SELECT, особенно, когда используется естественное соединение. Если не использовать соединенные таблицы, то при выборе данных из нескольких таблиц необходимо явно указывать условия соединения в разделе WHERE. Если при этом пользователь указывает сложные критерии отбора строк, то в разделе WHERE смешиваются семантически различные понятия - как условия связи таблиц, так и условия отбора строк.
Формат команды выборки данных с нескольких таблиц имеет вид:
SELECT <имя таблицы.имя столбца>,…,<имя таблицы.имя столбца> FROM <перечень имен таблиц> [WHERE <предикат>].
После слова SELECT через запятую указывают список имен столбцов с указанием префиксов – имен таблиц. Имена самих таблиц перечисляются через запятую после слова FROM. Если таблицы, которые принимают участие в запросе, имеют разные имена столбцов, то префикс – имя таблицы – перед именем столбца можно не указывать. Префикс обычно указывают для удобства чтения команды.
Команда выполняется в следующей последовательности: сначала обрабатывается фраза FROM, при этом выполняется декартовое произведение таблиц, что принимают участие в запросе. В результате образовывается таблица больших размеров с количеством столбцов равных сумме столбцов начальных таблиц, за исключением общих для них столбцов; количество строк равняется произведению количества строк таблиц, которые соединяются. Потом выполняется условие отбора, оглашенное после слова WHERE. Строки, что не отвечают условию отбора, исключаются из рассмотрения – выполняется операция реляционной алгебры – селекция. К строкам, что остались, применяется операция реляционной алгебры – проецирование.
Если при выполнении выборки не используется ключевое слово WHERE, то результатом команды является проекция декартового произведения таблиц указанных столбцов.
Например, для получения декартового произведения таблиц SUPPL и GOOD необходимо выполнить следующую команду: SELECT * FROM SUPPL, GOOD
В результате будут выбраны все строки, которые отвечают всем поставщикам и всем товарам. Общее количество выбранных запросов будет равняться общему количеству поставщиков, умноженных на общее количество товаров, как будто все поставщики поставляют все товары.
Объединения, которые используют предикаты, основанные на равенстве, называют эквиобъединениями, а точнее – натуральными объединениями (Natural Join).
Следующий пример иллюстрирует выполнение команды натурального объединения.
Выбор данных о фирме-поставщике и наименование товаров, совпадающих с наименованием фирм-поставщиков, выполнится командой:
SELECT SUPPL.S_ID, SUPPL.S_NAME, SUPPL.S_CITY,
SUPPL.S_RATING, SUPPL.S_TEL, GOOD.G_NAME FROM SUPPL, GOOD
WHERE SUPPL.S_NAME=GOOD.G_NAME.
С целью обеспечения целостности ссылок БД при выполнении запроса операция натурального соединения выполняется с указанием равности ключей: первичного для таблицы, которая порождает, и внешнего – для порожденной таблицы.
Следующий пример иллюстрирует результат натурального соединения двух таблиц SUPPL и ORDERS. Необходимо выбрать всех поставщиков и заказы, где они фигурируют:
SELECT * FROM SUPPL, ORDERS WHERE SUPPL.S_ID=ORDERS.S_ID.
Следующий пример показывает объединение более чем две таблицы для вывода данных о всех поставщиках, которым заказан товар «апельсин»:
SELECT SUPPL.S_ID, SUPPL.S_NAME, ORDERS.S_ID, GOOD.G_ID, GOOD.G_NAME
FROM SUPPL, ORDERS, GOOD WHERE SUPPL.S_ID=ORDERS.S_ID AND
ORDERS.G_ID=GOOD.G_ID AND G_NAME=`апельсин`.