SQLLab
Все статьи

Как научиться SQL с нуля: план обучения на 3 месяца

Пошаговый план изучения SQL с нуля за 3 месяца. Что учить, в каком порядке, как практиковаться, чего избегать. Для аналитиков и начинающих разработчиков.

22 марта 2026 г.·3 мин чтения·

SQL можно выучить за 3 месяца при регулярной практике. Не «знать синтаксис», а писать запросы уверенно — как инструмент, а не как экзаменационный материал.

Месяц 1: Основы

Неделя 1–2: SELECT и фильтрация

-- Это ваш первый месяц в одном запросе:
SELECT name, email, created_at
FROM users
WHERE created_at >= '2024-01-01'
  AND is_active = true
ORDER BY created_at DESC
LIMIT 10;

Что нужно освоить:

  • SELECT конкретных колонок и *
  • WHERE с условиями (=, !=, >, <, BETWEEN, IN, LIKE)
  • AND, OR, NOT
  • ORDER BY (ASC/DESC)
  • LIMIT и OFFSET

Неделя 3–4: Агрегаты и GROUP BY

SELECT
    department,
    COUNT(*)       AS employees,
    AVG(salary)    AS avg_salary,
    MAX(salary)    AS max_salary
FROM employees
GROUP BY department
HAVING COUNT(*) > 5
ORDER BY avg_salary DESC;

Что нужно освоить:

  • COUNT, SUM, AVG, MIN, MAX
  • GROUP BY: зачем и как работает
  • HAVING: отличие от WHERE
  • NULL: IS NULL, COALESCE

Месяц 2: Объединения и вложенные запросы

Неделя 1–2: JOIN

JOIN — самая важная тема. Потратьте на неё время.

-- INNER JOIN: только совпадения
SELECT u.name, o.amount
FROM users u
INNER JOIN orders o ON u.id = o.user_id;

-- LEFT JOIN: все пользователи, даже без заказов
SELECT u.name, COUNT(o.id) AS orders_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.name;

Освойте: INNER JOIN, LEFT JOIN, RIGHT JOIN, разницу между ними.

Неделя 3–4: Подзапросы и CTE

-- Подзапрос в WHERE
SELECT name FROM products
WHERE price > (SELECT AVG(price) FROM products);

-- CTE — то же самое, но читаемее
WITH avg_price AS (
    SELECT AVG(price) AS val FROM products
)
SELECT name FROM products, avg_price
WHERE products.price > avg_price.val;

Месяц 3: Продвинутый уровень

Оконные функции

SELECT
    name,
    salary,
    department,
    RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS dept_rank,
    AVG(salary) OVER (PARTITION BY department) AS dept_avg
FROM employees;

Оконные функции — ключевая тема для аналитических ролей. ROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD, SUM OVER.

Производительность

  • EXPLAIN ANALYZE — как читать план запроса
  • Индексы — когда они помогают
  • Частые антипаттерны: SELECT *, функции в WHERE, SELECT DISTINCT без причины

Частые ошибки при обучении

Читать вместо писать. Посмотрел запрос — понял, кажется. Попробовал написать — не выходит. Пишите каждый пример сами.

Прыгать между темами. Не идите к оконным функциям пока не освоили JOIN. Темы строятся на предыдущих.

Не разбирать ошибки. Ошибка PostgreSQL — это подсказка, не приговор. Читайте сообщения внимательно.

Большие перерывы. 3 дня без практики — и нужно вспоминать с нуля. Лучше 15 минут ежедневно.

Когда вы готовы к работе

Аналитику достаточно:

  • Уверенный SELECT с JOIN и GROUP BY
  • Подзапросы и CTE
  • Базовые оконные функции
  • Умение читать и писать запросы без подсказок

Разработчику нужно добавить:

  • DDL (CREATE TABLE, ALTER, DROP)
  • DML (INSERT, UPDATE, DELETE)
  • Транзакции и ACID
  • Индексы и оптимизация

3 месяца — реалистичный срок при 30–60 минутах практики в день.


Для практики по этому плану подойдёт SQL Lab — русскоязычный тренажёр с курсами по всем перечисленным темам, задачами с автопроверкой и ежедневными задачами для поддержания стрика.

Похожие статьи

Попробуй на практике

Тренажёр с реальными задачами — бесплатно и без регистрации

Открыть тренажёр →