Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Fondovi-lekcii.doc
Скачиваний:
20
Добавлен:
10.11.2018
Размер:
4.09 Mб
Скачать

3. Просте з’єднання таблиць (з’єднання за рівністю)

Процес формування пар рядків шляхом порівняння вмісту відповідних стовпчиків – називається з’єднанням таблиць.

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

З’єднання на основі точної рівності між значеннями двох стовпчиків називаються з’єднання за рівністю (можуть бути з’єднання і на основі інших видів порівняння стовпчиків – їх розглянемо пізніше).

З’єднання – це основа багатотабличних запитів в SQL.

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

Таким чином, з’єднання – це потужний (і єдиний!) спосіб виявлення відношень, що існують між даними.

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

2). Вивести номер і вартість замовлення, а також прізвище клієнта, який зробив це замовлення і величину наданого цьому клієнтові кредиту.

2). SELECT No_Zamovl, Vartist, Prizv, Credit

FROM Zamovlennia,Clients

WHERE Client = Kod_Clienta

  • тут є особливості:

І. Секція FROM містить дві таблиці.

ІІ. В умові відбору Client = Kod_Clienta порівнюються стовпчики із двох таблиць. Такі стовпчики називаються зв’язаними.

Зауважимо, що в операторі SELECT ніде не сказано як саме повинен виконуватися запит. Там немає вказівок типу „почніть з замовлень” або „почніть з клієнтів”. Замість цього в запиті сказано що ми повинні отримати в результаті, а спосіб отримання в результатів – залишається за СУБД.

Така умова відбору зменшує кількість пар рядків таблиці результатів: „Включити в таблицю результатів запиту тільки ті пари рядків, для яких ідентифікатор клієнта (Client) в таблиці Zamovlennia дорівнює ідентифікатору клієнта (Kod_Clienta) в таблиці Clients”.

Запити з використанням відношення „головна – підлегла” таблиці (предок – нащадок)

Із всіх багатотабличних запитів на практиці найбільш поширені запити до двох таблиць, які зв’язані відношенням „головна – підлегла”. Запит про замовлення і клієнтів – саме такий.

У кожного замовлення (нащадок) є відповідний клієнт (предок), і кожний клієнт (предок) може мати багато замовлень (нащадків). Таблиці, із яких беруться рядки для формування пари рядків результатів запиту, зв’язані відношенням „головна (Clients) – підлегла (Zamovlennia)”.

В реляційній базі даних первинні (головні) і зовнішні ключі створюють відношення предок /нащадок .

Clients

Kod_Clienta

..

..

..

Zamovlennia

..

..

Client

..

..


Таблиця, яка містить зовнішній ключ – це нащадок (підлегла таблиця), таблиця, у якій відповідний стовпчик є первинним ключем, - це предок (головна таблиця). Щоб в запиті використати відношення предок/нащадок, потрібно задати умову відбору, у якій первинний ключ порівнюється із зовнішнім ключем:

2). SELECT No_Zamovl, Vartist, Prizv, Credit

FROM Zamovlennia,Clients

WHERE Client = Kod_Clienta

зовнішній ключ первинний ключ

в таблиці Zamovlennia таблиці Clients

(для зв’язку із таблицею Clients)

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

Це пов’язано з тим, що первинний і зовнішній ключі найчастіше являють собою ідентифікатори, які людині важко запам’ятати, тоді як відповідні назви (міста, організації, прізвища, посади тощо) запам’ятати набагато легше.

Тому цілком зрозуміло, що в секції WHERE для з’єднання двох таблиць використовуються ідентифікатори, а в секції SELECT для створення результуючих стовпчиків – більш зручні для сприйняття назви.

Умова для відбору рядків

В багатотабличному запиті можна комбінувати умову відбору, в якій визначаються зв’язані стовпчики, з іншими умовами, щоб ще більше звузити результати запиту.

3). Нехай потрібно повторити попередній запит, але включити в нього лише замовлення тих клієнтів, чий кредит перевищує 85 грн.

3). SELECT No_Zamovl, Vartist

Prizv, Credit

FROM Zamovlennia, Clients

WHERE Client = Kod_Clienta

AND Credit > 85

  • застосування додаткової умови відбору зменшує кількість рядків в таблиці результатів запиту.

Перша умова (Client = Kod_Clienta) відбирає із таблиці Zamovlennia і Clients ті пари рядків, які зв’язані відношенням предок/нащадок; друга умова приводить до подальшого відбору лише тих пар рядків, де кредит перевищує 85 грн.

Кілька зв’язаних стовпчиків

Розглянемо приклад:

Tovary

Kod_Tovaru

Kod_Vyrobnyka

Cina

Zamovlennia

N_Z

Tovar

Vyrobnyk

Kilkist


Стовпчики Tovar і Vyrobnyk в таблиці Zamovlennia утворюють зовнішній ключ для зв’язку із таблицею Tovary і зв’язані із її стовпчиками Kod_Tovaru і Kod_Vyrobnyka відповідно.

Щоб сполучити таблиці на основі такого відношення предок/нащадок, необхідно задати обидві пари зв’язаних стовпчиків.

4). Вивести номери замовлень на товари, а також відповідних товарів.

4). SELECT No_Zamovl, Nazva

FROM Zamovlennia, Tovary

WHERE Tovar = Kod_Tovaru

AND Vyrobnyk = Kod_Vyrobnyka

Умова відбору в цьому запиті визначає, що зв’язаними парами рядків таблиць Zamovlennia і Tovary будуть ті, в яких пари зв’язаних стовпчиків містять одні і ті самі значення.

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

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