- •Введение в базы данных
- •Отношения между прикладными программами и субд
- •Системы обработки баз данных
- •История баз данных
- •Организационный контекст
- •Реляционная модель
- •Коммерческие субд для микрокомпьютеров
- •Клиент-серверные приложения баз данных
- •Базы данных с использованием Интернет-технологий
- •Распределенные базы данных
- •Объектно-ориентированные субд
- •Банк данных
- •Основные понятия и определения
- •Пользователи банков данных
- •База данных
- •Архитектура базы данных. Физическая и логическая независимость
- •Схемы и отображения
- •Независимость от данных
- •Система управления базами данных – субд
- •Процесс прохождения пользовательского запроса
- •Введение в разработку баз данных
- •Метаданные
- •Индексы
- •Метаданные приложений
- •Подсистема средств проектирования
- •Подсистема обработки
- •Ядро субд
- •Создание базы данных
- •Процесс разработки базы данных
- •Моделирование данных
- •Функции субд
- •Модели данных
- •Объектные или инфологические модели данных
- •Модели данных на основе записей или даталогические
- •Реляционная модель данных
- •Преподаватели
- •Сетевая модель данных
- •. Физические модели данных
- •Концептуальное моделирование
- •Реляционная модель
- •Структура реляционных данных
- •Кортежи
- •Внешний ключ
- •Альтернативная терминология
- •Математические отношения
- •Отношения в базе данных
- •Реляционные ключи
- •Реляционная целостность
- •Целостность сущностей
- •Ссылочная целостность
- •Реляционные языки
- •Реляционная алгебра
- •Учебный проект DreamHome
- •Реляционная алгебра (продолжение)
- •Выборка (или ограничение)
- •Проекция
- •Декартово произведение
- •Объединение
- •Разность
- •Операции соединения
- •Tema-соединение (θ-join)
- •Естественное соединение
- •Внешнее соединение
- •Полусоединение
- •Пересечение
- •Деление
- •Другие языки
- •Примеры применения реляционной алгебры
- •Обзор жизненного цикла информационных систем
- •Жизненный цикл приложения баз данных
- •Проектирование базы данных
- •Проектирование баз данных на основе восходящего подхода (Метод нормализации или декомпозиции)
- •Цель нормализации
- •Проблемы, вызываемые использованием единственного отношения (аномалии обновления)
- •Проблема вставки
- •Проблема обновления
- •Проблемы удаления
- •Функциональные зависимости
- •Процесс нормализации
- •Декомпозиция без потерь и функциональные зависимости
- •Первая нормальная форма (1 нф) (из Коннолли)
- •Вторая нормальная форма (2нф)
- •Третья нормальная форма (знф)
- •Нормальная форма Бойса-Кодда (нфбк)
- •4 И 5 нормальные формы (4нф и 5нф)
- •Пример нормализации
- •. Другая декомпозиция отношения консультант
- •Некоторые комментарии к декомпозиционному алгоритму проектирования
- •Некоторые модификации алгоритма проектирования Избыточные функциональные зависимости
- •Транзитивные зависимости
- •Добавление атрибутов в фз
- •Правила вывода
- •Алгоритм проектирования бд методом декомпозиции (восходящий метод)
- •Проверка отношений на завершающей фазе их проектирования
- •Задачи к текущему материалу
- •Пример аномалий для 2нф
- •Нормальная форма Бойса—Кодда (нфбк) с примером аномалий для 3 формы
- •Язык sql
- •Запрос одиночной таблицы
- •Проектирование в sql
- •Выборка в sql
- •Сортировка
- •Встроенные функции sql
- •Встроенные функции и группировка
- •Запрос нескольких таблиц
- •Вложенные запросы
- •Соединение с помощью sql
- •Сравнение вложенного запроса и соединения
- •Внешнее соединение
- •Операторы exists и not exists
- •Изменение данных
- •Insert into запись
- •Insert into запись
- •Insert into третьекурсник
- •Удаление данных
- •Модификация данных
- •Запрос на sql с exist и not exist (реализация реляционной операции Деления)
- •Операция внешнего соединения таблиц в access (Мои замечания)
- •Псевдонимы столбцов и таблиц
- •Уточнения запроса
- •Теоретико-множественные операции
- •Декартово произведение наборов записей
- •Объединение наборов записей (union)
- •Пересечение наборов записей (intersect)
- •Intersect corresponding (id_компонента, Тип_компонента)
- •Вычитание наборов записей (except)
- •Операции соединения
- •Естественное соединение (natural join)
- •Условное соединение (join... On)
- •Соединение по именам столбцов (join... Using)
- •Внешние соединения
- •Левое соединение {left outer join)
- •Правое соединение {right outer join)
- •Внешнее соединение Преподаватель-Изучение-Предмет. Создание в access. Пример
- •Операторы exists и not exists
- •Низходящее проектирование бд на основе er-модели Модель «сущность—связь» и ее варианты
- •Реализация низходящего проектирования бд на основе er-модели
- •Типы сущностей
- •Способы представления сущностей на диаграмме
- •Атрибуты
- •Типы связей
- •Представление связей на диаграммах
- •Атрибуты связей
- •. Структурные ограничения
- •Показатель кардинальности
- •Степень участия
- •Примеры er-проектирования
- •Модель «сущность—связь» в другом рассмотрении
- •Элементы модели «сущность—связь»
- •Сущности
- •Атрибуты
- •Идентификаторы
- •Три типа бинарных связей
- •Диаграммы «сущность—связь»
- •Изображение атрибутов в диаграммах «сущность—связь»
- •Слабые сущности
- •Представление многозначных атрибутов при помощи слабых сущностей
- •Подтипы сущностей
- •Пример er-диаграммы
- •Документирование делового регламента
- •Модель «сущность—связь» и case-средства
- •Диаграммы «сущность—связь» в стиле uml
- •Сущности и связи в uml
- •Представление слабых сущностей
- •Представление подтипов
- •Конструкции ооп, введенные языком uml
- •Роль uml в базах данных на сегодняшний день
- •Примеры
- •Вопросы группы I
- •Вопросы группы II
- •Литература по курсу «базы и банки данных»
Внешнее соединение
Стандарт ANSI SQL не поддерживает операцию внешнего соединения. Однако эта операция поддерживается многими СУБД. Здесь мы продемонстрируем использование одной из них.
Предположим, нам нужен список студентов и названия предметов, на которые они записаны. Допустим, кроме того, что мы хотим получить сведения обо всех студентах, включая даже тех, кто не записан ни на один из предметов. В Microsoft Access этот результат можно получить с помощью следующего выражения:
SELECT Имя, НазваниеПредмета
FROM СТУДЕНТ LEFT JOIN ЗАПИСЬ
ON ЛичныйНомер = НомерСтудента;
Результатом будет:
ДЖОНС
|
BD445
|
ПАРКС
|
ВА200
|
БЕЙКЕР
|
BD445
|
БЕЙКЕР
|
CS250
|
ГЛАСС
|
Null
|
БЕЙКЕР
|
CS150
|
РАССЕЛ
|
Null
|
РАЙ
|
ВА200
|
РАЙ
|
BF410
|
РАЙ
|
CS250
|
ДЖОНС
|
ВА200
|
Обратите внимание на различия между Access SQL и записью, принятой в стандарте ANSI. Условия соединения задаются с помощью ключевого слова ON. Кроме того, все выражения SQL заканчиваются точкой с запятой.
Операторы exists и not exists
(Смотри также далее !!!!)
EXISTS и NOT EXISTS («существует» и «не существует») — логические операторы, принимающие значение «истина» или «ложь», в зависимости от наличия или отсутствия строк, удовлетворяющих заданным условиям. Пусть, например, мы хотим узнать номера студентов, записанных более чем на один предмет:
SELECT DISTINCT НомерСтудента
FROM ЗАПИСЬ А
WHERE EXISTS
(SELECT*
FROM ЗАПИСЬ В
WHERE А.НомерСтудента = В.НомерСтудента
AND А.НазваниеПредмета NOT = В.НазваниеПредмета)
В этом примере как основной, так и вложенный запросы относятся к таблице ЗАПИСЬ. Во избежание неоднозначности этим двум вариантам использования таблицы ЗАПИСЬ присвоены различные имена. В первом операторе FROM таблице ЗАПИСЬ присвоено временное произвольное имя А, а во втором операторе FROM — другое временное произвольное имя В.
Выражение во вложенном запросе означает следующее: следует найти две строки в таблице ЗАПИСЬ, имеющие один и тот же номер студента, но различные названия предметов. (Это означает, что студент записан более чем на один предмет.) Если такие две строки существуют, то оператор EXISTS будет иметь логическое значение «истина»; в этом случае номер данного студента будет присутствовать в ответе. В противном случае оператор EXISTS будет иметь логическое значение «ложь», и номер данного студента в результате фигурировать не будет.
Можно рассматривать этот запрос и по-другому: представим себе две отдельные и идентичные копии таблицы ЗАПИСЬ. Назовем одну из копий А, а другую В. Будем сравнивать каждую строку А с каждой строкой В. Сначала рассмотрим первую строку А и первую строку В. Поскольку эти две строки идентичны, то и номер студента, и название предмета в них совпадают, поэтому атрибут Номер-Студента из данной строки не попадет в ответ.
Теперь рассмотрим первую строку А и вторую строку В. Если номер студента один и тот же, а названия предметов различаются, данный номер студента будет отображен в результатах. В сущности, мы сравниваем первую строку таблицы ЗАПИСЬ со второй строкой этой же таблицы. В данных, представленных на рис. 9.2, ни номер студента, ни название предмета не совпадают.
Далее мы продолжаем сравнивать первую строку А с каждой строкой В, Если выполняются заданные нами условия, мы выводим номер студента. Когда будут пройдены все строки таблицы В, мы перейдем ко второй строке таблицы А и будем сравнивать ее с каждой строкой таблицы В (на самом деле, когда мы рассматриваем п-ю строку таблицы А, то в таблице В необходимо рассмотреть только строки, номера которых больше п).
Результатом этого запроса будет:
Чтобы продемонстрировать использование ключевого слова NOT EXISTS , предположим, что мы хотим узнать имена студентов, которые записаны на все предметы (Операция ДЕЛЕНИЯ рел. Алгебры). По-другому это можно выразить так: нам нужны имена таких студентов, для которых не существует предметов, на которые они не были бы записаны. Это делается с помощью следующего запроса:
SELECT СТУДЕНТ.Имя
FROM СТУДЕНТ
WHERE NOT EXISTS
(SELECT*
FROM ЗАНЯТИЯ
WHERE NOT EXISTS
(SELECT*
FROM ЗАПИСЬ
WHERE ЗАНЯТИЯ.НазваниеПредмета = ЗАПИСЬ.НазваниеПредмета
AND ЗАПИСЬ.НомерСтудента = СТУДЕНТ.ЛичныйНомер))
Этот запрос состоит из трех частей. В нижней части ведется поиск предметов, на которые записан студент. Средняя часть определяет, есть ли такие предметы, на которые студент не записан. Если нет, то студент записан на все предметы, и его имя отображается в результатах.
Этот запрос может оказаться сложным для понимания. Если у вас есть проблемы с этим, используйте данные, представленные на рис. 9.2, и следуйте инструкциям. Для этих данных ответ состоит в том, что нет ни одного студента, который был бы записан на все предметы. Вы можете попытаться изменить данные таким образом, чтобы какой-либо студент был записан на все предметы. Еще один способ уяснить себе суть этого запроса — попробовать представить его в другом виде, без применения ключевого слова NOT EXISTS. Проблемы, с которыми вы при этом столкнетесь, помогут вам понять, почему оператор NOT EXISTS необходим.
