HAVING Student. NRecordBook= Progress. NRecordBook);
Просмотрим результат с помощью запроса:
Select SName ФИО, MarkAVG [Средняя оценка]
from Student
Результат реализации запроса:
Подзапрос в команде DELETE
Пример 78
Задача.
Удалить из таблицыSgroup группы, в которые не зачислен ни один студент.
Решение:
DELETE FROM Sgroup
WHERE IDGroup IN
(SELECT St.IDGroup
FROM Student St
GROUP BY St.IDGroup
HAVING Count(St.IDGroup)=0);
Применение предикатов при работе с подзапросами.
Предикаты ANY и SOME.
Предикаты ANY и SOME равноценны, но Some является ANSI совместимым. Предикаты могут использоваться с любыми операторами сравнения. Так, сочетание >SOME означает больше минимума, например >SOME (3,4,5) означает больше 3. Сочетание =SOME (=ANY) равносильно оператору IN.!=Some - NOT IN. Практическая значимость этих предикатов незначительна, так как нет ни одной операции, которую нельзя было бы реализовать с помощью других операторов. Однако они имеют место, и ниже мы рассмотрим возможные варианты их применения.
Пример 79
Задача.
Сформировать запрос для вывода имени преподавателя, который был принят на работу в университет ранее, чем кто-либо из преподавателей кафедры ИСТ.
|
|
Решение:
Очевидно, что на первом этапе необходимо получить множество, состоящее из дат приема на работу преподавателей кафедры ИСТ, а затем сравнить эти же даты у преподавателей других кафедр с полученным множеством.
SELECT TName
FROM Teacher WHERE DEPTName<>'ИСТ'
AND DataHire<SOME
(SELECT DataHire
FROM Teacher WHERE DEPTName='ИСТ')
Результат реализации запроса:
Этот же запрос можно было реализовать и иначе
SELECT TName
FROM Teacher WHERE DEPTName<>'ИСТ'
AND DataHire<
(SELECT MAX(DataHire)
FROM Teacher WHERE DEPTName='ИСТ')
Вы можете самостоятельно убедиться в идентичности результатов.
Предикат EXISTS.
При использовании EXISTS возвращаются не реальные данные, а булево значение TRUE или FALSE, в зависимости от того, существуют ли строки, соответствующие критериям, заданным в запросе с оператором EXISTS. Чаще всего EXISTS используется в коррелированных подзапросах.
Пример 80
Задача.
Сформировать запрос для вывода имени преподавателя, который не оценил ни одной работы студента.
Решение:
SELECT TName
FROM Teacher T
WHERE NOT EXISTS
(SELECT PIN
FROM Progress P
WHERE P.PIN=T.PIN)
Результат реализации запроса:
Задание 44
Сформировать запрос для вывода имени преподавателя, у которого в 5 семестре не было запланировано никакой нагрузки.
Задание 45
Сформировать запрос для вывода имени преподавателя, не работающего на кафедре ИСТ, у которого в 5 семестре было запланировано нагрузки меньше, чем у кого-либо из преподавателей кафедры ИСТ.
Задание 46
Сформировать запрос для вывода дисциплин, по которым не предусмотрены какие-либо виды отчетности, хотя были прочитаны лекции.
Задание 47
Сформировать запрос для вывода имен преподавателей, которые ведут только лекции.
|
|
Задание 48
Сформировать запрос для вывода имен преподавателей, которые ведут все виды занятий хотя бы по всем закрепленным за ними дисциплинам.
Вопросы для самоконтроля к лабораторной работе № 5
1. Что такое подзапрос?
2. В каких командах SQL могут быть использованы подзапросы?
3. Какой порядок выполнения подзапроса?
4. Когда невозможно использовать подзапрос?
5. Какой порядок выполнения коррелированных подзапросов?
6. В каких случаях подзапросы могут передать несколько строк в главное предложение?
7. Сколько раз выполняется основной запрос при реализации коррелированного подзапроса?
8. Где расположен подзапрос в логическом выражении предложения основного запроса: до оператора сравнения, после оператора сравнения?
9. Какие предложения допустимые для основного запроса, не могут использовать в подзапросе?
10. Какие существуют типы подзапросов?
11. В каких командах SQL могут быть использованы подзапросы?
12. В каких предложениях SELECT могут быть использованы подзапросы?
13. Какие предложения SELECT нельзя использовать в подзапросах?
14. Где должен находиться подзапрос?
15. Какие операторы сравнения работают с несколькими строками?
16. Какие операторы сравнения работают только с одной строкой?
17. В каких подзапросах вложенная команда SELECT выполняется первой?
18. Какой принцип работы коррелированного подзапроса?
19. Какие требования предъявляются к таблицам, над которыми выполняются операторы union?