Как выучить SQL с нуля: дорожная карта
SQL — один из самых благодарных навыков в IT: язык не меняется десятилетиями, выучивается за недели, а нужен везде — от аналитики до бэкенда. Эта статья — пошаговый план: что учить, в каком порядке, сколько это займёт и обо что чаще всего спотыкаются новички.
Отмечайте пройденные недели прямо в статье — прогресс сохранится в вашем браузере, и статья превратится в личный трекер.
Сколько времени это займёт
Реалистичные сроки при занятиях по 30–60 минут в день:
- 2 недели — уверенный SELECT: выборки с условиями, сортировка, агрегация. Уже достаточно, чтобы доставать данные для отчётов.
- 4–6 недель — базовый уровень: соединения таблиц, подзапросы, изменение данных. Это минимум, который спрашивают на собеседованиях стажёров и джунов.
- 2–3 месяца — уровень уверенного джуна: оконные функции, транзакции, понимание индексов.
Программировать уметь не нужно: SQL — декларативный язык, вы описываете что хотите получить, а не как это сделать. Математики сверх школьной тоже не потребуется.
Главное правило на весь путь: 20% времени — чтение, 80% — написание запросов руками. SQL не выучивается глазами.
Неделя 1. Понять, с чем работаем, и написать первый SELECT
Цель недели — разобраться в устройстве баз данных и выполнить первые запросы.
- Что такое база данных и СУБД
- Реляционные базы данных и их структура: таблицы, записи, ключи
- Что такое SQL
- Базовый синтаксис SQL-запроса — первый SELECT
А вот и ваш первый запрос — он живой, нажмите «выполнить»:
MySQL 8.1SELECT name, category, price FROM products ORDER BY price DESC LIMIT 3;
Вы только что попросили у базы три самых дорогих товара — и она ответила. Поменяйте 3 на 5 или DESC на ASC и посмотрите, как изменится результат.
Устанавливать СУБД на компьютер для этого не нужно: в интерактивном курсе запросы выполняются прямо в браузере, а MySQL и PostgreSQL переключаются одной кнопкой.
Неделя 2. Фильтры и сортировка
Цель — научиться доставать из таблицы ровно те строки, которые нужны.
- Условный оператор WHERE
- Операторы IS NULL, BETWEEN, IN
- Поиск по шаблону: LIKE
- Сортировка: ORDER BY
- Исключение дубликатов: DISTINCT
- Ограничение выборки: LIMIT
После этой недели стоит начать решать задачи в тренажёре — по 2–3 в день, начиная с простых. Задачи дают то, чего не даёт чтение: умение переводить вопрос на русском в запрос на SQL.
Неделя 3. Агрегация: от строк к цифрам
Цель — отвечать на вопросы «сколько», «в среднем», «максимум по группе».
- Группировка: GROUP BY
- Агрегатные функции: COUNT, SUM, AVG, MIN, MAX
- Фильтрация групп: HAVING
- Применение функций
Здесь же стоит понять разницу WHERE и HAVING — это вопрос номер один на собеседованиях по этой теме.
Неделя 4. Соединение таблиц — сердце SQL
В реальных базах данные всегда разложены по нескольким таблицам, и почти каждый рабочий запрос соединяет две-три из них. Это самая важная неделя курса.
- Многотабличные запросы: JOIN
- INNER JOIN
- OUTER JOIN: LEFT, RIGHT, FULL
- Объединение результатов: UNION
Не торопитесь: добейтесь, чтобы разница между INNER JOIN и LEFT JOIN стала очевидной на уровне интуиции. Дальше всё будет строиться на этом.
Неделя 5. Подзапросы, CTE и условная логика
Цель — собирать запросы из нескольких шагов.
- Подзапросы и коррелированные подзапросы
- Обобщённое табличное выражение: WITH — и наш разбор CTE с рекурсией
- Условная логика: CASE
Неделя 6. Изменение данных и создание таблиц
До этого момента вы только читали данные — теперь учимся их менять.
- Добавление данных: INSERT
- Обновление: UPDATE
- Удаление: DELETE — и чем DELETE отличается от TRUNCATE и DROP
- Создание таблиц, типы данных и ограничения
На этом базовый уровень закрыт: вы умеете доставать, считать, соединять и менять данные.
Вот запрос, который к этому моменту вы сможете не только прочитать, но и написать сами, — соединение таблиц, группировка и сортировка в одном флаконе:
MySQL 8.1SELECT u.country, COUNT(*) AS orders_count, ROUND(AVG(o.total_amount), 2) AS avg_check FROM orders o JOIN users u ON u.user_id = o.user_id GROUP BY u.country ORDER BY orders_count DESC;
Если каждая строчка здесь понятна — базовый SQL у вас в кармане.
Дальше: что отличает джуна от стажёра
Когда база уверенно сидит в руках, добавляйте темы, которые чаще всего звучат на собеседованиях уровня джун и выше:
- Оконные функции — уроки курса и разбор ROW_NUMBER, RANK и DENSE_RANK. Самая «дорогая» тема для аналитиков.
- Транзакции — уроки и статья про свойства ACID. Классика теоретических вопросов.
- Индексы — урок про индексы: что это и почему запросы ускоряются в сотни раз.
- Подготовка к собеседованию — раздел вопросы с собеседований с реальными задачами компаний.
Пять ошибок, которые тормозят новичков
- Читать без практики. Прочитанный синтаксис забывается за три дня, написанный руками запрос — остаётся. Любая тема без 5–10 решённых задач — непройденная тема.
- Начинать с установки СУБД. Можно потратить вечер на установку и настройку MySQL и перегореть до первого запроса. Начните в браузерном тренажёре, а локальную базу поставите, когда она реально понадобится.
- Зубрить функции списками. Сотни функций не нужны: 90% работы делают COUNT, SUM, AVG, COALESCE и пара строковых. Остальные ищутся в справочнике за минуту.
- Прыгать в оконные функции до JOIN. Модные темы без фундамента не усваиваются. Порядок недель выше выстроен не случайно.
- Учить «вообще», без цели. Сформулируйте, зачем вам SQL: пройти собеседование, автоматизировать отчёты, перейти в аналитику. Цель определяет, на чём делать упор и когда остановиться.
С чего начать прямо сейчас
План простой: откройте первый урок курса — он бесплатный, как и весь базовый курс, — и пройдите неделю 1. Закончите её — вернитесь сюда и поставьте первую галочку. Через шесть недель регулярных занятий у вас будет навык, который указывают требованием в каждой второй вакансии аналитика, тестировщика и бэкенд-разработчика.
А когда база будет пройдена, углубляться можно в продвинутых курсах: проектирование баз данных, оптимизация запросов и анализ данных в SQL.
Читайте по теме
Нормализация баз данных: нормальные формы простыми словами
1НФ, 2НФ и 3НФ на одном сквозном примере
ACID: 4 свойства транзакций в базах данных простыми словами
Атомарность, согласованность, изолированность, долговечность — на примере перевода денег
ROW_NUMBER, RANK и DENSE_RANK в SQL: отличия на одном примере
Три ранжирующие функции, один запрос — и разница видна