- •Загальні відомості
- •Поняття відношень
- •Реляційна база даних „успішність”
- •Операції реляційної алгебри
- •Теоретико-множинні операції ра
- •Операції, властиві тільки ра
- •Реляційне числення
- •Квантор існування. З'єднання
- •Квантор загальності. Ділення
- •Типи даних
- •Створення простого запиту в sql
- •Групування даних
- •Багатотабличні запити
- •Природне з'єднання
- •Тета-з'єднання
- •Зовнішнє з'єднання
- •Використання оператора join в інструкції from
- •Операції реляційної алгебри в sql-92
- •Підзапити у sql
- •Способи включення підзапиту в запит
- •Особливості синтаксису включення підзапиту
- •Підзапит в цільовому списку
- •Підзапити в інструкції where. Некорельований підзапит
- •Корельовані підзапити
- •Квантор існування в підзапитах
- •Оператори all, any, some
- •Оператори модицікації даних
- •Мова опису даних
- •Представлення
- •Висновок
- •Лабораторний практикум Лабораторна робота № 1
- •Лабораторна робота № 2
- •Контрольні завдання по sql
- •Бібліографічний список
Багатотабличні запити
З'єднання даних з різних таблиць в одну - одна з найважливіших можливостей 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, реализуючий зовнішнє зєднання.