SQL — один из навыков, которые проверяют почти на каждом собеседовании в IT, независимо от специализации. Вот карта того, что нужно знать к выходу на первую стажировку.
Уровень 1: База (конец 1 курса)
Это минимум, без которого нет смысла переходить дальше.
SELECT и фильтрация
SELECT name, salary
FROM employees
WHERE department = 'Engineering' AND salary > 100000;
Нужно понимать: =, !=, >, <, BETWEEN, IN, LIKE, IS NULL.
Агрегатные функции и GROUP BY
SELECT department, COUNT(*) as count, AVG(salary) as avg_salary
FROM employees
GROUP BY department
HAVING COUNT(*) > 5;
Это самый используемый паттерн в аналитике. GROUP BY + агрегация — основа 80% отчётных запросов.
Сортировка и ограничение
SELECT name, score
FROM exam_results
ORDER BY score DESC
LIMIT 10;
Уровень 2: Работа с несколькими таблицами (1–2 курс)
JOIN
Нужно твёрдо понимать все типы:
-- INNER JOIN: только совпадения
SELECT o.id, c.name
FROM orders o
JOIN customers c ON o.customer_id = c.id;
-- LEFT JOIN: все из левой таблицы + совпадения из правой
SELECT c.name, COUNT(o.id) as order_count
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id
GROUP BY c.name;
Контрольный вопрос: «Найдите клиентов без заказов». Если сразу написали LEFT JOIN + WHERE o.id IS NULL — уровень достаточный.
Подзапросы
SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
Уровень 3: Продвинутые техники (2 курс)
CTE (Common Table Expressions)
WITH top_customers AS (
SELECT customer_id, SUM(amount) as total
FROM orders
GROUP BY customer_id
ORDER BY total DESC
LIMIT 100
)
SELECT c.name, tc.total
FROM top_customers tc
JOIN customers c ON tc.customer_id = c.id;
CTE делает сложные запросы читаемыми. На практике используется постоянно.
Оконные функции
SELECT
name,
department,
salary,
AVG(salary) OVER (PARTITION BY department) as dept_avg,
salary - AVG(salary) OVER (PARTITION BY department) as diff_from_avg
FROM employees;
Оконные функции — один из самых частых вопросов на собеседованиях уровня junior/middle.
Нужно знать: ROW_NUMBER(), RANK(), DENSE_RANK(), LAG(), LEAD(), SUM() OVER, AVG() OVER.
Что спрашивают на стажировках
По статистике технических собеседований 2024 года, чаще всего встречаются:
- GROUP BY + агрегация — 90% собеседований
- JOIN (особенно LEFT JOIN) — 85%
- Подзапросы — 70%
- Оконные функции — 60% (даже на junior)
- CTE — 50%
Типичное задание: «У вас есть таблица транзакций. Найдите топ-3 клиента по сумме покупок за последние 30 дней в каждой категории товаров».
Для решения нужны: WHERE + DATE условие, GROUP BY, SUM, оконная функция RANK() OVER (PARTITION BY ...).
Как учиться эффективно
Не читайте учебник без практики. SQL — язык, его нужно писать. Минимум 30 минут практики в день работают лучше, чем 3 часа теории раз в неделю.
Используйте реальные датасеты. Абстрактные table1, col1 плохо тренируют интуицию. Работайте с данными, которые понимаете: продажи, пользователи, события.
Решайте задачи на leetcode/sql-ex.ru. После того как освоили синтаксис — переходите к задачам. Это единственный способ научиться думать запросами.
Изучите EXPLAIN ANALYZE. Когда запрос работает медленно — нужно понять почему. Это навык, который сразу выделяет вас среди других кандидатов на стажировку.
EXPLAIN ANALYZE
SELECT * FROM orders WHERE customer_id = 123;
Путь после университета
SQL нужен во всех IT-ролях, связанных с данными:
| Роль | Какой SQL нужен |
|---|---|
| Backend-разработчик | SELECT, JOIN, транзакции, индексы |
| Аналитик данных | Всё + оконные функции, CTE |
| Data Engineer | Всё + оптимизация, партиционирование |
| BI-разработчик | Всё + специфика конкретной СУБД |
| ML-инженер | SELECT, JOIN, агрегации для подготовки данных |
Хорошая новость: выучив SQL один раз на PostgreSQL, вы сможете работать с MySQL, SQLite, BigQuery, Redshift — синтаксис почти одинаковый.