You are on page 1of 7

Лабораторна робота №4

з курсу “ОБДЗ”
на тему:
“Виконання теоретико-множинних операцій реляційної алгебри засобами SQL”

Мета роботи: Розробити SQL запити для виконання операцій реляційної алгебри:
об’єднання, перетину, різниці, декартового добутку, проекції, селекції, натурального
з’єднання, умовного з’єднання.

Короткі теоретичні відомості.

Реляційна алгебра – це множина операцій, що виконуються над відношеннями і мають


за мету утворення нових відношень або їх станів. Реляційна алгебра визначає операції, які
однаковим чином реалізуються в усіх базах даних реляційного типу, незалежно від їх змісту і
технологій, за допомогою яких вони реалізовані. Тобто реляційна алгебра представляє собою
процедурну мову обробки реляційних таблиць.
Реляційна алгебра складається з таких операцій: об’єднання, перетин, різниця,
декартовий добуток, проекція, селекція, натуральне з’єднання, умовне з’єднання, а також
операції включення/вилучення кортежу з відношень, включення/вилучення атрибуту з
відношення, зміни параметрів атрибуту.
Перші чотири операції взяті з математичної теорії множин і практично співпадають з
операціями над множинами. Це зручно, оскільки реляційні таблиці є множинами, і цілком
природно застосовувати до них операції над множинами.
Об’єднанням двох відношень R та S з відповідними множинами атрибутів
( A1, A2 ,..., An ) називається відношення T , що має ту саму множину атрибутів ( A1 , A2 ,..., An ) , а

його інформаційне наповнення утворюється кортежами першого та другого відношень за


вилученням повторень:

Об’єднання дозволяє нам комбінувати дані з двох таблиць з однаковими множинами


атрибутів. Однакові множини атрибутів потрібні для того, щоб результатом виконання
операції об’єднання була реляційна таблиця.
Перетином двох відношень R та S з відповідними множинами атрибутів
( A1, A2 ,..., An ) називається відношення T , що має ту саму множину атрибутів ( A1 , A2 ,..., An ) , а

його інформаційне наповнення утворюється кортежами, які є спільними для цих двох
відношень:

Операція перетину дозволяє нам ідентифікувати рядки, спільні для двох таблиць.
Різницею двох відношень R та S з відповідними множинами атрибутів (A1 , A2 ,..., An )

називається відношення T , що має ту саму множину атрибутів ( A1 , A2 ,..., An ) , а його

інформаційне наповнення утворюється кортежами першого відношення за вилученням


кортежів, які є спільними з другим відношенням:

Операція різниці дозволяє ідентифікувати ті рядки, які є в одній таблиці, але відсутні в
іншій.
Декартовим добутком двох відношень R та S з відповідними множинами атрибутів
( A1, A2 ,..., An ) та (B1 , B2 ,..., Bm ) називається нове відношення T , множина атрибутів якого

складається з об’єднання множини атрибутів двох відношень, а кожен кортеж інформаційного


наповнення утворюється шляхом конкатенації (сполучення) кожного кортежу першого
відношення з кожним кортежем другого відношення.
Для реалізації теоретико-множинних операцій на мові SQL використовують директиву
SELECT, спрощений опис якої наведено далі, а також функції роботи з множинами значень
IN(), NOT IN().

SELECT
[ALL | DISTINCT | DISTINCTROW ]
елемент_вибірки [, елемент_вибірки]
[FROM перелік_таблиць]
[WHERE умова_відбору]

елемент_вибірки
Вираз, або назва поля, значення якого потрібно вибрати. Символ «*» позначає всі поля.
перелік_таблиць
Назва таблиці, з якої здійснюється вибір значень.
умова_відбору
Вказує умови відбору потрібних записів.
DISTINCT | DISTINCTROW
Видалення з результату рядків-дублікатів. За замовчуванням вибираються всі рядки.

Для того, щоб виконати операцію об’єднання таблиць, потрібно за допомогою команди
UNION об’єднати результати вибору рядків з двох, або більше, таблиць. Наведемо синтаксис
команди.

SELECT ...
UNION [ALL | DISTINCT] SELECT ...
[UNION [ALL | DISTINCT] SELECT ...]

В реляційну алгебру крім теоретико-множинних операцій входять ще й реляційні


операції над відношеннями. Зокрема проекція, селекція, натуральне та умовне з’єднання.
Проекцією відношення R( A1, A2 ,..., An ) на задану підмножину множини атрибутів

A '  {Ai1, Ai2 ,..., Aik} A називають множину R[ A'] проекцій кортежів відношення на ці

