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

Лабораторна робота №4.

Тема: "SQL-запросы. Обьединение таблиць. Підзапити"

Мета роботи : Навчитися обьеденять таблиці посредствам SQL -запросов і підзапитів.

Теоретичні відомості об'єднання таблиць

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

Імена таблиць і стовпців

Повне ім'я стовпця таблиці фактично складається з імені таблиці, що супроводжується точкою, і потім імені стовпця. Ось декілька прикладів імен :

Salespeople.snum

Salespeople.city

Orders.odate

До цього ви могли опускати імена таблиць, тому що ви просили одноразово тільки одну таблицю, а SQL досить інтелектуальний, щоб присвоїти відповідний префікс імені таблиці. Навіть коли ви робите запит декількох таблиць, ви ще можете опускати імена таблиць, якщо усі їх стовпці мають різні імена. Але так буває не завжди. Наприклад, ми маємо дві типові таблиці із стовпцями, званими city.

Якщо ми повинні зв'язати ці стовпці (короткочасно), ми повинні будемо вказати їх з іменами Salespeople.city або Customers.city, щоб SQL міг їх розрізняти.

Створення об'єднання

Припустимо, що ви хочете поставити у відповідність вашому продавцеві ваших замовників в місті, в якому вони живуть, тому ви побачите усі комбінації продавців і замовників для цього міста. Ви повинні братимете кожного продавця і шукатимете в таблиці Замовників усіх замовників того ж самого міста. Ви могли б зробити це, ввівши наступну команду (висновок показаний на Малюнку 8.1) :

SELECT Customers.cname, Salespeople.sname

Salespeople.city

FROM Salespeople, Customers

WHERE Salespeople.city = Customers.city;

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

| SELECT Customers.cname, Salespeople.sname, |

| Salespeople.city |

| FROM Salespeople, Customers |

| WHERE Salespeople.city = Customers.city |

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

| cname cname city |

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

| Hoffman Peel London |

| Hoffman Peel London |

| Liu Serres San Jose |

| Cisneros Serres San Jose |

| Hoffman Motika London |

| Clemens Motika London |

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

Малюнок 8.1 Об'єднання двох таблиць

Оскільки це city є і в таблиці Продавців, і таблиці Замовників, імена таблиць повинні використовуватися як префікси. Хоча це необхідно, тільки коли два або більше за поля мають одно і те ж ім'я, у будь-якому випадку це хороша ідея: включати ім'я таблиці в об'єднання для кращого розуміння і несуперечності. Незважаючи на це, ми будемо в наших прикладах далі використовувати імена таблиць тільки тоді, коли необхідно, так що буде ясно, коли вони потрібні, а коли ні.

Що SQL в основному робить в об'єднанні, так це досліджує кожну комбінацію рядків двох або більше можливих таблиць і перевіряє ці комбінації по їх предикатах. У попередньому прикладі був потрібний рядок продавця Peel з таблиці Продавців і об'єднання її з кожним рядком таблиці Користувачів, по одній в кожен момент часу.

Якщо комбінація проводить значення, яке робить предикат вірним, і якщо поле city з рядків таблиць Замовника рівне London, то Peel - це те прошене значення, яке комбінація вибере для виводу. Те ж саме буде потім виконано для кожного продавця в таблиці Продавців (у деяких з яких не було ніяких замовників в цих містах).

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