SQLLab
Все статьи

SQL за месяц: реальный план для тех, кто начинает с нуля

Как выучить SQL за месяц: недельный план с конкретными темами и задачами. Для аналитиков и разработчиков без опыта в базах данных.

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

Месяц — реальный срок для базового SQL. Не «знать теорию», а писать запросы которые решают реальные задачи. Вот конкретный план.

Что значит «выучить SQL»

Базовый уровень — это когда вы можете:

  • Написать SELECT с фильтрацией, сортировкой и группировкой
  • Объединить две-три таблицы через JOIN
  • Ответить на аналитический вопрос: «сколько заказов по каждому пользователю за последний месяц»

Не нужно знать оконные функции, EXPLAIN или хранимые процедуры — это придёт позже.

Неделя 1: Основы SELECT

Цель: получать данные из одной таблицы.

Что изучить:

-- Выбрать все данные
SELECT * FROM users;

-- Выбрать конкретные колонки
SELECT name, email FROM users;

-- Фильтрация
SELECT name FROM users WHERE city = 'Москва';
SELECT name FROM users WHERE age >= 18 AND is_active = true;
SELECT name FROM users WHERE city IN ('Москва', 'СПб');
SELECT name FROM users WHERE name LIKE 'А%';

-- Сортировка и ограничение
SELECT name, created_at FROM users ORDER BY created_at DESC LIMIT 10;

Практика: 15–20 задач на SELECT и WHERE.

Неделя 2: Агрегаты и GROUP BY

Цель: считать, суммировать, группировать.

Что изучить:

-- Агрегатные функции
SELECT COUNT(*) FROM orders;
SELECT SUM(amount), AVG(amount), MAX(amount) FROM orders;

-- Группировка
SELECT city, COUNT(*) AS users_count
FROM users
GROUP BY city
ORDER BY users_count DESC;

-- Фильтрация групп
SELECT city, COUNT(*) AS cnt
FROM users
GROUP BY city
HAVING COUNT(*) > 100;

-- NULL
SELECT * FROM users WHERE phone IS NULL;
SELECT COALESCE(phone, 'не указан') FROM users;

Практика: 15–20 задач на GROUP BY.

Неделя 3: 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;

-- Несколько таблиц
SELECT u.name, p.name AS product, oi.quantity
FROM users u
JOIN orders o ON u.id = o.user_id
JOIN order_items oi ON o.id = oi.order_id
JOIN products p ON oi.product_id = p.id;

Практика: 15–20 задач с JOIN.

JOIN — самая важная тема. Потратьте больше времени если нужно.

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

Цель: решать составные задачи.

Что изучить:

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

-- CTE
WITH top_users AS (
    SELECT user_id, SUM(amount) AS total
    FROM orders
    GROUP BY user_id
    ORDER BY total DESC
    LIMIT 10
)
SELECT u.name, t.total
FROM top_users t
JOIN users u ON t.user_id = u.id;

Практика: 10–15 задач на подзапросы и CTE.

Как заниматься

30–60 минут в день. Регулярность важнее длинных сессий.

Не смотреть ответ сразу. Попытка решить задачу самостоятельно — это и есть обучение. Даже если занимает 10 минут и не получается.

Разбирать ошибки. ERROR: column "nme" does not exist — читайте внимательно, ошибка говорит что не так.

Повторять. В конце недели вернитесь к первым задачам. Решите быстрее — значит закрепилось.

Итог месяца

После 4 недель по 30–60 минут в день (≈ 30–60 часов практики) вы умеете:

  • SELECT с любыми условиями и фильтрами
  • GROUP BY и все агрегатные функции
  • INNER JOIN и LEFT JOIN
  • Простые подзапросы и CTE

Этого достаточно для стажёра-аналитика и большинства задач продакт-менеджера.

Следующий шаг — оконные функции: ROW_NUMBER, RANK, LAG/LEAD, SUM OVER.


Пройти этот план удобно на SQL Lab: структурированные курсы, задачи с автопроверкой, стрик и прогресс по темам — всё на русском языке с реальным PostgreSQL.

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

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

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

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