
- •Загальні відомості
- •Поняття відношень
- •Реляційна база даних „успішність”
- •Операції реляційної алгебри
- •Теоретико-множинні операції ра
- •Операції, властиві тільки ра
- •Реляційне числення
- •Квантор існування. З'єднання
- •Квантор загальності. Ділення
- •Типи даних
- •Створення простого запиту в sql
- •Групування даних
- •Багатотабличні запити
- •Природне з'єднання
- •Тета-з'єднання
- •Зовнішнє з'єднання
- •Використання оператора join в інструкції from
- •Операції реляційної алгебри в sql-92
- •Підзапити у sql
- •Способи включення підзапиту в запит
- •Особливості синтаксису включення підзапиту
- •Підзапит в цільовому списку
- •Підзапити в інструкції where. Некорельований підзапит
- •Корельовані підзапити
- •Квантор існування в підзапитах
- •Оператори all, any, some
- •Оператори модицікації даних
- •Мова опису даних
- •Представлення
- •Висновок
- •Лабораторний практикум Лабораторна робота № 1
- •Лабораторна робота № 2
- •Контрольні завдання по sql
- •Бібліографічний список
Реляційна база даних „успішність”
Для ілюстрації пояснення будемо використовувати просту БД успішності, що складається з трьох відношень (імена відношень дані прописними буквами, "*" позначені первинні ключі, лініями позначені зв'язки із зазначенням їх ступеня - "1" або "багато"):
При цьому будемо використовувати також наступний екземпляр БД:
Операції реляційної алгебри
Операції РА використовують одне або два реляційних відношення (РВ) для створення нового РВ. Результуюче відношення може бути використано в якості вхідного для нової операції. Як вказувалося, РА є процедурною мовою, тобто для всіх операцій описані алгоритми отримання результуючої множини.
Є.Ф. Кодд розглядає в рамках РА дев'ять операцій (див. рис. 1). Слід зазначити, що цей набір надлишковий, тобто деякі операції можуть бути визначені через залишені. Однак з огляду на важливість для практики операцій з'єднання і ділення вони виділяються як самостійні.
Об'єднання взяті з теорії
множин
Перетин і збігаються з відповідними
Різниця теоретико-множинними операціями
Множення
Операція
Вибір відносяться тільки
Створення проекції до реляційної алгебри
З'єднання
Ділення
Присвоєння стандартна
операція комп'ютерної мови, що дає ім'я
величині
Присвоєння
Операція присвоєння є стандартною і основною для будь-якої процедурної мови. У нашому випадку з її допомогою проводиться присвоєння імені новому відношенню, створеному з існуючих відношень. Для позначення присвоєння будемо використовувати стандартний символ ": =".
Теоретико-множинні операції ра
Операції РА об'єднання, перетин і різницю оперують двома РВ. Важливою відмінністю цих операцій від теоретико-множинних аналогів є необхідність збігу структури (схем) відношень-операндів, тобто вони повинні мати в точності одні й ті ж атрибути.
Взагалі, дві схеми називаються еквівалентними, а відношення об’єднано-сумісними, якщо вони мають однакову ступінь і можливе таке упорядкування імен атрибутів в схемах, що на однакових місцях будуть знаходитися зрівнянні атрибути, тобто атрибути, приймаючі значення з одного домену.
Для ілюстрації цих операцій припустимо, що замість відношення СТУДЕНТ існує два відношення КОНСУЛЬТОВАНИЙ = <ID_Stud(*), СПрізв, САдреса> і КОНСУЛЬТАНТ = <ID_Stud(*), СПрізв, САдреса>.
КОНСУЛЬТОВАНИЙ
ID_Stud |
СПрізв |
САдреса |
Консультант |
001 |
Іваненко І.І. |
А1 |
004 |
002 |
Іваненко І.І. |
А2 |
004 |
003 |
Петрова П.П. |
А3 |
002 |
КОНСУЛЬТАНТ
ID_Stud |
СПрізв |
САдреса |
Консультант |
002 |
Іваненко В.И. |
А2 |
004 |
004 |
Андреєва А.А. |
А4 |
Null |
Очевидно, що це надлишкові дані. Вони могли бути створені, наприклад, після застосування серії операцій РА.
Об'єднання
Операція Об'єднання (І) дозволяє комбінувати дані з двох відношень. У результуючевідношеннякортеж включається, якщо він входить хоча б в одне з відношень-операндів.
Запит.Отримати список всіх студентів.
Рішення.СТУДЕНТ: =КОНСУЛЬТОВАНИЙІ КОНСУЛЬТАНТ
Результат.Збігається з РВ СТУДЕНТ з первісної БД.
Зауваження. Будь кортеж, що з'являється в обох відношеннях, входить в результуюче відношення тільки один раз, що забезпечує замкнутість операції надмножиноювідношень. Наприклад, рядок зID_Stud= 002 увійде в СТУДЕНТ один раз.
Перетин
У результуюче віношення кортеж включається, якщо він входить в обидва відношення-операнда.
Запит. Визначити, хто з студентів консультується, сам будучи консультантом.
Рішення.КОНСУЛЬТОВАНИЙ_КОНСУЛЬТАНТ: = КОНСУЛЬТОВАНИЙ^ КОНСУЛЬТАНТ
Результат.
ID_Stud |
СПрізв |
САдреса |
Консультант |
002 |
Іваненко В.И. |
А2 |
004 |
Різниця
У результуюче відношення кортеж включається, якщо він входить в перше відношення-операнд, але відсутнє в іншому.
Запит. Визначити, хто з студентів консультується, сам НЕ будучи консультантом.
Рішення.
КОНСУЛЬТОВАНИЙ_НЕ_КОНСУЛЬТАНТ: = КОНСУЛЬТОВАНИЙ - КОНСУЛЬТАНТ
Результат.
ID_Stud |
СПрізв |
САдреса |
Консультант |
001 |
Іваненко І.І. |
А1 |
004 |
003 |
Петрова П.П. |
А3 |
002 |
Слід відмітити, що операція не комутативна, А - В <> В - А.
Запит. Визначити, хто з студентів консультує, але сам НЕ консультується.
Рішення.
КОНСУЛЬТАНТ_НЕ_КОНСУЛЬТОВАНИЙ: = КОНСУЛЬТАНТ - КОНСУЛЬТОВАНИЙ
Результат.
ID_Stud |
СПрізв |
САдреса |
Консультант |
004 |
Андреєва А.А. |
А4 |
Null |
Множення
Ця операція РА створює декартове множення двох РВ. Щоб пояснити дію цієї операції, розглянемо абстрактний приклад.
Запит. Дано два РВ: А = <Х, У> і В = <W,Z>.
А В
X |
Y |
10 |
20 |
11 |
22 |
W |
Z |
100 |
200 |
101 |
201 |
102 |
202 |
Слід знайти множення цих відношень.
Рішення. C: = A * B.
Результат.
С
X |
Y |
W |
Z |
10 |
20 |
100 |
200 |
10 |
20 |
101 |
201 |
10 |
20 |
102 |
201 |
11 |
22 |
100 |
200 |
11 |
22 |
101 |
201 |
11 |
22 |
102 |
201 |
Декартове множення виходить в результаті:
1. зв'язування (або з'єднання) атрибутів двох відношень;
2.приєднання до кожного кортежу відношення А кожного кортежу відношення В.
Якби нам спало на думку виконати безглузду операцію СТУДЕНТ * УСПІШНІСТЬ, то відповідь містив би 8 стовпців і 36 рядків і була би вельми безглуздою. Крім того, два стовпці взагалі називалися б однаково - ID_Stud. Остання проблема долається шляхом додавання до імені стовпця імені таблиці - СТУДЕНТ. ID_Stud і УСПІШНІСТЬ.ID_Stud. Взагалі, на перший погляд, ніякі запити не вимагають такої дивної операції. Однак множення використовується як складова частина операції з'єднання і, отже, важлива хоча б в концептуальному плані. Більш того, вона реалізована в мовах запитів, і тут ще не раз про неї буде згадуватися.