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

Тема 7. Створення псевдонімів. З’єднання таблиці із собою. Вибір даних з кількох таблиць

  1. Створення псевдонімів.

  2. З’єднання таблиці із собою.

  3. Вибір даних з кількох таблиць.

  4. Запити на об’єднання.

1. Створення псевдонімів.

Якщо є великі назви стовпчиків таблиць, то для того, щоб спростити запис в операторі SELECT використовують псевдоніми.

Тоді уточнене ім’я стовпчиків задається так:

Наприклад:

SELECT V.*, T.Cina

FROM Vidpusk V, Tovary T

WHERE V.Tovar = T.Nazva

2. З’єднання таблиці із собою.

Деякі багатотабличні запити використовують відношення, що існують всередині однієї з таблиць:

Нехай потрібно:

1). Вивести список імен працівників та їх керівників.

Кожному працівнику відповідає один рядок в таблиці Pracivnyky, а стовпчик Kerivnyk містить ідентифікатор (код) того працівника, який є керівником даного працівника.

Стовпчик Kerivnyk повинен бути зовнішнім ключем для тої таблиці, яка містить дані про керівників. Цей стовпчик і є ним – це зовнішній ключ для самої таблиці Pracivnyky.

Якщо попробувати створити цей запит як будь-який інший запит до двох таблиць з відношенням „первинний ключ – зовнішній ключ”, то він виглядав би таким чином:

1).а). Неправильно:

SELECT Prizv, Prizv

FROM Pracivnyky, Pracivnyky

WHERE Kerivnyk = Kod_Pracivn

– цей оператор SELECT – неправильний із-за подвійного звертання до таблиці Pracivnyky в секції FROM. Можна попробувати вилучити друге звертання до таблиці Pracivnyky:

б). Неправильно:

SELECT Prizv, Prizv

FROM Pracivnyky

WHERE Kerivnyk = Kod_Pracivn

Це – синтаксично правильний запит, але він не зробить того, що нам потрібно.

Це – однотабличний запит, тому СУБД почергово переглядає всі рядки таблиці Pracivnyky, щоб знайти ті, які задовольняють умові

Kerivnyk = Kod_Pracivn

Цій умові задовольняють рядки, в яких два стовпчика мають однакові значення, тобто працівник є своїм керівником. Таких рядків немає, тому запит не дасть ніякого результату.

Для того, щоб зрозуміти, як в SQL вирішується ця проблема, уявимо собі що є дві ідентичні копії таблиці Pracivnyky: одна копія називається Prac і містить дані про працівників; інша – називається Keriv і містить дані про керівників.

Стовпчик Kerivnyk таблиці Prac – це зовнішній ключ для таблиці Keriv і наступний запит буде працювати

в). Дві окремі таблиці – неправильно, бо їх немає.

SELECT Prac. Prizv, Keriv.Prizv

FROM Prac, Keriv

WHERE Prac. Kerivnyk = Keriv. Kod_Pracivn

  • оскільки стовпчики з прізвищами в двох таблицях мають однакові імена в секції SELECT необхідно використовувати повні імена стовпчиків.

Для з’єднання таблиці самої з собою в SQL використовується саме такий підхід: створення „уявної копії”. Замість того, щоб насправді зробити копію таблиці, СУБД просто дозволяє звернутися до неї, використовуючи інше ім’я, яке називають псевдонім таблиці.

Ось той самий запит з використанням псевдонімів таблиць:

г). Правильно:

SELECT Prac. Prizv, Keriv.Prizv

FROM Pracivnyky Prac, Pracivnyky Keriv

WHERE Prac. Kerivnyk = Keriv. Kod_Pracivnyka

В секції FROM для кожної уявленої копії таблиці Pracivnyky призначається псевдонім, який записується одразу після справжнього імені таблиці:

Якщо в секції FROM міститься псевдонім таблиці, то в повному імені стовпчика треба використовувати цей псевдонім, а не справжнє ім’я таблиці.

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