атрибути за вилученням повторень. Тобто операція створення проекції створює нову таблицю
шляхом виключення певних стовпців з існуючої таблиці. Для створення проекції – реляційної
таблиці, що складається лише з деяких визначених стовпців іншої реляційної таблиці – ми
просто вказуємо початкову таблицю, а далі перелічуємо ті стовпці, які хочемо залишити.
Результатом операції селекції деякого відношення R за заданим критерієм  є нове
відношення, яке утворюється з тих кортежів, значення атрибутів яких роблять істинною
умову, сформульовану критерієм select(R, )  R ' . Критерій селекції – це логічний вираз,

який порівнює значення атрибутів кортежу з деякими заданими величинами. Вимоги до


значень атрибутів критерію формулюються через порівняння значень (=, >, <, >=, <= тощо).
Операція натурального з’єднання визначається для двох відношень R( A1, A2 ,..., An ) та

S (B1 , B2 ,..., Bm ) , де A  B  0 , тобто відношення мають однакові атрибути. Результатом

операції є нове відношення, множина атрибутів якого є об’єднанням множин атрибутів


першого та другого відношень, а кожен кортеж утворюється шляхом об’єднання тих кортежів
відношень, в яких значення спільних атрибутів співпадають:

Дана операція призначена для утворення більш крупних відношень з більш дрібних.
Результатом умовного з’єднання двох відношень R( A1, A2 ,..., An ) та S (B1, B2 ,..., Bm ) , де
A  B  0 , є нове відношення, множина атрибутів якого є об’єднанням множини атрибутів
першого та другого відношень, а кожен кортеж утворюється шляхом об’єднання тих
кортежів відношень, для яких виконується критерій умовного з’єднання за атрибутами:

Для утворення умовного з’єднання необхідно визначити критерій або умову порівняння
атрибутів з вказаним виразом або між собою.

Для створення проекції на мові SQL можна використовувати директиву створення


віртуальних таблиць CREATE VIEW:
CREATE VIEW ім’я_проекції [(перелік_полів)]
AS SELECT DISTINCT (перелік_полів) FROM ім’я_таблиці

Хід роботи.

Перед виконанням завдання, потрібно сформувати дві таблиці з однаковими множинами


атрибутів. Візьмемо за основу таблицю користувачів Author і виконаємо вибір двох множин
записів, які перетинаються. Результат збережемо в таблицях Author1 і Author2.

CREATE TABLE mycms.author1


AS SELECT authorID, login, created FROM mycms.author
WHERE created < ’2009-01-01’;

Таблиця Author1:

CREATE TABLE mycms.author2


AS SELECT authorID, login, created FROM mycms.author
WHERE created < ’2009-02-01’;

Таблиця Author2:

1. Запит на виконання об’єднання Author1 i Author2:


SELECT * FROM Author1
UNION SELECT * FROM Author2
2. Запит на виконання перетину:
SELECT * FROM author1
WHERE authorID IN (SELECT authorID FROM author2);

3. Запит на виконання різниці Author2 i Author1:


SELECT * FROM author2
WHERE authorID NOT IN (SELECT authorID FROM author1);

4. Запит на виконання декартового добутку двох таблиць:


SELECT * FROM author1, author2;
Таблиця коментарів Comment:

Таблиця користувачів Author1:

5. Запит на виконання проекції:


CREATE VIEW comment2 AS SELECT DISTINCT authorID, text, posted
FROM comment;

Результати запиту:

6. Запит на виконання селекції коментарів за останній місяць:


SELECT *
FROM comment2
WHERE posted >= ’2009-03-01’ AND posted < ’2009-04-01’

Результати запиту:
7. Запит на виконання натурального з’єднання Author1 i Comment2:
SELECT author1.authorId, author1.login, author1.created,
comment2.text, comment2.posted
FROM author1, comment2
WHERE author1.authorID = comment2.authorID;

Результати запиту:

8. Запит на виконання умовного з’єднання. Додатковою умовою тут буде порівняння дати
коментаря і дати реєстрації користувача, з метою виявлення помилок в базі.

SELECT author1.authorId, author1.login, author1.created,


comment2.text, comment2.posted
FROM author1, comment2
WHERE author1.authorID = comment2.authorID AND
comment2.posted < author1.created;

Результом запиту є порожня множина, отже суперечливості в таблицях немає:

Висновок: на цій лабораторній роботі було розглянуто операції реляційної алгебри та їх


реалізація на мові SQL. Здійснено об’єднання, перетин, різницю та декартовий добуток двох
таблиць, проекцію, селекцію, натуральне та умовне з’єднання таблиць.

You might also like