17226

ТЕОРЕТИКО-МНОЖЕСТВЕННЫЕ ОПЕРАЦИИ РЕЛЯЦИОННОЙ АЛГЕБРЫ

Лекция

Информатика, кибернетика и программирование

Лекция №5 Теоретикомножественные операции реляционной алгебры Объединение Как было отмечено теоретикомножественные операции Определение. Объединением двух совместимых по типу отношений и называется отношение с той же схемой что и у отношений и сос

Русский

2013-06-30

126.5 KB

14 чел.

Лекция №5

Теоретико-множественные операции реляционной алгебры

Объединение

Как было отмечено, теоретико-множественные операции

Определение. Объединением двух совместимых по типу отношений  и  называется отношение с той же схемой, что и у отношений  и , состоящим из кортежей, принадлежащих обоим отношениям.

Синтаксис операции объединения:

или A  B

Замечание. Объединение, как и любое отношение, не может содержать одинаковых кортежей. Поэтому, если некоторый кортеж входит и в отношение , и отношение , то в объединение он входит один раз.

Пример. Пусть даны два отношения  и  с информацией о сотрудниках:

Таблица 1 Отношение A 

Табельный номер

Фамилия

Зарплата

1

Иванов

1000

2

Петров

2000

3

Сидоров

3000

Таблица 2 Отношение B 

Табельный номер

Фамилия

Зарплата

1

Иванов

1000

2

Пушников

2500

4

Сидоров

3000

Объединение отношений  и  будет иметь вид:

Таблица 3 Отношение A UNION B 

Табельный номер

Фамилия

Зарплата

1

Иванов

1000

2

Петров

2000

3

Сидоров

3000

2

Пушников

2500

4

Сидоров

3000

Синтаксическая конструкция на SQL таких запросов описывается следующим образом:

SELECT X,Y,…Z FROM A

UNION

SELECT X,Y,…Z FROM B

Для приведенного примера SQL – запрос соответствует структуре:

SELECT Табельный номер, Фамилия, Зарплата FROM A 

UNION

SELECT Табельный номер, Фамилия, Зарплата FROM B

Замечание. Как видно из приведенного примера, потенциальные ключи, которые были в отношениях  и  не наследуются объединением этих отношений. Поэтому, в объединении отношений  и  атрибут "Табельный номер" может содержать дубликаты значений. Если бы это было не так, и ключи наследовались бы, то это противоречило бы понятию объединения как "объединение множеств". Конечно, объединение отношений  и  имеет, как и любое отношение, потенциальный ключ, например, состоящий из всех атрибутов.

Пересечение

Определение. Пересечением двух совместимых по типу отношений  и  называется отношение с той же схемой, что и у отношений  и , и экземпляром, состоящим из кортежей, принадлежащих одновременно обоим отношениям  и .

Синтаксис операции пересечения:

A EXCEPT B или A B

Пример 3. Для тех же отношений  и , что и в предыдущем примере пересечение имеет вид:

Таблица 4 Отношение A EXCEPT B 

Табельный номер

Фамилия

Зарплата

1

Иванов

1000

Синтаксическая конструкция на SQL таких запросов описывается следующим образом:

SELECT X,Y,…Z FROM A

EXCEPT

SELECT X,Y,…Z FROM B

Для приведенного примера SQL – запрос соответствует структуре:

SELECT Табельный номер, Фамилия, Зарплата FROM A 

EXCEPT

SELECT Табельный номер, Фамилия, Зарплата FROM B

Устно. Казалось бы, что в отличие от операции объединения, потенциальные ключи могли бы наследоваться пересечением отношений. Однако это не так. Вообще, никакие реляционные операторы не передают результирующему отношению никаких данных о потенциальных ключах. Причина этого заключается в том, что потенциальный ключ - семантическое понятие, отражающее различимость объектов предметной области. Наличие потенциальных ключей не выводится из структуры отношения, а явно задается для каждого отношения, исходя из его смысла. Реляционные же операторы являются формальными операциями над отношениями и выполняются одинаково, независимо от смысла данных, содержащихся в отношениях. Поэтому, реляционные операторы ничего не могут "знать" о смысле данных.

Вычитание

Определение. Вычитанием двух совместимых по типу отношений  и  называется отношение с той же схемой, что и у отношений  и , и экземпляром, состоящим из кортежей, принадлежащих отношению  и не принадлежащих отношению .

Синтаксис операции вычитания:

A INTERSECT B или A B

Пример 4. Для тех же отношений  и , что и в предыдущем примере вычитание имеет вид:

Таблица 5 Отношение A INTERSECT B 

Табельный номер

Фамилия

Зарплата

2

Петров

2000

3

Сидоров

3000

Синтаксическая конструкция на SQL таких запросов описывается следующим образом:

SELECT X,Y,…Z FROM A

INTERSECT

SELECT X,Y,…Z FROM B

