Backend-разработчики работают с базами данных каждый день: пишут миграции, оптимизируют запросы, проектируют схемы. Но их SQL — это не аналитический SQL. Им не нужно строить когортный анализ или рассчитывать retention. Им нужно другое.
Разберём, что именно проверять у backend-разработчиков и как HR может оценить это без глубоких технических знаний.
Чем SQL backend-разработчика отличается от SQL аналитика
| Аспект | Аналитик | Backend-разработчик |
|---|---|---|
| Основные задачи | Отчёты, метрики, дашборды | CRUD, транзакции, производительность приложения |
| Типичные запросы | Сложные SELECT | INSERT, UPDATE, DELETE + SELECT |
| Приоритет | Правильный результат | Скорость и надёжность |
| Инструменты | BI-инструменты, SQL IDE | ORM + raw SQL |
| Работа с индексами | Понимает зачем | Создаёт и управляет |
Что обязательно знать backend-разработчику
Основы (junior)
- CRUD операции:
SELECT,INSERT,UPDATE,DELETE JOIN:INNER,LEFT- Базовые индексы: что это, зачем, как создать
- Транзакции:
BEGIN,COMMIT,ROLLBACK - Понимание первичных и внешних ключей
Средний уровень (middle)
JOINвсех типов + самосоединения- Составные индексы, покрывающие индексы
EXPLAIN/EXPLAIN ANALYZE— умение читать план выполнения- N+1 проблема и как её избежать
- Уровни изоляции транзакций (хотя бы базово)
- Работа с
NULL - Оконные функции (базово)
Продвинутый уровень (senior)
- Оптимизация медленных запросов
- Партиционирование таблиц
- Блокировки и deadlocks — понимание причин и решений
- Connection pooling
- Репликация (хотя бы концептуально)
- Работа с большими объёмами данных (> 100 млн строк)
Вопросы для скрининга backend-разработчика
Junior-уровень
- «Что такое транзакция и зачем она нужна?»
- «Напишите запрос: получить всех пользователей и их последний заказ.»
- «Чем PRIMARY KEY отличается от UNIQUE?»
Middle-уровень
- «Что такое N+1 проблема? Как вы с ней сталкивались?»
- «Как вы поймёте, что запрос работает медленно и что с этим делать?»
- «Напишите INSERT, который не создаёт дубликат, если запись уже существует.»
Senior-уровень
- «Расскажите про уровни изоляции транзакций. В чём разница между READ COMMITTED и REPEATABLE READ?»
- «Что такое deadlock и как его предотвратить?»
- «Как вы будете хранить и запрашивать данные таблицы на 500 млн строк?»
Практические задачи для теста
Задача 1
Есть таблица users и таблица orders. Напишите запрос, который выводит список пользователей, у которых нет ни одного заказа.
Правильный ответ: LEFT JOIN ... WHERE orders.id IS NULL или NOT EXISTS.
Что проверяет: понимание LEFT JOIN и работа с NULL.
Задача 2
Напишите SQL для вставки нового пользователя. Если пользователь с таким email уже существует — обновите его имя.
Правильный ответ: INSERT ... ON CONFLICT (email) DO UPDATE SET name = ...
Что проверяет: знание upsert-операций.
Задача 3
Что не так с этим кодом? (показать пример с N+1 запросом в цикле)
Что проверяет: понимание производительности приложения.
На что обращать внимание во время собеседования
Хорошие знаки:
- Кандидат сам упоминает производительность («а как часто это будет выполняться?»)
- Знает про ORM, но понимает, когда нужен raw SQL
- Говорит о миграциях и версионировании схемы
- Упоминает конкретный опыт с реальными проблемами
Тревожные знаки:
- Не знает, что такое индекс
- Никогда не смотрел на EXPLAIN
- «Я всегда использую ORM, SQL не пишу» — нормально для junior, тревожно для middle+
Связка SQL с другими навыками
SQL для backend-разработчика неотрывен от выбора архитектуры. Хороший кандидат понимает:
- Когда использовать реляционную БД, а когда NoSQL
- Как структурировать схему, чтобы запросы были эффективными
- Как работает connection pool в его фреймворке
Эти темы можно затронуть в разговоре после технического теста. Если кандидат прошёл базовую SQL-проверку на sqllab.ru, следующий шаг — архитектурное интервью с нанимающим менеджером.
Итог
SQL для backend — это не про аналитику, а про надёжность и скорость. Проверяйте транзакции, индексы и понимание производительности. Кандидат, который умеет читать EXPLAIN и знает про N+1, принесёт больше пользы команде, чем тот, кто пишет красивые аналитические запросы.