- •Загальні відомості
- •Поняття відношень
- •Реляційна база даних „успішність”
- •Операції реляційної алгебри
- •Теоретико-множинні операції ра
- •Операції, властиві тільки ра
- •Реляційне числення
- •Квантор існування. З'єднання
- •Квантор загальності. Ділення
- •Типи даних
- •Створення простого запиту в sql
- •Групування даних
- •Багатотабличні запити
- •Природне з'єднання
- •Тета-з'єднання
- •Зовнішнє з'єднання
- •Використання оператора join в інструкції from
- •Операції реляційної алгебри в sql-92
- •Підзапити у sql
- •Способи включення підзапиту в запит
- •Особливості синтаксису включення підзапиту
- •Підзапит в цільовому списку
- •Підзапити в інструкції where. Некорельований підзапит
- •Корельовані підзапити
- •Квантор існування в підзапитах
- •Оператори all, any, some
- •Оператори модицікації даних
- •Мова опису даних
- •Представлення
- •Висновок
- •Лабораторний практикум Лабораторна робота № 1
- •Лабораторна робота № 2
- •Контрольні завдання по sql
- •Бібліографічний список
Використання оператора join в інструкції from
Крім інструкції WHERE, для безпосереднього завдання умов з'єднання замість операторів NATURAL JOIN, JOIN USING і JOIN ON в MS Access використовуються оператори INNER JOIN ... ON - для природного і тета-з'єднань і OUTER JOIN ... ON - для зовнішнього.
Реалізація будь-якого з'єднання по умові рівності стовпців може бути виконана за рахунок вказування операторів з'єднання в інструкції FROM. Цей синтаксис в якійсь мірі подібний QBE-формам, в яких аналогом інструкції FROM служить схема запиту, що реалізує як зовнішні (зв'язки схеми БД), так і внутрішні по відношенню до запиту зв'язку. Тоді запити 1-3 можуть бути записані у такій формі.
Запит 1: Вказати студентів, які складали іспити і за курсом «Бази даних» та з курсу «Вища математика».
Рішення (2) в MS ACCESS:
SELECT Студент. ID_Stud AS [# Студента], Студент.СПрізв AS ПІБ
FROM Курс AS Курс_1 INNER JOIN
(Успішність AS Успішність_1 INNER JOIN
(Студент INNER JOIN (Курс INNER JOIN Успішність
ON Курс.ID_Subj = Успішність.ID_Subj)
ON Студент.ID_Stud = Успішність.ID_Stud)
ON Успішність_1. ID_Stud = Успішність. ID_Stud)
ON Курс_1. ID_Subj = Успішність_1. ID_Subj
WHERE ((курс. Найменування LIKE "* Б * Д *")
AND (Курс_1.Найменування LIKE "* В * М *"));
Рис. 3. Схема запиту 1
Запит 2: Визначити студентів, які здали іспити не гірше своїх консультантів.
Рішення (2) в MS ACCESS: SELECT Студент.ID_Stud AS [# Ст], Студент.СПрізв AS ПІБ, Курс.Найменування,
Успішність_1. Оцінка AS Оцінка_Консультанта, Успішність.Оцінка AS Оцінка_Студента
FROM Курс INNER JOIN (Студент INNER JOIN
(Успішність INNER JOIN Успішність AS Успішність_1 ON (Успішність. ID_Subj = Успішність_1. ID_Subj) AND (Успішність.Семестр = Успішність_1. Семестр)) ON (Студент.Консультант = Успішність_1. ID_Stud) AND (Студент.ID_Stud = Успішність.ID_Stud)) ON Курс.ID_Subj = Успішність.ID_Subj
WHERE Успішність_1.Оцінка <= Успішність.Оцінка
Рис. 4. Схема запиту 2
Запит 3: Вивести список студентів, предметів, які вони здавали, і отриманих оцінок. Список повинен включати і інформацію про студентів, які ще не здавали іспити.
Рішення (2) в MS ACCESS: SELECT Студент.ID_Stud AS [# Студента], Студент.СПрізв AS ПІБ, Успішність.ID_Subj, Успішність.Семестр, Успішність.Оцінка FROM Студент LEFT JOIN Успішність
ON Студент.ID_Stud = Успішність.ID_Stud
Зауваження. Оскільки оператори JOIN, які використовуються в інструкції FROM, вкладаються один в одного, то синтаксис не допускає використання двох різних з'єднань в одному запиті. У прикладі неможливо дізнатися назви курсі, так як для цього треба використати наряду з LEFT JOIN з’єднання INNER JOIN.
Операції реляційної алгебри в sql-92
Коротко обговоримо реалізацію теоретико-множинних операцій РА вSQL-92.
Об'єднання
SELECT clause UNION [ALL]
SELECT clause SELECT <цільовий список>
FROM (table_name1 UNION [ALL] table_name2)
Перетин
SELECT clause INTERSECT [ALL]
SELECT clauseSELECT <цільовий список>
FROM (table_name1 INTERSECT [ALL] table_name2)
Різниця
SELECT clause EXCEPT [ALL]
SELECT clause SELECT <цільовий список>
FROM (table_name1 EXCEPT [ALL] table_name2)
Всі перераховані вище теоретико-множинні операції припускають, що операндами є об'єднувально-сумісні таблиці. Однак стандарт SQL-92 допускає виконання цих операцій "в слабкому сенсі", тобто коли перетин, об'єднання чи різниця виконується над таблицями, у яких збігається тільки частина стовпців. У цьому випадку говорять про слабку об'єднуючу сумісність, а до назви операції додають CORRESPONDING BY (column_name1 [, column_name2, ...]).
Запит: Хто зі студентів отримав оцінку «відмінно» за курсом «вища математика»?
Рішення: (SELECT * FROM СТУДЕНТ)
INTERSECT CORRESPONDENT BY (ID_Stud)
(SELECT * FROM Успішність WHERE Оцінка = 5)
INTERSECT CORRESPONDENT BY (ID_Subj)
(SELECT * FROM Успішність WHERE Найменування LIKE '* В * М *')