Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_4.doc
Скачиваний:
2
Добавлен:
21.11.2019
Размер:
142.85 Кб
Скачать

Об'єднання таблиць через довідкову цілісність

Ця особливість часто використовується просто для експлуатації зв'язків, вбудованих у БД. У попередньому прикладі ми встановили зв'язок між двома таблицями в об'єднанні. Це прекрасно. Але ці таблиці вже були сполучені через snum -поле. Цей зв'язок називається станом довідкової цілісності. Використовуючи об'єднання, можна витягати дані в термінах цього зв'язку.

Наприклад, щоб показати імена усіх замовників, що відповідають продавцям, які їх обслуговують, ми використовуватимемо такий запит:

SELECT Customers.cname, Salespeople.sname

FROM Customers, Salespeople

WHERE Salespeople.snum = Customers.snum;

Виведення цього запиту показане на Малюнку 8.2.

Це приклад об'єднання, в якому стовпці використовуються для визначення предиката запиту, і в цьому випадку snum -столбцы з обох таблиць видалені з виводу. І це прекрасно. Висновок показує, які замовники яким продавцем обслуговуються; значення поля snum, які встановлюють зв'язок, відсутні. Проте, якщо ви введете їх у вивід, то ви повинні або упевнитися, що вивід зрозумілий сам по собі, або повинні забезпечити коментар даних при виводі.

=============== SQL Execution Log ============

| SELECT Customers.cname, Salespeople.sname, |

| FROM Salespeople, Customers |

| WHERE Salespeople.snum = Customers.snum |

| ============================================= |

| cname sname |

| ------- -------- |

| Hoffman Peel |

| Giovanni Axelrod |

| Liu Serres |

| Grass Serres |

| Clemens Peel |

| Cisneros Rifkin |

| Pereira Motika |

=============================================

Малюнок 8.2 Об'єднання продавців з їх замовникам

Об'єднання таблиць по рівності значень у стовпцях і інші види об'єднань

Об'єднання, які використовують предикати, засновані на рівності, називаються об'єднаннями по рівності. Усі наші приклади в цій главі до теперішнього часу відносилися саме до цієї категорії, тому що усі умови в пропозиціях WHERE базувалися на математичних виразах, що використовують знак рівності (=). Рядки 'city = 'London' і 'Salespeople.snum = Orders.snum ' - приклади таких типів рівності, знайденої в предикатах.

Об'єднання по рівності це, ймовірно, найбільш загальний вигляд об'єднання, але є і інші. Ви можете використовувати практично будь-яку реляційну операцію в об'єднанні. Тут даний приклад іншого виду об'єднання (висновок показаний на Малюнку 8.3) :

SELECT sname, cname

FROM Salespeople, Customers

WHERE sname < cname

AND rating < 200;

=============== SQL Execution Log ============

| SELECT sname, cname |

| FROM Salespeople, Customers |

| WHERE sname < cname |

| AND rating < 200; |

| ============================================= |

| sname cname |

| -------- ------- |

| Peel Pereira |

| Motika Pereira |

| Axelrod Hoffman |

| Axelrod Clemens |

| Axelrod Pereira |

| |

=============================================

Малюнок 8.3 Об'єднання, засноване на нерівності

Ця команда не часто буває корисна. Вона відтворює усі комбінації імені продавця і імені замовника так, що перший передує останньому в алфавітному порядку, а останній має оцінку, менше ніж 200. Зазвичай ви не створюєте складних зв'язків, подібно до цієї, і з цієї причини ви, ймовірно, будуватимете найбільш загальні об'єднання по рівності, але ви повинні добре знати і інші можливості.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]