Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
чудинов_бд.docx
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
584.18 Кб
Скачать

Делитель

корпус

аудитория

19

507

КЦ

313

В результате деления получаем необходимое расписание групп по запрашиваемому условию, SQL-запрос содержит вложенные подзапро­сы и выглядит следующим образом:

SELECT *

FROM расписание р WHERE NOT EXISTS

(SELECT * FROM делитель д WHERE NOT EXISTS

(SELECT * FROM расписание p2 WHERE р2.номер_группы = р.номер_группы

AND p2. тип_недели = р.тип_недели AND р2.день_недели =

р.день_недели

AND р2.номер_занятия = р.номер_занятия

AND р2.корпус = д.корпус AND р2.аудитория = д.аудитория));

Для операций объединение, пересечения и разность в SQL сущест­вуют собственные операторы UNION, INTERSECT, MINUS соответст­венно. Так как эти операции выполняются над 2-мя таблицами, они (по­следние) должны иметь одинаковый состав атрибутов, определенных на одинаковых доменах. Рассмотрим использование этих операторов SQL на примерах.

Например, для операции объединения имеем следующие таблицы о преподавателях и о сотрудниках вуза (рис. 3.44):

Преподаватель

ид преподавателя

ФИО

дата рождения

пол

адрес

СОТРУДНИК

ид сотрудника

ФИО

дата рождения

пол

адрес

Рис. 3.44. Отношения для объединения

В результате объединения этих таблиц, получим таблицу, содер­жащую сведения о преподавателях и сотрудниках:

SELECT *

FROM преподаватель UNION SELECT * FROM сотрудник;

Например, для операции пересечения имеем следующие таблицы о студентах и о жильцах, проживающих в общежитии:

Студент

ФИО студента

Серия и номер паспорта

Пол

Дата рождения

ЖИЛЕЦ

ФИО жильца

Серия и номер паспорта

Пол

Дата рождения

Рис. 3.45. Отношения для пересечения

В результате пересечения этих таблиц, получим таблицу, содержа­щую сведения о студентах, проживающих в общежитии:

SELECT * FROM студент INTERSECT SELECT * FROM жилец;

Для операции разность в зависимости от порядка использования таблиц меняется результат выборки. Для примеров используем те же самые таблицы, что и для операции пересечение.

В результате вычитания таблицы студент из таблицы жилец, полу­чаем жильцов, не являющихся студентами:

SELECT * FROM жилец MINUS SELECT * FROM студент;

В результате вычитания таблицы жилец из таблицы студент, полу­чаем студентов, не проживающих в общежитии:

SELECT * FROM студент MINUS SELECT * FROM жилец;

Далее рассмотрим пример создания структуры таблиц с помощью DDL-операции (CREATE) SQL. Например, имеем следующую структу­ру, представленную на рис. 3.46.

Ограничения в структуре таблицы, которым должна удовлетворять каждая запись таблицы, могут быть представлены как на уровне опре­деленного столбца, так и на уровне всей таблицы: уникальность, огра­ничения целостности или условия для значений столбцов).

Для представленной выше структуры обозначим некоторые огра­ничения. В таблице студент ограничения будут следующими: —1 номер зачетки уникален у каждого студента;

—1 рассматриваем студентов, зачислившихся не моложе 14 лет и позд­нее 1950 г.;

—1 значения для пола студентов и типа финансирования вставляются из соответствующих таблиц-классификаторов;

—1 проживание в общежитии хранится как факт (да или нет), так как булевского типа в СУБД Oracle нет, поэтому этот факт хранится в виде 1 (да) или (нет).