GROUP BY NRecordBook

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?



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: