SQL (Structured Query Language) — универсальный язык для работы с реляционными базами данных, без знания которого сложно представить себе должность backend‑разработчика, аналитика данных или QA-инженера. На собеседованиях по любой из этих специальностей вопросы по SQL являются обязательным этапом оценки технических навыков.
Цели этой статьи:
- Показать ключевые категории вопросов по SQL, которые задают на рынке;
- Привести конкретные примеры заданий для Junior, Middle и Senior;
- Рассказать, как правильно оценивать кандидата и на что обращать внимание в ответах;
- Поделиться рекомендациями HR и техлидам по построению SQL‑блока интервью.
База резюме проверенных IT специалистов. Подписывайся на Telegram канал и получай только проверенных профессионалов из IT, digital, финансов и GameDev каждый день!
1. Структура блока SQL на собеседовании
- Теоретические вопросы (10–15 мин)
- Основные конструкции языка: SELECT, INSERT, UPDATE, DELETE.
- JOIN‑ы: INNER, LEFT, RIGHT, FULL, CROSS.
- Группировка и агрегаты: GROUP BY, HAVING.
- Подзапросы, оконные функции.
- Практические задачи простого уровня (10–15 мин)
- Написание базового запроса на выборку.
- Сложение нескольких таблиц через JOIN.
- Простейшие агрегации (SUM, COUNT).
- Продвинутые кейсы для Middle/Senior (20–30 мин)
- Оконные функции (ROW_NUMBER, RANK).
- Оптимизация запроса: индексы, объяснение плана (EXPLAIN).
- Сложные подзапросы, CTE (WITH).
- Транзакции, уровни изоляции, блокировки.
- Домашнее задание или take‑home test (по договорённости)
- Полноценный скрипт миграции, аналитический отчёт, скрипт ETL.
2. Примеры вопросов для Junior‑уровня
2.1 SELECT и базовая фильтрация
Вопрос:
Дана таблица employees(id, name, department_id, salary).
— Выберите имена и зарплаты всех сотрудников из отдела с department_id = 2, отсортируйте по зарплате по убыванию.
Ожидаемый ответ:
sql
КопироватьРедактировать
SELECT name, salary
FROM employees
WHERE department_id = 2
ORDER BY salary DESC;
2.2 JOIN‑ы
Вопрос:
Есть таблицы employees и departments(department_id, department_name).
— Напишите запрос, который вернёт список сотрудников вместе с названием их отдела.
Ожидаемый ответ:
sql
КопироватьРедактировать
SELECT e.name, d.department_name
FROM employees e
INNER JOIN departments d
ON e.department_id = d.department_id;
2.3 Агрегация
Вопрос:
— Найдите среднюю зарплату по каждому отделу.
Ожидаемый ответ:
sql
КопироватьРедактировать
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id;
2.4 INSERT/UPDATE/DELETE
Вопрос:
— Добавьте нового сотрудника в таблицу employees.
— Повышение зарплаты на 10% для всех сотрудников отдела 3.
— Удаление сотрудников с зарплатой ниже 1000.
Ожидаемая практика: кандидат должен продемонстрировать базовые DML‑операции:
sql
КопироватьРедактировать
INSERT INTO employees (name, department_id, salary)
VALUES ('Ivan Petrov', 3, 1200);
UPDATE employees
SET salary = salary * 1.1
WHERE department_id = 3;
DELETE FROM employees
WHERE salary < 1000;
3. Примеры задач для Middle‑разработчиков
3.1 Подзапросы и CTE
Вопрос:
На основе таблицы orders(order_id, customer_id, order_date, total_amount):
— Найдите топ‑3 клиента по суммарному объёму заказов за последний год.
Ожидаемый ответ (с использованием CTE):
sql
КопироватьРедактировать
WITH yearly_totals AS (
SELECT customer_id, SUM(total_amount) AS total
FROM orders
WHERE order_date >= CURRENT_DATE - INTERVAL '1 year'
GROUP BY customer_id
)
SELECT customer_id, total
FROM yearly_totals
ORDER BY total DESC
LIMIT 3;
3.2 Оконные функции
Вопрос:
— Для каждой строки в orders получите порядковый номер заказа для данного клиента, упорядоченный по дате.
Ожидаемый ответ:
sql
КопироватьРедактировать
SELECT order_id, customer_id, order_date,
ROW_NUMBER() OVER (
PARTITION BY customer_id
ORDER BY order_date
) AS rn
FROM orders;
3.3 Оптимизация запросов
Вопрос:
— У вас есть сложный JOIN нескольких таблиц, он выполняется медленно. Какие шаги вы предпримете для оптимизации?
Ожидаемый план оценки:
- Проверить наличие и селективность индексов (EXPLAIN).
- Переписать JOIN‑ы с учётом фильтров.
- Использовать CTE или временные таблицы для промежуточных результатов.
- Оценить необходимость денормализации для самых горячих таблиц.
4. Примеры кейсов для Senior и аналитиков
4.1 Аналитический отчёт при больших объёмах
Задача:
Проект bigdata_sales(sale_id, product_id, city_id, sale_date, amount), миллионы записей.
— Постройте отчёт по среднему чеку для каждого города за месяц, но только там, где число продаж > 10 000.
Пример решения:
sql
КопироватьРедактировать
WITH city_month_stats AS (
SELECT
city_id,
DATE_TRUNC('month', sale_date) AS month,
COUNT(*) AS sales_count,
AVG(amount) AS avg_check
FROM bigdata_sales
GROUP BY city_id, DATE_TRUNC('month', sale_date)
)
SELECT city_id, month, avg_check
FROM city_month_stats
WHERE sales_count > 10000
ORDER BY month, avg_check DESC;
4.2 Управление транзакциями и изоляция
Вопрос:
— Объясните уровни изоляции в PostgreSQL и приведите пример проблемы (грязное чтение, неповторяющееся чтение) и способ её решения.
Ожидаемый ответ:
- READ UNCOMMITTED: грязные чтения.
- READ COMMITTED: нет грязных, возможны неповторяющиеся.
- REPEATABLE READ: стабильные снимки, no phantom reads.
- SERIALIZABLE: полная изоляция.
- Пример: повторяющееся чтение в READ COMMITTED при смене данных между двумя SELECT’ами, решение — REPEATABLE READ.
4.3 Архитектурные вопросы
Вопрос:
— Как вы выстроите хранение исторических данных (slowly changing dimensions) в хранилище данных?
Оценка:
Типы SCD (Type 1–3), таблицы фактов и измерений, инкрементные загрузки, использование partitioning.
5. Оценка кандидатов: чек‑лист
Совет: при оценке обращайте внимание не только на правильность синтаксиса, но и на понимание trade‑offs, умение выбирать подходящие инструменты и объяснять свои решения.
Заключение
SQL‑блок на собеседовании — не формальность, а ключевой показатель технической зрелости кандидата. Грамотно подобранные вопросы и кейсы позволяют оценить не только умение писать запросы, но и глубину архитектурных знаний, навыки оптимизации, опыт работы с большими объёмами данных и soft‑skills (структурированное мышление, коммуникация). Также обязательно адаптируйте сложность задач под уровень — от элементарных SELECT для Junior до оконных функций и транзакций для Senior.
Следуя этому гайду, HR‑менеджеры и техлиды смогут проводить объективную, прозрачную и эффективную оценку SQL‑компетенций кандидатов, что заметно повысит качество подбора и ускорит процесс найма.
Мы - ИТ кадровое агентство, которое поможет вам найти разработчиков за менее чем 2 недели. Свяжитесь с нами уже сегодня, чтобы узнать, как мы можем помочь масштабировать ваш следующий проект. Мы гарантируем поиск самого сильного кандидата, а не самого дорогого. За 10 лет мы закрыли более 5500 вакансий и собрали более 25 команд с нуля. Вы можете ознакомиться с отзывами наших клиентов о нашем рекрутинговом агентстве. Если вам нужны дополнительные референсы, напишите нам в Telegram.