Реляційна алгебра в СУБД з прикладами
⚡ Розумний підсумок
Реляційна алгебра в СУБД — це процедурна мова запитів, яка приймає відношення на вхід і створює нові відношення на вихід. Вона групує оператори в унарні, множинні та бінарні категорії, забезпечуючи теоретичну основу, яку SQL-двигуни перетворюють на виконувані плани запитів.

Що таке реляційна алгебра?
Реляційна алгебра — це процедурна мова запитів, яка приймає екземпляри відношень на вхідні дані та повертає нові екземпляри відношень на вихідні дані. Вона рекурсивно застосовує фіксований набір операторів до одного або кількох відношень, і результат кожного оператора сам по собі є відношенням, яке можна використовувати в наступній операції. SQL-рушії спираються на цю алгебру для планування та виконання запитів.
Базова реляційна алгебра Operaвих
Оператори реляційної алгебри поділяються на три групи.
Унарний реляційний Operaвих
- ВИБРАТИ (σ)
- ПРОЄКТ (π)
- ПЕРЕЙМЕНУВАТИ (ρ)
Operaз теорії множин
- СОЮЗ (∪)
- ПЕРЕТИН (∩)
- РІЗНИЦЯ (−)
- ДЕКАРТОВ ДОБУТОК (×)
Двійковий реляційний Operaвих
- РЕЄСТРАЦІЯ
- DIVISION
У розділах нижче детально описано кожен оператор з прикладами виконання.
ВИБРАТИ (σ)
Команда ВИБІР Операція вибирає підмножину кортежів, які задовольняють заданий предикат. Символ сигма σ позначає це:
σp(r)
де σ є оператором, p є умовою пропозиції, і r – це відношення (таблиця). SELECT зберігає схему та відкидає рядки, які не відповідають предикату.
Приклад 1
σ topic = "Database" (Tutorials)
Вибирає кортежі з Підручники де тема дорівнює «База даних».
Приклад 2
σ topic = "Database" AND author = "guru99" (Tutorials)
Вибирає кортежі з Підручники де тема — «База даних», а автор — guru99.
Приклад 3
σ sales > 50000 (Customers)
Вибирає кортежі з Клієнти вартість продажу яких перевищує 50 000.
Проекція (π)
Команда проекція Оператор видаляє всі атрибути з вхідного відношення, окрім перелічених, створюючи вертикальну підмножину. Проекція також усуває дублікати рядків, що виникають внаслідок видалення.ping атрибути. Символ пі π позначає це.
приклад: розгляньте наступну таблицю.
| Ідентифікатор клієнта | Ім'я клієнта | Статус |
|---|---|---|
| 1 | Active | |
| 2 | Amazon | Active |
| 3 | Apple | неактивний |
| 4 | Alibaba | Active |
Проектування на основі імені клієнта та статусу:
π CustomerName, Status (Customers)
| Ім'я клієнта | Статус |
|---|---|
| Active | |
| Amazon | Active |
| Apple | неактивний |
| Alibaba | Active |
Перейменувати (ρ)
Команда перейменувати Оператор — це унарна операція, яка надає нове ім'я атрибуту (або всьому відношенню). Наприклад, ρ(a/b) R перейменовує атрибут b відношення R до aПерейменування особливо корисне, коли потрібно виконати самоз'єднання або об'єднання двох відношень, які мають спільні імена атрибутів.
Union Operaція (∪)
Команда СОЮЗ оператор, що позначається як ∪, повертає кожен кортеж, що з'являється у відношенні A або B, автоматично видаляючи дублікати.
Result ← A ∪ B
Щоб союз був дійсним:
- A та B повинні мати однакову кількість атрибутів (однакову арність).
- Відповідні домени атрибутів мають бути сумісними.
- Дублікати кортежів видаляються автоматично.
Приклад. Розглянемо ці дві таблиці:
| Таблиця A | Таблиця B | |||
|---|---|---|---|---|
| колонка 1 | колонка 2 | колонка 1 | колонка 2 | |
| 1 | 1 | 1 | 1 | |
| 1 | 2 | 1 | 3 | |
A ∪ B дає:
| колонка 1 | колонка 2 |
|---|---|
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
Різниця наборів (−)
Символ мінус позначає різниця наборів. Результат A − B — це відношення, що містить усі кортежі, що знаходяться в A, але не в B.
- A та B мають бути сумісними за об'єднанням.
- Імена атрибутів та домени повинні збігатися.
Приклад: А − В
| колонка 1 | колонка 2 |
|---|---|
| 1 | 2 |
Перетин (∩)
Команда перетин оператор, що позначається як ∩, визначає відношення, що містить кожен кортеж, що зустрічається як в A, так і в B. A та B повинні бути сумісними за об'єднанням.
Візуальне визначення перетину.
Приклад: A ∩ B
| колонка 1 | колонка 2 |
|---|---|
| 1 | 1 |
Декартів добуток (×) у СУБД
Команда Декартовий продукт поєднує кожен кортеж одного відношення з кожним кортежем іншого, об'єднуючи їхні стовпці. Сам по собі результат рідко буває корисним, але в поєднанні з предикатом SELECT він стає основою JOIN. Його також називають векторним добутком або перехресним з'єднанням.
Приклад: σ стовпця 2 = '1' (A × B)
Вираз повертає кожен рядок A × B чий column 2 значення дорівнює 1.
| колонка 1 | колонка 2 |
|---|---|
| 1 | 1 |
| 1 | 1 |
Приєднатися Operaвих
A приєднатися — це декартів добуток, за яким йде предикат вибору. Об'єднання позначаються як ⋈ символ і дозволяє вам змістовно поєднувати пов'язані кортежі з різних відношень.
Типи приєднання:
- Внутрішні з'єднання: Тета-з'єднання, екві-з'єднання, природне з'єднання.
- Зовнішні з'єднання: Ліві, праві та повні зовнішні з'єднання.
Внутрішнє з'єднання
У inner join, включаються лише ті кортежі, які відповідають критеріям відповідності; решта відкидаються.
Тета приєднатися
Загальна форма JOIN - це Тета-приєднання, що позначається θ. Тета-з'єднання може використовувати будь-яку умову порівняння у своїх критеріях вибору.
A ⋈θ B
Наприклад:
A ⋈ A.column 2 > B.column 2 (B)
| колонка 1 | колонка 2 |
|---|---|
| 1 | 2 |
Приєднатися до Equi
Коли тета-з'єднання використовує лише умови рівності, воно стає Рівноправне приєднання.
A ⋈ A.column 2 = B.column 2 (B)
| колонка 1 | колонка 2 |
|---|---|
| 1 | 1 |
Рівномірне з'єднання є одним з найбільш використовуваних стилів з'єднання, і СУБД Оптимізатор запитів зазвичай докладає значних зусиль для підвищення його ефективності.
Природне з'єднання (⋈)
A Природне приєднання потрібен спільний атрибут (стовпець) між відношеннями. Спільний атрибут повинен мати однакове ім'я та домен. Результат містить одну копію відповідного стовпця.
Розгляньте ці дві таблиці.
| Таблиця С | |
|---|---|
| В | Площа |
| 2 | 4 |
| 3 | 9 |
| Таблиця D | |
|---|---|
| В | Куб |
| 2 | 8 |
| 3 | 27 |
C ⋈ D виробляє:
| В | Площа | Куб |
|---|---|---|
| 2 | 4 | 8 |
| 3 | 9 | 27 |
Зовнішнє приєднання
An зовнішнє з'єднання зберігає кортежі, що відповідають критеріям відповідності та кортежі, які цього не роблять, заповнюючи відсутні стовпці значенням NULL.
Ліве зовнішнє з’єднання (A ⟕ B)
Ліве зовнішнє з'єднання зберігає кожен кортеж у лівому відношенні. Якщо рядок в A не має відповідного рядка в B, атрибути, надані B, заповнюються значенням NULL.
Розгляньте наступні таблиці:
| Таблиця A | |
|---|---|
| В | Площа |
| 2 | 4 |
| 3 | 9 |
| 4 | 16 |
| Таблиця B | |
|---|---|
| В | Куб |
| 2 | 8 |
| 3 | 18 |
| 5 | 75 |
A ⟕ B дає:
| В | Площа | Куб |
|---|---|---|
| 2 | 4 | 8 |
| 3 | 9 | 18 |
| 4 | 16 | NULL |
Праве зовнішнє з'єднання (A ⟖ B)
Праве зовнішнє з'єднання зберігає кожен кортеж у правильному відношенні. Якщо рядок у B не має відповідного рядка в A, стовпці, що надаються A, заповнюються значенням NULL.
A ⟖ B дає:
| В | Куб | Площа |
|---|---|---|
| 2 | 8 | 4 |
| 3 | 18 | 9 |
| 5 | 75 | NULL |
Повне зовнішнє з'єднання (A ⟗ B)
Повне зовнішнє з'єднання зберігає кожен кортеж з обох відношень, незалежно від того, чи збіглася умова з'єднання. Відсутні значення з будь-якого боку стають NULL.
A ⟗ B дає:
| В | Площа | Куб |
|---|---|---|
| 2 | 4 | 8 |
| 3 | 9 | 18 |
| 4 | 16 | NULL |
| 5 | NULL | 75 |
OperaКороткий опис довідки Tor
Скористайтеся цією довідковою таблицею, щоб швидко згадати, що робить кожен оператор.
| Operaція (Символ) | Мета |
|---|---|
| ВИБРАТИ (σ) | Вибирає підмножину кортежів, які задовольняють заданий предикат. |
| ПРОЄКТ (π) | Зберігає лише перелічені атрибути та видаляє дублікати рядків. |
| СОЮЗ (∪) | Повертає кожен кортеж, що зустрічається в A або B, без дублікатів. |
| ВСТАНОВИТИ РІЗНИЦЮ (−) | Повертає кортежі з A, яких немає в B. |
| ПЕРЕТИН (∩) | Повертає кортежі, що зустрічаються як в A, так і в B. |
| ДЕКАРТОВ ДОБУТОК (×) | Поєднує кожен кортеж A з кожним кортежем B. |
| INNER JOIN | Зберігає лише ті кортежі, які відповідають умові об'єднання. |
| ТЕТА-ОБ'ЄДНАННЯ (θ) | З'єднання загальної форми з використанням будь-якого предиката порівняння. |
| EQUI JOIN | Тета-з'єднання, яке використовує лише порівняння рівності. |
| ПРИРОДНЕ З'ЄДНАННЯ (⋈) | Об'єднує відношення за атрибутами, що мають однакове ім'я та домен. |
| ЛІВЕ ЗОВНІШНЄ З'ЄДНАННЯ (⟕) | Зберігає кожен кортеж з лівого відношення, заповнює правий рядок значенням NULL. |
| ПРАВИЙ ЗОВНІШНІЙ ОБ'ЄДНАННЯ (⟖) | Зберігає кожен кортеж з правого відношення, заповнює лівий рядок значенням NULL. |
| ПОВНЕ ЗОВНІШНЄ З'ЄДНАННЯ (⟗) | Зберігає кожен кортеж з обох відношень, заповнюючи пропущені значення значенням NULL. |



