HR-блог про IT рекрутинг от ИТ Кадрового агентства

Вопросы на собеседовании по SQL: примеры для разных уровней и должностей

IT рекрутинг Вопросы для собеседования
SQL (Structured Query Language) — универсальный язык для работы с реляционными базами данных, без знания которого сложно представить себе должность backend‑разработчика, аналитика данных или QA-инженера. На собеседованиях по любой из этих специальностей вопросы по SQL являются обязательным этапом оценки технических навыков.
Цели этой статьи:
  • Показать ключевые категории вопросов по SQL, которые задают на рынке;
  • Привести конкретные примеры заданий для Junior, Middle и Senior;
  • Рассказать, как правильно оценивать кандидата и на что обращать внимание в ответах;
  • Поделиться рекомендациями HR и техлидам по построению SQL‑блока интервью.
База резюме проверенных IT специалистов. Подписывайся на Telegram канал и получай только проверенных профессионалов из IT, digital, финансов и GameDev каждый день!

1. Структура блока SQL на собеседовании

  1. Теоретические вопросы (10–15 мин)
  • Основные конструкции языка: SELECT, INSERT, UPDATE, DELETE.
  • JOIN‑ы: INNER, LEFT, RIGHT, FULL, CROSS.
  • Группировка и агрегаты: GROUP BY, HAVING.
  • Подзапросы, оконные функции.
  1. Практические задачи простого уровня (10–15 мин)
  • Написание базового запроса на выборку.
  • Сложение нескольких таблиц через JOIN.
  • Простейшие агрегации (SUM, COUNT).
  1. Продвинутые кейсы для Middle/Senior (20–30 мин)
  • Оконные функции (ROW_NUMBER, RANK).
  • Оптимизация запроса: индексы, объяснение плана (EXPLAIN).
  • Сложные подзапросы, CTE (WITH).
  • Транзакции, уровни изоляции, блокировки.
  1. Домашнее задание или 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 нескольких таблиц, он выполняется медленно. Какие шаги вы предпримете для оптимизации?
Ожидаемый план оценки:
  1. Проверить наличие и селективность индексов (EXPLAIN).
  2. Переписать JOIN‑ы с учётом фильтров.
  3. Использовать CTE или временные таблицы для промежуточных результатов.
  4. Оценить необходимость денормализации для самых горячих таблиц.

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.