Языки манипулирования данными. Карепова Е.Д. - 16 стр.

UptoLike

Составители: 

31
Решение:
SELECT №Студента=СТУДЕНТ.ID_Stud, ФИО=СФам,
Дисциплина=Наименование, Семестр, Оценка
FROM СТУДЕНТ, УСПЕВАЕМОСТЬ, КУРС
WHERE №Студента *= УСПЕВАЕМОСТЬ.ID_Stud
AND КУРС.ID_Subj=УСПЕВАЕМОСТЬ.ID_Subj
В SQL-92 добавлен оператор LEFT (RIGHT) JOIN, реализующий
внешнее соединение.
Использование оператора 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 "*В*М*"));
УСПЕВАЕМОСТЬ УСПЕВАЕМОСТЬ_1
ID_Stud ID_Stud
ID_Subj ID_Subj
Семестр Семестр
Оценка Оценка
СТУДЕНТ
КУРС ID
_
Stu
d
КУРС 1
ID
_
Sub
j
СФам ID
_
Sub
j
32
Наименование Адрес Наименование
Консультант
Рис. 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.Оценка <= Успеваемость.Оценка
УСПЕВАЕМОСТЬ_1 УСПЕВАЕМОСТЬ
ID_Stud ID_Stud
ID
_
Sub
j
ID
_
Sub
j
Семест
р
Семест
р
Оценка Оценка
СТУДЕНТ
ID
_
Stu
d
КУРС
СФам ID
_
Sub
j
Адрес Наименование
Конс
у
льтант
Рис. 4. Схема запроса 2
Запрос 3: Вывести список студентов, предметов, которые они сдавали,
и полученных оценок. Список должен включать и информацию о студентах,
еще не сдававших экзамены.
Решение (2) в MS ACCESS:
SELECT Студент.ID_Stud AS [#Студента], Студент.СФам AS ФИО,
Успеваемость.ID_Subj, Успеваемость.Семестр,
Успеваемость.Оценка
FROM Студент LEFT JOIN Успеваемость
ON Студент.ID_Stud = Успеваемость.ID_Stud
Замечание. Поскольку операторы JOIN, используемые в инструкции
FROM, вкладываются друг в друга, то синтаксис не допускает использования
двух разных соединений в одном запросе. В примере невозможно узнать на-