Уроки SQL: бесплатный курс от основ до аналитики
Глав в курсе - 12, уроков - 74: от первого SELECT до соединений, оконных функций, изменения данных и производительности запросов. Каждый урок разбирает одну тему на примерах SQL и ведёт к практическим задачам на настоящих базах данных.
Найдите урок по теме или ключевому слову или начните с первой главы.
Уроки не найдены. Попробуйте другое слово.
1 Введение в SQL
-
1.1
Введение в базы данных
8 мин
База данных - организованное хранилище данных, управляемое СУБД. Узнайте типы БД, функции СУБД и зачем нужен SQL. Курс SQL с нуля.
-
1.2
Типы баз данных
15 мин
Основные типы баз данных: реляционные, ключ-значение, документные, графовые, временных рядов и колоночные - отличия и сценарии применения.
-
1.3
Концепции реляционных баз данных
10 мин
Основы реляционных баз данных: таблицы, столбцы, строки, первичные и внешние ключи и свойства транзакций ACID - с примерами.
-
1.4
Базовые типы данных
8 мин
Типы данных в SQL определяют, какие значения можно хранить в столбце. Разберём числовые, строковые, временные и другие типы, а также правила выбора на практике.
-
1.5
Сложные типы данных
7 мин
Краткий обзор типов SQL для данных со структурой: JSON, XML, массивы, ENUM и SET, BLOB, UUID, пространственные типы и VECTOR для AI-эмбеддингов.
-
1.6
Понятие NULL значений
6 мин
Что означает NULL в реляционной базе данных, чем он отличается от 0, пустой строки и false, какие столбцы его допускают и почему логика становится трёхзначной.
-
1.7
Обзор SQL
8 мин
SQL - это язык работы с реляционными базами данных. Разберём, как устроен SQL, какие у него подмножества и из чего состоит базовый запрос.
2 Извлечение данных - оператор SELECT
-
2.1
Выборка данных из таблицы
6 мин
Изучите базовый SELECT в SQL: выбор всех и отдельных столбцов, порядок вывода и применение DISTINCT для удаления дубликатов.
-
2.2
Фильтрация данных
6 мин
Условие WHERE в SQL фильтрует строки по условию. Изучите операторы сравнения, BETWEEN, IN, LIKE и правильную работу с NULL-значениями.
-
2.3
Объединение нескольких условий
7 мин
Изучите логические операторы AND, OR и NOT в SQL WHERE, приоритет вычислений, скобки и практические примеры с NOT IN и NOT LIKE.
-
2.4
IS NULL и IS NOT NULL
6 мин
Почему WHERE column = NULL ничего не находит, как работают IS NULL и IS NOT NULL и как NULL прячет строки в условиях с NOT, <> и NOT IN.
-
2.5
Псевдонимы столбцов
5 мин
Псевдоним столбца в SQL - временное имя столбца в результате запроса. Ключевое слово AS, псевдонимы с пробелами и для вычислений, где их использовать.
-
2.6
Сортировка результатов
6 мин
ORDER BY в SQL сортирует результат запроса. Сортировка по возрастанию и убыванию, по нескольким столбцам, по выражениям и псевдонимам, порядок NULL.
-
2.7
Ограничение результатов, LIMIT и OFFSET
5 мин
LIMIT в SQL ограничивает число строк результата, а OFFSET пропускает строки. Топ-N, постраничный вывод, зачем нужен ORDER BY, а также TOP и FETCH FIRST.
-
2.8
Все вместе: WHERE, ORDER BY и LIMIT
6 мин
WHERE, ORDER BY и LIMIT в одном запросе SQL. Обязательный порядок предложений, логический порядок выполнения, топ-N с фильтром и постраничный вывод.
3 Работа с функциями
-
3.1
Встроенные функции SQL
8 мин
Разберитесь, как работают встроенные функции SQL в SELECT и WHERE, и научитесь применять их для анализа данных на примерах из Sakila.
-
3.2
Основные строковые функции
8 мин
Изучите ключевые строковые функции SQL на примерах из Sakila: как очищать, объединять и извлекать текстовые данные в практических запросах.
-
3.3
Основные математические функции
8 мин
Изучите основные математические функции SQL на примерах из Sakila: округление, модуль, степень, корень и практические сценарии вычислений.
-
3.4
Функции даты и времени
8 мин
Функции даты и времени в SQL: текущая дата, части даты, добавление интервалов, разница между датами и форматирование. Примеры с NOW, DATE_ADD, DATEDIFF.
-
3.5
Условный оператор
7 мин
CASE WHEN добавляет в SQL-запрос логику «если - то - иначе». Простой и поисковый CASE, категории и метки в SELECT, своя сортировка и условия в WHERE.
-
3.6
JSON-функции
8 мин
Читайте значения из JSON-столбцов по пути, фильтруйте по ним строки, считайте элементы массивов и собирайте JSON с JSON_VALUE, ->>, JSON_OBJECT и JSON_ARRAYAGG.
4 Агрегатные функции и группировка
-
4.1
Базовые агрегатные функции
8 мин
Разбираем основные агрегатные функции SQL на примерах Sakila: COUNT, SUM, AVG, MIN, MAX, различия COUNT(*), COUNT(column) и COUNT(DISTINCT ...).
-
4.2
Группировка данных
7 мин
Разбираем GROUP BY: синтаксис, правила, примеры группировки по одному и нескольким столбцам, применение на Sakila.
-
4.3
Фильтрация агрегированных данных
7 мин
Разбираем оператор HAVING: синтаксис, различия WHERE vs HAVING, фильтрация групп после агрегации, примеры на Sakila.
-
4.4
Условная агрегация
8 мин
Условная агрегация считает несколько метрик одним SQL-запросом через SUM, COUNT и AVG от CASE WHEN. Шаблоны, частые ошибки и строки в столбцы (pivot).
-
4.5
Продвинутая агрегация
9 мин
ROLLUP, CUBE и GROUPING SETS добавляют к результату GROUP BY промежуточные и общие итоги. Чем они отличаются, WITH ROLLUP в MySQL и функция GROUPING().
5 Работа с несколькими таблицами
-
5.1
Основы соединений (JOIN) в SQL
8 мин
SQL JOIN объединяет строки нескольких таблиц по связанному столбцу. Как работает JOIN, условие ON и псевдонимы таблиц на примерах Sakila.
-
5.2
INNER JOIN - Соединение совпадающих строк
6 мин
INNER JOIN в SQL возвращает только строки, у которых есть совпадение в обеих таблицах. Синтаксис, псевдонимы таблиц, соединение трёх таблиц и что теряется.
-
5.3
LEFT JOIN - Включение всех записей из левой таблицы
7 мин
LEFT JOIN в SQL возвращает все строки левой таблицы и совпадающие строки правой, а где совпадений нет - NULL. Синтаксис, антисоединение и типичные ловушки.
-
5.4
RIGHT JOIN - Включение всех записей из правой таблицы
4 мин
RIGHT JOIN в SQL возвращает все строки правой таблицы и совпадающие строки левой. Синтаксис, зеркальная связь с LEFT JOIN и когда его использовать.
-
5.5
FULL OUTER JOIN - Объединение всех данных из обеих таблиц
6 мин
FULL OUTER JOIN в SQL возвращает все строки обеих таблиц, а где совпадения нет - NULL. Синтаксис и способ получить тот же результат в MySQL и MariaDB.
-
5.6
CROSS JOIN - Декартово произведение
5 мин
CROSS JOIN в SQL возвращает все комбинации строк двух таблиц. Синтаксис, размер результата и как строить сетку отчёта и заполнять пропуски.
-
5.7
SELF JOIN - Соединение таблицы с самой собой
5 мин
SELF JOIN в SQL соединяет таблицу с самой собой, чтобы сравнить строки или пройти по иерархии. Зачем нужны псевдонимы и как избежать повторных пар.
-
5.8
Практические сценарии и методы использования JOIN
8 мин
Практические примеры SQL JOIN: несколько таблиц, агрегация после JOIN, поиск недостающих строк, завышенные суммы и потерянные строки внешних соединений.
-
5.9
Алгоритмы JOIN
9 мин
Как СУБД выполняет соединения: nested loop, hash join и merge join. Как работает каждый алгоритм, когда планировщик его выбирает и как увидеть его в EXPLAIN.
-
5.10
Операции над наборами данных
8 мин
Операции над наборами данных позволяют объединять, пересекать и вычитать результаты запросов. Разберем UNION, INTERSECT и EXCEPT на примерах Sakila.
6 Подзапросы и обобщенные табличные выражения (CTE)
-
6.1
Введение в подзапросы
7 мин
Подзапрос - это SELECT внутри другого запроса. Разберем типы подзапросов, логику выполнения и Inline View на примерах Sakila.
-
6.2
Подзапросы в предложении WHERE
8 мин
Подзапросы в WHERE помогают динамически фильтровать данные. Разберем IN, NOT IN, EXISTS, NOT EXISTS, ANY и ALL на примерах Sakila.
-
6.3
Коррелированные подзапросы
6 мин
Коррелированный подзапрос в SQL использует значения внешнего запроса для каждой строки. Как он работает, сравнение с группой, EXISTS и производительность.
-
6.4
Общие табличные выражения (CTE)
8 мин
CTE в SQL - именованный временный набор строк, заданный через WITH. Синтаксис CTE, сравнение с подзапросом, цепочки CTE и практические примеры анализа.
-
6.5
Рекурсивные CTE
9 мин
Рекурсивный CTE в SQL обходит иерархии с WITH RECURSIVE. Якорная и рекурсивная части, путь по оргструктуре, ограничение глубины и защита от циклов.
-
6.6
Применение рекурсивных CTE
9 мин
Практические примеры рекурсивных CTE: ряд дат для заполнения пропусков, итоги по поддереву категорий, разузлование BOM и поиск маршрутов в графе.
7 Оконные функции
-
7.1
Оконные функции
8 мин
Оконные функции SQL считают по связанным строкам, не сворачивая их. OVER, PARTITION BY и ORDER BY, отличие от GROUP BY и доля от общего итога.
-
7.2
Использование ROW_NUMBER, RANK, DENSE_RANK и NTILE
8 мин
Чем отличаются ROW_NUMBER, RANK, DENSE_RANK и NTILE в SQL: как каждая обрабатывает равные значения, когда какую выбрать, плюс PERCENT_RANK и CUME_DIST.
-
7.3
Оконные фреймы - управление границами окна
8 мин
Рамка окна определяет, какие строки использует оконная функция. ROWS и RANGE, BETWEEN, UNBOUNDED, рамка по умолчанию, скользящее среднее и WINDOW.
-
7.4
Функции LAG, LEAD, FIRST_VALUE и LAST_VALUE
9 мин
Разбираем функции LAG, LEAD, FIRST_VALUE и LAST_VALUE: синтаксис, типовые сценарии, сравнение строк без self join и важный нюанс LAST_VALUE с оконным фреймом.
8 Язык манипулирования данными (DML)
-
8.1
Оператор INSERT INTO
7 мин
INSERT INTO в SQL добавляет в таблицу новые строки. Синтаксис со списком столбцов, вставка нескольких строк, INSERT ... SELECT, NULL, DEFAULT и ошибки.
-
8.2
Оператор UPDATE
7 мин
UPDATE в SQL изменяет существующие строки. SET и WHERE, несколько столбцов, расчёт от текущего значения, обновление по другой таблице и безопасность.
-
8.3
Оператор DELETE
6 мин
DELETE в SQL удаляет строки из таблицы. DELETE ... WHERE, удаление по другой таблице, ошибки внешних ключей, проверка перед удалением и DELETE vs TRUNCATE.
-
8.4
Транзакции в SQL
10 мин
Транзакция SQL объединяет операторы в одно целое: выполняются все или ни один. COMMIT, ROLLBACK, SAVEPOINT, автокоммит и уровни изоляции.
9 Язык определения данных (DDL)
-
9.1
Оператор CREATE TABLE
9 мин
CREATE TABLE в SQL создаёт таблицу. Типы данных, PRIMARY KEY, AUTO_INCREMENT, ограничения NOT NULL, UNIQUE, DEFAULT, CHECK и FOREIGN KEY.
-
9.2
Оператор ALTER TABLE
9 мин
ALTER TABLE в SQL изменяет существующую таблицу. Как добавить, изменить, переименовать и удалить столбец, добавить и удалить ограничения в MySQL и PostgreSQL.
-
9.3
Операторы TRUNCATE и DROP TABLE
6 мин
TRUNCATE в SQL очищает таблицу, DROP TABLE удаляет её. Чем они отличаются от DELETE: скорость, откат, автоинкремент и внешние ключи.
-
9.4
Временные таблицы
7 мин
Временные таблицы в SQL хранят промежуточные результаты в пределах сессии. CREATE TEMPORARY TABLE, AS SELECT, сравнение с CTE и ловушки MySQL.
-
9.5
Представления (VIEW)
8 мин
Разбираем представления SQL: синтаксис CREATE VIEW, отличия от таблиц и временных таблиц, обновляемость и практические сценарии на примерах Sakila.
-
9.6
Материализованные представления
9 мин
Материализованное представление хранит результат запроса на диске и обновляется по команде. CREATE и REFRESH MATERIALIZED VIEW и замена в MySQL.
-
9.7
Нормализация баз данных
10 мин
Нормализация разносит данные по связанным таблицам, чтобы каждый факт хранился один раз. Разбираем 1НФ, 2НФ, 3НФ, НФБК, аномалии и денормализацию.
10 Производительность и качество запросов
-
10.1
Лучшие практики читаемости и поддержки кода
8 мин
Лучшие практики читаемого SQL: регистр ключевых слов, переносы и отступы, имена в snake_case, понятные псевдонимы, комментарии и чистка запутанного запроса.
-
10.2
Написание эффективных SQL-запросов
10 мин
Эффективные SQL-запросы снижают нагрузку на сервер и ускоряют отчеты. Изучите практики фильтрации, JOIN, SARGable-условий и использования LIMIT.
-
10.3
Введение в SQL-индексы
10 мин
Узнайте, что такое SQL-индексы, как они влияют на скорость SELECT-запросов и какие базовые правила помогут избежать типичных ошибок в производительности.
-
10.4
Как читать EXPLAIN
12 мин
Разбираем EXPLAIN и EXPLAIN ANALYZE по шагам: типы доступа, порядок соединения таблиц, cost и rows, оценка и факт, признаки медленного SQL-запроса.
-
10.5
Как работает B-tree индекс
11 мин
Разберитесь, как устроен B-tree индекс в SQL, почему он ускоряет поиск до логарифмической сложности и как использовать его в практических запросах.
-
10.6
Полнотекстовые индексы
10 мин
Полнотекстовый индекс находит строки по словам в тексте, а LIKE '%слово%' читает всю таблицу. MATCH AGAINST в MySQL и полнотекстовый поиск в PostgreSQL.
11 Преобразование и манипулирование данными для анализа
-
11.1
Практическая обработка строк в SQL
10 мин
Научитесь практически обрабатывать текстовые данные в SQL: очищать строки, извлекать домены email, формировать метки и проверять качество данных.
-
11.2
Практическое использование функций даты и времени для анализа данных
11 мин
Научитесь практически применять функции даты и времени в SQL: строить дневные и месячные метрики, считать интервалы, выявлять сезонность и готовить отчеты.
12 Разбор задач
-
12.1
Самый быстрый вариант перелета
6 мин
Разбор SQL-задачи: самый быстрый перелёт с одной пересадкой через самосоединение таблицы flights и арифметику интервалов в PostgreSQL.
-
12.2
Рассчитать среднюю заполняемость рейсов
7 мин
Разбор SQL-задачи: средняя заполняемость мест по аэропортам и классам через LEFT JOIN, COUNT FILTER и два уровня агрегации в PostgreSQL.
-
12.3
Карта мест в самолете
5 мин
Разбор SQL-задачи: схема мест в самолёте - номер места делится функциями rtrim и right, а буквы собираются в JSON-массив функцией json_agg.
-
12.4
N-я по величине зарплата
7 мин
Как найти вторую или N-ю по величине зарплату в SQL: MAX с подзапросом, LIMIT OFFSET, DENSE_RANK, коррелированный подзапрос, дубли, NULL и отделы.
-
12.5
Поиск и удаление дубликатов
7 мин
Как найти дубликаты в SQL через GROUP BY и HAVING, показать каждую копию оконной функцией, удалить дубли с сохранением одной строки и не допустить новых.
-
12.6
Топ-N строк в каждой группе
7 мин
Топ-N строк в каждой группе в SQL: ROW_NUMBER с PARTITION BY, равные значения с RANK и DENSE_RANK, коррелированный подзапрос и LATERAL на данных Sakila.
-
12.7
Нарастающий итог
6 мин
Нарастающий итог в SQL через SUM() OVER (ORDER BY): накопленная выручка по дням, итог с обнулением каждый год, ловушка ROWS и RANGE и решение без окон.
-
12.8
Пропуски и острова
7 мин
Задача gaps and islands в SQL: группировка дат подряд приёмом с ROW_NUMBER, поиск пропусков с LEAD и самая длинная серия дней подряд для каждого клиента.
-
12.9
Pivot: строки в столбцы
7 мин
Pivot в SQL - строки в столбцы: условная агрегация с SUM(CASE ...), разворот по месяцам, динамический pivot в MySQL, оператор PIVOT и обратный unpivot.