Теория баз данных


         

Операторы манипулирования данными - часть 8


SELECT Rl.ФИО FROM R1.R2

WHERE Rl. ФИО = R2ФИО AND Rl.Оценка = 5

GROOP BY Rl.ФИО HAVING COUNK*) = (SELECT COUNT(*)

FROM R3

WHERE R2.Группа = R3.Группа

GROOP BY R3.Группа)

Ну а теперь нам осталась последняя простейшая операция: надо заменить старый вложенный запрос, определявший отличников, получивших три пятерки на сессии, на новый универсальный запрос:

UPDATE R5

SET R5.Стипендия = 50%

WHERE R5.<WO IN (SELECT Rl.ФИО

FROM R1.R2

WHERE Rl. ФИО = Р2.ФИО AND Rl.Оценка = 5

GROOP BY Rl.ФИО

HAVING COUNT(*) = (SELECT COUNT(*)

FROM R3

WHERE R2.Группа = R3.Группа GROOP BY R3.Группа))

Вот какой сложный запрос мы построили. Это ведь практически один оператор, а какую сложную задачу он решает. Действительно, мощность языка SQL иногда удивляет даже профессионалов, кажется невозможно построить один запрос для решения конкретной задачи, но когда начинаешь поэтапно его конструировать — все получается. Самое сложное — это сделать переход от словесной формулировки задачи к представлению ее в терминах нашего SQL, но этот процесс сродни процессу алгоритмизации при решении задач традиционного программирования, а он всегда был самым трудным, творческим и неформализуемым процессом. Недаром на заре развития программирования известный американский специалист по программированию Дональд Е. Кнут озаглавил свой многотомный капитальный труд по теории и практике программирования «Искусство программирования для ЭВМ» («The art of computer programming»).




Содержание  Назад  Вперед