Сначала попробуйте сами: на собеседовании подсказки не будет.
Условие «все оценки от 4 до 5» эквивалентно «минимальная не меньше 4 и максимальная не больше 5». Это два агрегата в HAVING после группировки по студенту, без соединений и подзапросов.
Тот же результат даёт anti join: студенты, у которых NOT EXISTS оценка вне диапазона. Агрегатный вариант короче и легче читается.
SELECT student_id FROM exam GROUP BY student_id HAVING min(mark) >= 4 AND max(mark) <= 5