Для приведенного примера SQL – запрос соответствует структуре:

SELECT Табельный номер, Фамилия, Зарплата FROM A 

INTERSECT

SELECT Табельный номер, Фамилия, Зарплата FROM B

Декартово произведение

Определение. Декартовым произведением двух отношений  и  называется отношение, схема которого является объединением схем отношений  и :

,

а экземпляр включает кортежи, полученные сцеплением кортежей отношений  и :

,

таких, что , .

Синтаксис операции декартового произведения:

A  B

Замечание. Перемножать можно любые два отношения, совместимость по типу при этом не требуется.

Замечание. Мощность произведения A  B равна произведению мощностей отношений  и , т.к. каждый кортеж отношения  соединяется с каждым кортежем отношения .

Замечание. Если в отношения  и  имеются атрибуты с одинаковыми наименованиями, то перед выполнением операции декартового произведения такие атрибуты необходимо переименовать.

Пример. Пусть даны два отношения  и  с информацией о поставщиках и деталях:

Таблица 6 Отношение A (Поставщики) 

Номер поставщика

Наименование поставщика

1

Иванов

2

Петров

3

Сидоров

Таблица 7 Отношение B (Детали) 

Номер детали

Наименование детали

1

Болт

2

Гайка

3

Винт

Декартово произведение отношений  и  будет иметь вид:

Таблица 8 Отношение A  B 

Номер поставщика

Наименование поставщика

Номер детали

Наименование детали

1

Иванов

1

Болт

1

Иванов

2

Гайка

1

Иванов

3

Винт

2

Петров

1

Болт

2

Петров

2

Гайка

2

Петров

3

Винт

3

Сидоров

1

Болт

3

Сидоров

2

Гайка

3

Сидоров

3

Винт

Замечание. Сама по себе операция декартового произведения не очень важна, т.к. она не дает никакой новой информации, по сравнению с исходными отношениями. Для реальных запросов эта операция почти никогда не используется. Однако операция декартового произведения важна для выполнения специальных реляционных операций, в контексте некоторых запросов.

Замечание. По умолчанию операции UNION, INTERSECT и EXCEPT удаляют из результирующих отношений повторяющиеся строки. Но если требуется оставить все строки, в SQL используются специальные формы операций UNION ALL, INTERSECT ALL и EXCEPT ALL.

Примеры использования реляционных операций

(Примеры таблиц смотреть в лекции 4)

Пример. Получить имена поставщиков, поставляющих деталь номер 2.

Решение:

PNAME(DNUM = 2(DP JOIN P))

select P.PNAME

from DP inner join P on DP.PNUM = P.PNUM

where DNUM = 2

Пример. Получить имена поставщиков, поставляющих, по крайней мере, одну гайку.

Решение:

PNAME((DNAME = Гайка(D JOIN DP) JOIN P))

select PNAME

from D inner join DP on D.DNUM = DP.DNUM

where D.DNAME = ‘Гайка

Пример. Получить имена поставщиков, поставляющих все детали.

Решение:

PNAME((PNUM, DNUM(DP) / DNUM(D)) JOIN P)

Ответ на этот запрос можно получить и пошагово:

T1 = PNUM, DNUM(DP) – получить список номера поставщиков и поставляемые ими детали;

T2 = DNUM(D) – получить список номеров всех деталей;

T3 = T1 / T2 – получить список всех поставляемых деталей;

T4 = T3 JOIN P – получить список номеров деталей и имена поставщиков;

T5 = PNAME(T4) – список имен поставщиков поставляющих все детали.

Замечание. Используя средства SQL, одним запросом эту выборку сформулировать нельзя.

Пример. Получить имена поставщиков, не поставляющих деталь номер 2.

Решение:

PNAME (PNUM (PNUM(P) INTERSECT (DNUM = 2 (P JOIN DP))) JOIN P)

Ответ на этот запрос можно получить и пошагово:

T1 = PNUM(P) - получить список номеров всех поставщиков;

T2 = P JOIN DP - соединить данные о поставщиках и поставках

T3 = DNUM = 2(T2) - в данных о поставщиках и поставках оставить только данные о поставках детали номер 2.

T4 = PNUM(T3) - получить список номеров поставщиков, поставляющих деталь номер 2.

T5 = T1 INTERSECT T4 - получить список номеров поставщиков, не поставляющих деталь номер 2.

T6 = T3 JOIN P - соединить список номеров поставщиков, не поставляющих деталь номер 2 с данными о поставщиках (получатся полные данные о поставщиках, не поставляющих деталь номер 2).

T7 = PNAME(T6) - искомый ответ (имена поставщиков, не поставляющих деталь номер 2).

Используя SQL операцию вычитанию можно реализовать одним запросом, например

select PNAME

from P

where P.PNUM not in (select P.PNUM

from DP inner join P

on DP.PNUM = P.PNUM

where DNUM = 2)