Базы данных
и язык SQL

Решение примера 5 на запросы с текущей датой

Пример 5. Вывести спектакли, в которых средний возраст актеров от 20 до 30 (использовать BETWEEN, Group by, Having, AVG, перекрестное соединение таблиц (CROSS JOIN), удобнее без слова JOIN, а с перечислением таблиц через запятую).

Запрос будет следующим:

SELECT play.Name as Name, AVG(YEAR(CURRENT DATE) - YEAR(ACTOR.BirthDate)) AS Age FROM play, team, actor WHERE team.PLAY_ID = play.Play_ID AND team.ACTOR_ID = ACTOR.Actor_ID GROUP BY Name HAVING AVG(YEAR(CURRENT DATE) - YEAR(ACTOR.BirthDate)) BETWEEN 20 AND 30

Оператор HAVING применяется вместе с агрегатной функцией AVG, и только после применения такой конструкции благодаря предикату BETWEEN могут быть отобраны актёры соответствующего возраста. Функция YEAR() выбирает только значение года из текущей даты и даты рождения актёра, а для вычисления разницы (то есть возраста) используется оператор "минус".