Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
m_DBSQL_mu.docx
Скачиваний:
28
Добавлен:
17.03.2016
Размер:
373.51 Кб
Скачать

Багатотабличні запити

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

Природне з'єднання

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

Запит: Указати П.І.Б. студентів та назви дисциплін, за якими вони складали іспити та оцінки, отримані студентами.

Рішення:SELECT ПІБ = СПрізв, Дисципліна = Найменування, Оцінка FROM СТУДЕНТ, УСПІШНІСТЬ, КУРС WHERE СТУДЕНТ.ID_Stud = УСПІШНІСТЬ.ID_Stud AND УСПІШНІСТЬ.ID_Subj = КУРС.ID_Subj

У стандарт SQL-92 доданий також оператор NATURAL JOIN - аналог з'єднання в РА. Він записується як з'єднання двох результуючих множин операторів SELECT. Інструкції FROM цих операторів повинні містити не більше однієї таблиці, причому вони повинні бути пов'язані у схемі даних. Наприклад, попередній запит в цьому випадку може бути записаний таким чином:

Рішення (2): SELECT ПІБ = СПрізв FROM СТУДЕНТ

NATURAL JOIN

SELECT Оцінка FROM УСПІШНІСТЬ

NATURAL JOIN SELECT Дисципліна = Найменування FROM КУРС

Тета-з'єднання

При з'єднанні таблиці самій з собою використовуються псевдоніми таблиці. Псевдонім вказується в інструкції FROM після імені таблиці через пробіл або службове слово AS.

Запит 1: Вказати студентів, які складали іспити і з курсу «Бази даних» та з курсу «Вища математика».

Рішення:

SELECT DISTINCT № Студента = СТУДЕНТ. ID_Stud, ПІБ = СПрізв

FROM СТУДЕНТ, УСПІШНІСТЬ AS У1,

УСПІШНІСТЬ AS У2, КУРС AS К1, КУРС AS К2

WHERE № Студента = У1. ID_Stud AND У2.ID_Stud = У1.ID_Stud AND К1.ID_Subj = У1.ID_Subj AND К2.ID_Subj = У2.ID_Subj AND К1.Найменування LIKE '* Б * Д *' AND К2.Найменування LIKE '* В * М *

Запит 2: Визначити студентів, які здали іспити не гірше своїх консультантів.

Рішення:

SELECT DISTINCT № Студентa = СТУДЕНТ.ID_Stud, ПІБ = СПрізв, Дисципліна = Найменування, ОцінкаСт = У1. Оцінка, ОцінкаКонс = У2.Оцінка

FROM СТУДЕНТ, УСПІШНІСТЬ AS У1, УСПІШНІСТЬ AS У2

WHERE № Студента = У.ID_Stud AND Консультант = У2.ID_Stud AND У1.Оценка> = У2.Оценка AND У1.ID_Subj = У2.ID_Subj AND У1. Семестр = У2.Семестр

Для реалізації тета-з'єднань в SQL-92 додані інструкції A JOIN B USING k, l що еквівалентно з'єднанню по умові рівності зазначених стовпців WHERE Ak = Bk AND Al = Bl

і

A JOIN B ON <умова з'єднання>

Зовнішнє з'єднання

Зовнішнє з'єднання реалізується в стандарті SQL-89 операторами порівняння в інструкції WHERE виду

* = включення всіх записів з першої таблиці;

= * включення всіх записів з другої таблиці;

Запит 3: Вивести список студентів, предметів, які вони здавали і отриманих оцінок. Список повинен включати і інформацію про студентів, ще не здавали іспити.

Рішення:

SELECT №Студента=СТУДЕНТ.ID_Stud, ПІБ=СПрізв,

Дисципліна=Найменування, Семестр, Оцінка

FROM СТУДЕНТ, УСПІШНІСТЬ, КУРС

WHERE №Студента *= УСПІШНІСТЬ.ID_Stud AND КУРС.ID_Subj= УСПІШНІСТЬ.ID_Subj

В SQL-92 добавлений оператор LEFT (RIGHT) JOIN, реализуючий зовнішнє зєднання.

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