Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД Особливості мови SQL.doc
Скачиваний:
4
Добавлен:
16.08.2019
Размер:
651.78 Кб
Скачать

2. Особливості багатотабличних запитів

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

При багато табличному запиті, таблиці, представлені у вигляді списку в пропозиції FROM, відділяються один від одного комами. Предикат запиту може посилатися до будь-якого стовпця будь-якої зв'язаної таблиці і, отже, може використовуватися для зв'язку між ними. Звичайно предикат порівнює значення в стовпцях різних таблиць, щоб визначити, чи задовольняє WHERE встановленій умові. До цього імена таблиць в запитах опускалися, тому запрошувалася тільки одна таблиця одночасно. Навіть при запиті з декількох таблиць допускається опускати їх імена, якщо, звичайно, вони різні Тепер же виникає необхідність використовування імен стовпців і таблиць, оскільки в багато табличному запиті можуть виникати неоднозначності.

Припустимо необхідний поставити у відповідність викладачу учбові предмети, які він веде. Фактично SQL доведеться вибирати з таблиці викладачів відповідний йому код і, проглядаючи таблицю предметів, здійснювати пошук відповідного коду. Це можна реалізувати наступним запитом:

SELECT TEACHERS.TFAM, PREDMET.PNAME

FROM TEACHERS, PREDMET

WHERE TEACHERS . TNUM = PREDMET.TNUM;

Висновок цього запиту представлений нижче: TFAM PNAME

Никуліна Фізика

Костирккгн Хімія

Казанко Математика

Позднякова Економіка

Загарійчух Філософія

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

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

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

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

SELECT TEACHERS.TFAM, PREDMET.PNAME

FROM TEACHERS, PREDMET

WHERE TEACHERS.TFAM < PREDMET.PNAME

AND TEACHERS.TFAM BETWEEN 'К' AND 'З < ;

TFAM PNAME

Костиркин Фізика

Костиркин Хімія

Костиркин Математика

Костиркин Філософія

Костиркин Економіка

Казанко Фізика

Казанко Хімія

Казанко Математика

Казанко Філософія

Казанко Економіка

Познякова Фізика

Познякова Хімія

Познякова Філософія

Познякова Економіка

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

Допускається також створювати запити, об'єднуючі більше дві таблиць. Наприклад, необхідно вивести список оцінок, виставлених тим або іншим викладачем. Тоді запит об'єднуватиме відразу три таблиці:

SELECT TEACHERS.TFAM, USP.OCENKA

FROM TEACHERS, PREDMET, USP

WHERE TEACHERS.TNUM = PREDMET.TNUM

AND PREDMET.PNUM = USP.PNUM;

У результаті буде одержано:

TFAM OCENKA

Никуліна 5

Казанко 4

Казанко 4

Позднякова 3

Загарійчук 5

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