Программа курса
Модули проходятся по порядку: каждый следующий опирается на предыдущий.
Модуль 1. Основы баз данных и SQL
Как устроены реляционные базы, какие бывают типы данных и ключи, как писать читаемые запросы и менять структуру и содержимое таблиц.
- Зачем нужны СУБД и их виды (PostgreSQL, ClickHouse)Как устроены реляционные базы, что такое первичный и внешний ключи и чем PostgreSQL отличается от ClickHouse.Не пройдено
- Типы данных (числа, строки, даты, булевы)Какие типы данных есть в SQL, чем NULL отличается от нуля и пустой строки и как приводить одни типы к другим.Не пройдено
- Ключи (Primary, Foreign) и связи таблицЗачем аналитику разбираться в ключах, какими бывают первичные и внешние ключи и как устроены связи 1:1, 1:M и M:M.Не пройдено
- Стиль кода (форматирование, алиасы)Почему читаемость запроса важнее регистра ключевых слов и по каким правилам оформлять SQL.Не пройдено
- DML/DDLЧем DDL отличается от DML, как создавать и менять таблицы и представления, вставлять, обновлять и удалять данные и зачем нужны индексы.Не пройдено
- Дополнительные материалыТренажёр на Stepik, руководство по стилю SQL и онлайн-форматер запросов.Теория
- Вопросы с собеседованийРазбор пяти типичных вопросов: реляционная БД, PostgreSQL против ClickHouse, PK и FK, DROP/TRUNCATE/DELETE и индексы.Теория
Модуль 2. Базовый SQL-запрос
В каком порядке СУБД выполняет запрос, как выбрать нужные столбцы и убрать дубли, отфильтровать строки, не споткнуться о NULL и отсортировать результат.
- Порядок выполнения SQL-запросаПочему СУБД выполняет запрос не сверху вниз и откуда берутся ошибки «алиас не найден» и «нельзя использовать агрегат в WHERE».Не пройдено
- SELECT, FROM, DISTINCTДва оператора, без которых не обходится ни один запрос на чтение, алиасы колонок и удаление дублей через DISTINCT.Не пройдено
- Фильтрация: WHERE, операторы сравнения, IN, LIKE, BETWEENКак оставить в выборке только нужные строки: операторы сравнения, AND/OR/NOT и специальные операторы IN, LIKE и BETWEEN.Не пройдено
- Работа с NULLПочему NULL нельзя сравнивать через равно, как его искать через IS NULL и что происходит с ним в арифметике, агрегатах и сортировке.Не пройдено
- Сортировка ORDER BY и лимит LIMITКак упорядочить результат по одному или нескольким полям, взять топ-N строк и сделать постраничный вывод через LIMIT и OFFSET.Не пройдено
- Дополнительные материалыПамятка по порядку выполнения запроса и тема «Выборка данных» в тренажёре на Stepik.Теория
- Задачи с собеседованийПять разобранных задач: пересечение интервалов дат, порядок выполнения запроса и два способа получить уникальные строки.Теория
Модуль 3. Логика и преобразование данных
Как ветвить логику прямо в запросе через CASE WHEN, приводить значения к нужному типу и работать с датами и строками.
- CASE WHEN: условная логикаАналог if-else прямо в запросе: категории, флаги и метки без выгрузки данных наружу.Не пройдено
- Приведение типов: CAST и ::typeДва способа превратить значение в нужный тип, чем они отличаются и что происходит, когда преобразование невозможно.Не пройдено
- Работа с датами и строкамиDATE_TRUNC, EXTRACT и арифметика дат, а также длина, регистр, склейка и обрезка строк.Не пройдено
- Задачи с собеседований: датыРазбор классической задачи про пересечение интервалов дат и приведение строки к типу date.Теория
Модуль 4. Агрегирующие функции
Как свернуть множество строк в одно число, разложить итоги по группам через GROUP BY и HAVING и не ошибиться там, где в данных есть NULL.
- COUNT, SUM, AVG, MIN, MAXПять функций, которые сворачивают множество строк в одно число, и как считать сразу несколько показателей одним запросом.Не пройдено
- GROUP BY и HAVINGКак разложить итоги по группам и чем фильтр по группам отличается от фильтра по строкам.Не пройдено
- Нюансы с NULL в агрегацииЧем COUNT(*) отличается от COUNT(колонка), почему AVG делит не на все строки и как из-за этого врут отчёты.Не пройдено
- Практические заданияДевять заданий на данных учебной платформы — от простого COUNT до группировки с фильтром по группам.Не пройдено
- Дополнительные материалыТема «Запросы, групповые операции» в интерактивном тренажёре на Stepik.Теория
- Задачи с собеседований: агрегацияРазбор задач на группировку и агрегаты, которые дают на собеседованиях аналитикам.Теория
Модуль 5. Соединения таблиц
Пять видов JOIN и когда какой нужен, откуда берутся дубликаты строк, что делает NULL в ключе соединения и как соединить таблицу саму с собой.
- Виды JOININNER, LEFT, RIGHT, FULL и CROSS — что каждый из них оставляет в результате и как выбрать нужный.Не пройдено
- Дубликаты при джойнахОткуда берутся лишние строки после соединения, почему из-за них врут суммы и как этого избежать.Не пройдено
- NULL в JOINПочему строки с пустым ключом не соединяются ни с чем и что с этим делать.Не пройдено
- Самообъединения (Self Join)Как соединить таблицу саму с собой: иерархии, сравнение строк между собой и поиск дубликатов.Не пройдено
- Практические заданияДевять заданий на соединения таблиц учебной платформы — от простого JOIN до цепочки связанных запросов.Не пройдено
- Дополнительные материалыДве статьи о том, почему привычная картинка с пересекающимися кругами объясняет JOIN неверно, и тема про соединения на Stepik.Теория
- Задачи с собеседований: соединенияВосемь разобранных задач: зарплата выше руководителя, метрики кампаний, сколько строк вернёт каждый вид JOIN.Теория
Модуль 6. Объединение результатов: UNION и UNION ALL
Как склеить результаты нескольких запросов по вертикали, чем UNION отличается от UNION ALL и когда объединять, а когда соединять.
- Объединение результатов: UNION и UNION ALLКак склеить результаты нескольких запросов по вертикали, чем UNION отличается от UNION ALL и какие правила должны соблюдать обе части.Не пройдено
- Задачи с собеседований: UNIONЧем UNION отличается от UNION ALL и сколько строк получится при объединении двух таблиц.Теория
Модуль 7. Подзапросы и CTE
Запрос внутри запроса: где его можно поставить, чем от него отличается именованное выражение WITH и что выбирать в каких случаях.
- Вложенные запросыПодзапрос в WHERE, SELECT и FROM, разница между IN и EXISTS и чем опасен коррелированный подзапрос.Не пройдено
- CTE (WITH clause)Именованные промежуточные результаты, которые превращают нечитаемую матрёшку подзапросов в последовательность шагов.Не пройдено
- Когда использовать CTE, а когда подзапросКритерии выбора, один и тот же запрос тремя способами и правда про производительность CTE в PostgreSQL.Не пройдено
- Практические заданияПять комплексных заданий на данных платформы — соединения нескольких таблиц, условная агрегация и сводная таблица.Не пройдено
- Дополнительные материалыРазбор подзапросов в блоге Struchkov.dev.Теория
- Задачи с собеседований: подзапросы и CTEРазбор задач, где без вложенного запроса или именованного выражения не обойтись.Теория
Модуль 8. Оконные функции
Расчёты по группе строк без свёртки результата: ранжирование, сравнение с соседними строками, нарастающие итоги, скользящие средние и рамки окна.
- Виды оконных функций и для чего они нужныЧетыре семейства оконных функций и главное их свойство — считать по группе строк, не сворачивая результат.Не пройдено
- Концепция: PARTITION BY и ORDER BYИз чего состоит OVER(): как разбить строки на окна и зачем внутри окна нужен порядок.Не пройдено
- Ранжирование: ROW_NUMBER, RANK, DENSE_RANKТри функции нумерации, которые по-разному ведут себя при одинаковых значениях, плюс NTILE для квантилей.Не пройдено
- Доступ к соседним строкам: LAG и LEADКак достать значение из предыдущей или следующей строки и посчитать изменение к прошлому периоду.Не пройдено
- Агрегация в окне: нарастающий итог и скользящее среднееТе же SUM, AVG и COUNT, но с OVER() — накопительные итоги, доли от общего и сглаживание трендов.Не пройдено
- Рамки окна: ROWS BETWEEN и RANGE BETWEENКакие именно строки попадают в расчёт, чем ROWS отличается от RANGE и какая рамка работает по умолчанию.Не пройдено
- Оконные функции вместе с GROUP BYКак посчитать оконную функцию поверх агрегатов, почему работает SUM(SUM(...)) OVER() и где такой запрос ломается.Не пройдено
- Дополнительные материалыПамятка по оконным функциям, визуализатор JOIN и две статьи на Хабре.Теория
- Задачи с собеседований: оконные функцииОдиннадцать разобранных задач на ранжирование, нарастающие итоги, LAG/LEAD и удаление дублей.Теория
Модуль 9. Оптимизация запросов
Как прочитать план выполнения, когда индекс помогает, а когда мешает, и чем шардирование отличается от партицирования и репликации.
- Оптимизация запросов: о чём модульЧто входит в модуль и насколько эта тема нужна продуктовому аналитику.Теория
- План запроса и как читать EXPLAINЧто показывает EXPLAIN ANALYZE, какие строчки плана важны и как по ним понять, где запрос тормозит.Не пройдено
- ИндексыЧто такое индекс, какие бывают, когда он ускоряет запрос, а когда бесполезен или вреден.Теория
- Шардирование, партицирование, репликацияТри способа справиться с объёмом, скоростью и надёжностью — и чем они отличаются друг от друга.Теория
- Дополнительные материалыСтатьи на Хабре про индексы и план запроса и разбор партицирования, репликации и шардирования.Теория