ВУЗ:
Составители:
Рубрика:
13
Решение. Решим проблему следующим образом.
СТУД1 := СТУДЕНТ; СТУД2 := СТУДЕНТ;
A := JOIN (СТУД1, СТУД2 : СТУД1.ID_Stud = СТУД2.Консультант) (экви-
соединение);
B := SELECT (A: СТУД2.Консультант = ’Андреева А.А.’) [СТУД1.СФам].
⇒ Внешнее Соединение – расширение естественного соединения,
включающее все картежи из соединяемых отношений.
Запрос. Присоединить информацию об успеваемости к информации о
студентах.
Решение. JOIN (СТУДЕНТ, УСПЕВАЕМОСТЬ).
Результат.
ID_Stud СФам САдрес Консультант ID_Subj Семестр Оценка
001 Иванов И.И. А1 004 К16 4
001 Иванов И.И. А1 004 К21 4
001 Иванов И.И. А1 004 К22 3
002 Иванов И.И. А2 004 К16 5
002 Иванов И.И. А2 004 К33 4
004 Андреева А.А. А4NullК16 5
004 Андреева А.А. А4NullК21 5
004 Андреева А.А. А4NullК33 5
004 Андреева А.А. А4NullК22 5
Поскольку студентка Петрова П.П. еще ничего не сдавала, то в рамках
естественного соединения данные о Петровой не войдут в результирующее
отношение. Многие считают, что тем самым теряется важная информация.
Проблема решается путем введения еще одного вида соединения –
внешнего OUTERJOIN (А, В). В этом случае к отношению-справочнику
СТУДЕНТ добавляется отношение связи УСПЕВАЕМОСТЬ.
Решение предыдущей задачи с помощью внешнего соединения.
OUTERJOIN (СТУДЕНТ, УСПЕВАЕМОСТЬ).
Результат.
ID_Stu
d
СФам САд-
рес
Консуль-
тант
ID_Su
bj
Се-
местр
Оценка
001 Иванов И.И. А1 004 К16 4
001 Иванов И.И. А1 004 К21 4
001 Иванов И.И. А1 004 К22 3
002 Иванов И.И. А2 004 К16 5
002 Иванов И.И. А2 004 К33 4
003 Петрова П.П. А3 002 Null Null Null
004 Андреева А.А. А4Null К16 5
004 Андреева А.А. А4Null К21 5
004 Андреева А.А. А4Null К33 5
14
ID_Stu
d
СФам САд-
рес
Консуль-
тант
ID_Su
bj
Се-
местр
Оценка
004 Андреева А.А. А4Null К22 5
Деление
Деление – операция РА, создающая новое отношение путем выбора
картежей одного отношения, соответствующих каждому картежу другого
отношения.
Запрос. Перечислить номера студентов, которые сдали все предметы
хотя бы за один семестр.
Решение. Интуитивно решение выглядит так. Сначала мы должны соз-
дать таблицу, состоящую из первичного ключа таблицы КУРС, так как имен-
но он фигурирует в таблице УСПЕВАЕМОСТЬ.
A := КУРС[ID_Subj].
Теперь создадим таблицу, содержащую информацию КТО КАКИЕ
КУРСЫ СДАВАЛ:
B := УСПЕВАЕМОСТЬ [ID_Stud, ID_Subj].
Теперь нам остается вычислить, КТО ИЗ СТУДЕНТОВ представлен в
В в сочетании с КАЖДЫМ КУРСОМ.
Это и делается с помощью операции деления:
С := B / A.
Результат.
АВ С
ID_Subj ID_Stud ID_Subj ID_Stud
К1 001 К1 004
К2 001 К2
К3 002 К1
002 К3
004 К1
004 К2
004 К3
Дадим общее описание операции следующим образом. Пусть А, В, С –
РО, и мы хотим разделить В на С и получить в результате А (A=B/C). Тогда
1. Столбцы С должны составлять подмножество столбцов В. Столбца-
ми А будут только те столбцы В, которые не являются столбцами С.
2. Строка помещается в таблицу А в том, и только том случае, если
она входит в В с КАЖДОЙ подстрокой С.
Пример
Приведем пример, который демонстрирует творческий подход в при-
менении операций РА.
Запрос. Определить максимальную оценку, полученную Ивано-
вым И.И.
Страницы
- « первая
- ‹ предыдущая
- …
- 5
- 6
- 7
- 8
- 9
- …
- следующая ›
- последняя »