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

Будем считать наличие трех пятерок


Будем считать наличие трех пятерок по сессии признаком повышенной стипендии, + 50% к основной, наличие двух пятерок из сданных экзаменов и, отсутствие двоек и троек на сданных экзаменах — признаком повышения стипендии на 25%, наличие хотя бы одной двойки среди сданных экзаменов — признаком снятия или отсутствия стипендии вообще, то есть -100% надбавки. При отсутствии троек на сданных экзаменах назначим обычную стипендию с надбавкой 0%. Однако все эти изменения мы должны будем сделать отдельными операциями обновления.

Назначение повышенной стипендии:

UPDATE R5

SET R5.Стипендия = 50% WHERE R5.ФИО IN

(SELECT Rl.ФИО

FROM Rl

WHERE Rl.Оценка =5

GROOP BY Rl.ФИО

HAVING COUNT(*) =3 )

Назначение стипендии с надбавкой 25%:

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

WHERE R5.ФИО IN (SELECT Rl.ФИО FROM R1

WHERE Rl.ФИО NOT IN (SELECT А.ФИО FROM Rl A

WHERE А.Оценка <=3 OR А.Оценка IS NULL)

GROOP BY Rl.ФИО HAVING COUNT(*)>2 )

Назначение обычной стипендии:

UPDATE R5

SET R5.Стипендия = 0% WHERE R5.ФИО IN (SELECT Rl.ФИО FROM Rl

WHERE Rl.Оценка >=4 AND Р1.ФИО NOT IN (SELECT А.ФИО FROM Rl A

WHERE А.Оценка <= 3 OR А.Оценка IS NULL) )

Снятие стипендии:

UPDATE R5

SET R5.Стипендия =-100% WHERE R5.ФИО IN

(SELECT Rl.ФИО

FROM Rl

WHERE Rl.Оценка <= 2 OR Rl.Оценка IS NULL)

Почему мы в первом запросе на обновление не использовали дополнительную проверку на отсутствие двоек, троек и несданных экзаменов, как мы сделали это при назначении следующих видов стипендии? Просто мы учли особенности нашей предметной области: у нас в соответствии с исходными данными не только 3 экзамена. Но если мы можем предположить, что число экзаменов может быть произвольным и изменяться от семестра к семестру, то нам надо изменить наш запрос. Запрос — это некоторый алгоритм решения конкретной задачи, которую мы формулируем заранее на естественном языке. И оттого, что наша задача решается всего одним оператором языка SQL, она не становится примитивной. Мощность языка SQL и состоит в том, что он позволяет одним предложением сформулировать ответы на достаточно сложные запросы, для реализации которых на традиционных языках понадобилось бы писать большую программу.

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