Содержание курса
Модуль 1. Введение: зачем дата-инженеру SQL и реляционная модель
7 уроков
1.
О курсе: как проходить обучение и канал «Логово Дата-Инженера»
↗
2.
Почему SQL — главный язык дата-инженера
↗
3.
Реляционная модель: таблицы, строки, столбцы, связи
↗
4.
Что такое СУБД и место PostgreSQL среди баз данных
↗
5.
Установка PostgreSQL и первое подключение через psql
↗
6.
Графические клиенты (pgAdmin, DBeaver) и как мы будем учиться
↗
7.
Декларативность SQL: мы говорим «что», а не «как»
↗
Модуль 2. Первые запросы: SELECT
7 уроков
1.
Структура запроса SELECT и порядок его частей
↗
2.
Выбор столбцов, звёздочка и псевдонимы через AS
↗
3.
Константы, выражения и вычисляемые столбцы
↗
4.
DISTINCT: убираем повторяющиеся строки
↗
5.
ORDER BY: сортировка результата
↗
6.
LIMIT и OFFSET: постраничная выборка
↗
7.
Комментарии, форматирование и как читать ошибки PostgreSQL
↗
Модуль 3. Фильтрация строк: WHERE
8 уроков
1.
WHERE: отбор строк по условию
↗
2.
Операторы сравнения и логические AND, OR, NOT
↗
3.
Скобки и приоритет логических операторов
↗
4.
BETWEEN, IN и проверка диапазонов и списков
↗
5.
LIKE и ILIKE: шаблоны для строк
↗
6.
NULL и трёхзначная логика: IS NULL, IS NOT NULL
↗
7.
Частые ловушки с NULL в условиях
↗
8.
Отбор по нескольким столбцам: типовые приёмы
↗
Модуль 4. Типы данных PostgreSQL
9 уроков
1.
Обзор типов данных: числа, строки, даты, булевы
↗
2.
Целые числа: smallint, integer, bigint и переполнение
↗
3.
Дробные числа: numeric против real и double precision
↗
4.
Строки: text, varchar, char — что и когда выбирать
↗
5.
Булев тип boolean и его особенности
↗
6.
Дата и время: date, time, timestamp, timestamptz
↗
7.
Приведение типов: CAST и оператор ::
↗
8.
Значение по умолчанию DEFAULT и роль NULL
↗
9.
Автоинкремент: serial и GENERATED ... AS IDENTITY
↗
Модуль 5. Функции и выражения
9 уроков
1.
Строковые функции: длина, регистр, обрезка пробелов
↗
2.
Конкатенация и форматирование строк
↗
3.
Подстроки, поиск и замена: substring, position, replace
↗
4.
Числовые функции и округление
↗
5.
COALESCE и NULLIF: обработка пропусков
↗
6.
CASE: условные выражения внутри запроса
↗
7.
Функции даты и времени: now, current_date, extract
↗
8.
Арифметика дат и интервалы
↗
9.
Разбор и форматирование дат: to_date, to_char, to_timestamp
↗
Модуль 6. Агрегация и группировка
9 уроков
1.
Агрегатные функции: count, sum, avg, min, max
↗
2.
COUNT(*) против COUNT(столбец) и поведение с NULL
↗
3.
GROUP BY: группировка строк по ключу
↗
4.
Группировка по нескольким столбцам
↗
5.
HAVING: фильтрация по группам
↗
6.
Порядок выполнения: WHERE против HAVING
↗
7.
Агрегаты с DISTINCT
↗
8.
Сбор значений: string_agg и array_agg
↗
9.
Группировка по выражению и типичные ошибки GROUP BY
↗
Модуль 7. Соединения таблиц (JOIN)
10 уроков
1.
Зачем нужны соединения и пара слов о нормализации
↗
2.
INNER JOIN: пересечение таблиц по ключу
↗
3.
LEFT JOIN: сохраняем все строки левой таблицы
↗
4.
RIGHT и FULL OUTER JOIN
↗
5.
Условие ON, USING и естественные соединения
↗
6.
Соединение по нескольким столбцам
↗
7.
Самосоединение таблицы с самой собой
↗
8.
CROSS JOIN и декартово произведение
↗
9.
Размножение строк при JOIN — главная ловушка
↗
10.
Анти-join и semi-join: EXISTS, NOT EXISTS, NOT IN
↗
Модуль 8. Подзапросы и обобщённые выражения (CTE)
9 уроков
1.
Скалярный подзапрос и подзапрос со списком в WHERE
↗
2.
IN, ANY и ALL с подзапросами
↗
3.
EXISTS и коррелированные подзапросы
↗
4.
Подзапрос в FROM: производная таблица
↗
5.
Подзапрос в списке SELECT
↗
6.
CTE через WITH: читаемые многошаговые запросы
↗
7.
Несколько CTE и их цепочки
↗
8.
Рекурсивные CTE: иерархии и графы
↗
9.
CTE против подзапросов: что и когда выбирать
↗
Модуль 9. Операции над множествами
6 уроков
1.
UNION и UNION ALL: склейка результатов
↗
2.
INTERSECT и EXCEPT: пересечение и разность
↗
3.
Совместимость столбцов в операциях над множествами
↗
4.
Сортировка и LIMIT поверх набора
↗
5.
VALUES как источник строк
↗
6.
Типовые задачи на операции над множествами
↗
Модуль 10. Оконные функции
10 уроков
1.
Зачем нужны оконные функции и чем они отличаются от GROUP BY
↗
2.
OVER, PARTITION BY и ORDER BY
↗
3.
Нумерация строк: ROW_NUMBER, RANK, DENSE_RANK
↗
4.
NTILE и деление на группы
↗
5.
LAG и LEAD: доступ к соседним строкам
↗
6.
FIRST_VALUE, LAST_VALUE и NTH_VALUE
↗
7.
Рамка окна: ROWS и RANGE
↗
8.
Накопительные итоги и скользящие средние
↗
9.
Агрегаты как оконные функции
↗
10.
Именованные окна через WINDOW
↗
Модуль 11. Изменение данных (DML)
8 уроков
1.
INSERT: добавление строк в таблицу
↗
2.
Множественная вставка и INSERT ... SELECT
↗
3.
UPDATE: изменение существующих строк
↗
4.
UPDATE из другой таблицы через FROM
↗
5.
DELETE и TRUNCATE: чем отличаются
↗
6.
RETURNING: получаем изменённые строки сразу
↗
7.
UPSERT: INSERT ... ON CONFLICT DO UPDATE
↗
8.
Безопасность изменений: транзакции в двух словах
↗
Модуль 12. Определение структуры (DDL)
9 уроков
1.
CREATE TABLE: столбцы и их типы
↗
2.
Ограничения NOT NULL и DEFAULT
↗
3.
Первичный ключ PRIMARY KEY
↗
4.
Внешний ключ FOREIGN KEY и ссылочная целостность
↗
5.
Ограничения UNIQUE и CHECK
↗
6.
ALTER TABLE: меняем структуру таблицы
↗
7.
DROP, RENAME и каскадное удаление
↗
8.
Временные таблицы и CREATE TABLE AS
↗
9.
Представления VIEW и материализованные представления
↗
Модуль 13. Ключи, целостность и нормализация
5 уроков
1.
Суррогатные и естественные ключи: что выбрать
↗
2.
FOREIGN KEY подробно: ON DELETE и ON UPDATE
↗
3.
Составные ключи и составной внешний ключ
↗
4.
CHECK и доменная логика на уровне базы
↗
5.
Нормализация на практике: 1NF, 2NF, 3NF
↗
Модуль 14. Индексы и производительность
10 уроков
1.
Что такое индекс и зачем он нужен
↗
2.
B-tree индекс: как он ускоряет поиск
↗
3.
EXPLAIN: читаем план выполнения запроса
↗
4.
EXPLAIN ANALYZE: реальные времена и строки
↗
5.
Seq Scan против Index Scan
↗
6.
Составные индексы и порядок столбцов в них
↗
7.
Частичные и функциональные индексы
↗
8.
Покрывающие индексы и INCLUDE
↗
9.
Почему индекс иногда не используется
↗
10.
Hash, GIN, GiST и BRIN — какой под какую задачу
↗
Модуль 15. Транзакции и параллелизм
8 уроков
1.
ACID и зачем вообще нужны транзакции
↗
2.
BEGIN, COMMIT и ROLLBACK
↗
3.
SAVEPOINT: частичный откат
↗
4.
Уровни изоляции транзакций
↗
5.
Аномалии: грязное, неповторяемое чтение и фантомы
↗
6.
Блокировки строк: SELECT ... FOR UPDATE и взаимоблокировки
↗
7.
MVCC в PostgreSQL: как живут версии строк
↗
8.
Идемпотентность операций записи
↗
Модуль 16. Продвинутые типы и работа с данными
9 уроков
1.
Массивы: создание, доступ и операции
↗
2.
JSON и JSONB: хранение полуструктурированных данных
↗
3.
Доступ к JSONB, операторы и индексация
↗
4.
Диапазонные типы и их операторы
↗
5.
enum и пользовательские типы
↗
6.
Тип UUID и зачем он дата-инженеру
↗
7.
Таймзоны глубже: timestamptz и AT TIME ZONE
↗
8.
generate_series: генерируем ряды строк
↗
9.
Введение в полнотекстовый поиск: tsvector и tsquery
↗
Модуль 17. Аналитические паттерны для дата-инженера
9 уроков
1.
Длинный и широкий формат данных: зачем и когда
↗
2.
Pivot через CASE и агрегат FILTER
↗
3.
crosstab из расширения tablefunc
↗
4.
GROUPING SETS, ROLLUP и CUBE
↗
5.
Дедупликация строк шаблоном ROW_NUMBER
↗
6.
Поиск пропусков и серий: gaps and islands
↗
7.
Когортный анализ средствами SQL
↗
8.
Календарные таблицы и заполнение пропусков в рядах
↗
9.
Инкрементальные витрины: считаем только новое
↗
Модуль 18. SQL в ETL и дата-платформе
8 уроков
1.
Место SQL в дата-платформе: ETL против ELT
↗
2.
Загрузка и выгрузка данных через COPY
↗
3.
Staging-таблицы и загрузка пачками
↗
4.
Идемпотентная загрузка: upsert и delete-insert
↗
5.
Партиционирование больших таблиц
↗
6.
Слои данных raw, cleansed, curated на SQL
↗
7.
Проверки качества данных запросами и ассертами
↗
8.
SQL против pandas и Spark: когда что выбирать
↗
Модуль 19. Программирование на стороне базы
8 уроков
1.
Функции на SQL и на PL/pgSQL
↗
2.
Параметры, переменные и возврат значения
↗
3.
Управляющие конструкции: IF и циклы
↗
4.
Возврат таблиц: RETURNS TABLE и SETOF
↗
5.
Триггеры и их типичные применения
↗
6.
Хранимые процедуры и управление транзакциями
↗
7.
Обработка ошибок через EXCEPTION
↗
8.
Когда логику держать в базе, а когда нет
↗
Модуль 20. Качество, доступ и эксплуатация
7 уроков
1.
Проверки качества данных запросами
↗
2.
Поиск аномалий, выбросов и дубликатов
↗
3.
Тестирование SQL: контрольные запросы и pgTAP
↗
4.
Системный каталог: information_schema и pg_catalog
↗
5.
Роли и права доступа: GRANT и REVOKE
↗
6.
Резервные копии и восстановление: обзор
↗
7.
Чек-лист код-ревью SQL-запроса
↗
Модуль 21. Итоговый проект
6 уроков
1.
Постановка задачи: витрина продаж от сырых данных к отчёту
↗
2.
Проектируем схему «звезда»: факты и измерения
↗
3.
DDL: создаём таблицы, ключи и ограничения
↗
4.
Загрузка и очистка данных: staging переходит в curated
↗
5.
Витрины и отчёты через оконные функции и агрегаты
↗
6.
Оптимизация, тесты и дорожная карта: что дальше
↗