Две недели — достаточно, чтобы подготовиться к SQL-собеседованию на позицию Junior/Middle. Вот пошаговый план.
Неделя 1: Фундамент
День 1-2: SELECT, WHERE, ORDER BY
Основа всего. Убедитесь, что свободно пишете запросы с фильтрацией, сортировкой, LIKE, IN, BETWEEN, IS NULL.
SELECT * FROM orders
WHERE status IN ('shipped', 'delivered')
AND created_at >= '2024-01-01'
ORDER BY total_amount DESC
LIMIT 10;
День 3-4: JOIN
Самая частая тема на собеседованиях. Решайте задачи на INNER, LEFT, RIGHT JOIN. Обязательно разберите SELF JOIN.
День 5: GROUP BY + HAVING
Агрегатные функции: COUNT, SUM, AVG, MIN, MAX. Разница между WHERE и HAVING. Задачи на «найти дубликаты» и «посчитать по группам».
День 6-7: Подзапросы и CTE
Вложенные SELECT в WHERE, FROM, SELECT. Common Table Expressions (WITH). Решайте задачи на «второй максимум», «N-ная запись».
Неделя 2: Продвинутые темы
День 8-9: Оконные функции
ROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD, SUM OVER. Это то, что отличает Middle от Junior.
День 10: Работа с датами
Извлечение частей даты, разница между датами, группировка по месяцам/кварталам. Задачи на «последовательные дни активности».
День 11: Оптимизация
EXPLAIN, индексы, когда использовать EXISTS vs IN, почему SELECT * — плохая практика.
День 12-13: Практика на реальных задачах
Решайте задачи на SQL Trainer, LeetCode, HackerRank. Минимум 5-10 задач в день.
День 14: Повторение
Пройдите все задачи, которые вызвали трудности. Подготовьте ответы на теоретические вопросы:
- Что такое нормализация? (1NF, 2NF, 3NF)
- Что такое индекс и как он работает?
- ACID свойства транзакций
- Разница между DELETE и TRUNCATE
- Уровни изоляции транзакций
Частые ошибки на собеседовании
- Не тестируют edge cases — что если таблица пустая? Есть NULL?
- Пишут неоптимально — SELECT * вместо конкретных столбцов
- Не объясняют решение — интервьюер хочет понять ваш ход мысли
- Паникуют при ошибке — ошибки нормальны, важно как вы их исправляете
Ресурсы для подготовки
- SQL Trainer — 500+ задач с мгновенной проверкой
- LeetCode Database — задачи от реальных компаний
- PostgreSQL документация — лучший справочник по SQL