Напиши SQL-запрос для выборки всех пользователей старше 30 лет.

«Напиши SQL-запрос для выборки всех пользователей старше 30 лет.» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Предположим, есть таблица users с полями id, name и birth_date (дата рождения).

Запрос для вычисления возраста на летоисчисление:

SELECT id, name, birth_date
FROM users
WHERE EXTRACT(YEAR FROM AGE(CURRENT_DATE, birth_date)) > 30;

Функция AGE() (доступна в PostgreSQL) вычисляет интервал между датами. EXTRACT(YEAR FROM ...) извлекает количество полных лет из этого интервала.

Альтернативный, более универсальный запрос:

SELECT id, name, birth_date
FROM users
WHERE birth_date < CURRENT_DATE - INTERVAL '30 years';

Этот запрос находит всех, чья дата рождения была более 30 лет назад от текущей даты. Он работает в PostgreSQL, MySQL (с синтаксисом DATE_SUB(CURRENT_DATE, INTERVAL 30 YEAR)), и других СУБД с небольшими модификациями.

Пример с явным условием на год (менее точный):

SELECT id, name, birth_date
FROM users
WHERE EXTRACT(YEAR FROM CURRENT_DATE) - EXTRACT(YEAR FROM birth_date) > 30;

Этот вариант проще, но не учитывает месяц и день рождения, поэтому может быть неточным.