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

Використання оператора 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 '* В * М *')

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