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

UptoLike

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

33
именования курсов, так как для этого надо использовать наряду с 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 clause
SELECT <целевой список>
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 ‘*В*М*’)
ПОДЗАПРОСЫ В SQL
Вставка запроса внутрь некоторых инструкций SQL допускается стан-
дартом. Однако не все коммерческие реализации поддерживают такой син-
таксис полностью. Поэтому употребление подзапросов должно быть оправ-
дано. Большинство включений подзапросов может быть продублировано
возможностями соединений, однако в некоторых случаях без ПЗ не обойтись.
34
Способы включения подзапроса в запрос
В целевой список оператора SELECT. В этом случае создается
новое поле, значение которого одинаково для всех картежей. Результатом за-
проса должно служить одно значение.
В инструкцию WHERE. Существует несколько способов встраива-
ния подзапроса в инструкцию WHERE.
1. В операторе сравнения. Результатом такого встроенного подзапроса
должно быть одно значение, с которым и происходит сравнение. Следует
помнить, что подзапрос должен указываться вторым операндом операции
сравнения.
2. С оператором [NOT] IN (SubQuery). В этом случае результатом под-
запроса может быть колонка значений, которая и будет выступать тем мно-
жеством значений, вхождение в которое проверяется с помощью IN.
3. С предикатом [NOT] EXIST (SubQuery). В этом случае результат
подзапросамножество картежей, если это множество не пусто, то значение
предиката EXISTS становится TRUE, а предиката NOT EXISTS – FALSE, и
наоборот, если результат подзапросапустое множество.
Особенности синтаксиса включения подзапроса
¾ Целевой список подзапросаодно поле или одно выражение. Исключе-
ние составляют подзапросы с EXISTS, которые допускают еще и синтак-
сис SELECT *.
¾ Подзапрос всегда оформляется в круглых скобках.
¾ Подзапрос, возвращающий одно значение, можно использовать в любом
месте, где допустимо использование вычисляемого выражения.
¾ Подзапросы допускают группировки и групповые операции.
¾ В подзапрос НЕЛЬЗЯ включать инструкции ORDER BY, INTO,
COMPUTE [BY]
Подзапрос в целевом списке
Запрос: Вывести сведения об успеваемости студентов, добавив рядом с
оценкой показатель относительной успешности, вычисляемый по формуле
K1=Оценка/AVG(Оценка)%.
Решение:
SELECT ФИО=СФам, Дисциплина=Наименование, Семестр, Оценка,
СредняяОценка = (SELECT AVG(Оценка) FROM УСПЕВАЕМОСТЬ),
К1 = (CONVERT(float, Оценка)/(SELECT AVG(Оценка) FROM
УСПЕВАЕМОСТЬ))*100, ‘%’
FROM СТУДЕНТ, УСПЕВАЕМОСТЬ, КУРС
WHERE ФИО=УСПЕВАЕМОСТЬ.ID_Stud AND
УСПЕВАЕМОСТЬ.ID_Subj=КУРС.ID_Subj