🎯 Осталось несколько дней до конца месяца Поддержите SQLTest.online и помогите нам сохранить практику SQL бесплатной для всех. Пожертвовать сегодня →
SQL код скопирован в буфер обмена

Уроки SQL: бесплатный курс от основ до аналитики

Глав в курсе - 12, уроков - 74: от первого SELECT до соединений, оконных функций, изменения данных и производительности запросов. Каждый урок разбирает одну тему на примерах SQL и ведёт к практическим задачам на настоящих базах данных.

Найдите урок по теме или ключевому слову или начните с первой главы.

1 Введение в SQL

  1. 1.1 Введение в базы данных 8 мин

    База данных - организованное хранилище данных, управляемое СУБД. Узнайте типы БД, функции СУБД и зачем нужен SQL. Курс SQL с нуля.

  2. 1.2 Типы баз данных 15 мин

    Основные типы баз данных: реляционные, ключ-значение, документные, графовые, временных рядов и колоночные - отличия и сценарии применения.

  3. 1.3 Концепции реляционных баз данных 10 мин

    Основы реляционных баз данных: таблицы, столбцы, строки, первичные и внешние ключи и свойства транзакций ACID - с примерами.

  4. 1.4 Базовые типы данных 8 мин

    Типы данных в SQL определяют, какие значения можно хранить в столбце. Разберём числовые, строковые, временные и другие типы, а также правила выбора на практике.

  5. 1.5 Сложные типы данных 7 мин

    Краткий обзор типов SQL для данных со структурой: JSON, XML, массивы, ENUM и SET, BLOB, UUID, пространственные типы и VECTOR для AI-эмбеддингов.

  6. 1.6 Понятие NULL значений 6 мин

    Что означает NULL в реляционной базе данных, чем он отличается от 0, пустой строки и false, какие столбцы его допускают и почему логика становится трёхзначной.

  7. 1.7 Обзор SQL 8 мин

    SQL - это язык работы с реляционными базами данных. Разберём, как устроен SQL, какие у него подмножества и из чего состоит базовый запрос.

2 Извлечение данных - оператор SELECT

  1. 2.1 Выборка данных из таблицы 6 мин

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

  2. 2.2 Фильтрация данных 6 мин

    Условие WHERE в SQL фильтрует строки по условию. Изучите операторы сравнения, BETWEEN, IN, LIKE и правильную работу с NULL-значениями.

  3. 2.3 Объединение нескольких условий 7 мин

    Изучите логические операторы AND, OR и NOT в SQL WHERE, приоритет вычислений, скобки и практические примеры с NOT IN и NOT LIKE.

  4. 2.4 IS NULL и IS NOT NULL 6 мин

    Почему WHERE column = NULL ничего не находит, как работают IS NULL и IS NOT NULL и как NULL прячет строки в условиях с NOT, <> и NOT IN.

  5. 2.5 Псевдонимы столбцов 5 мин

    Псевдоним столбца в SQL - временное имя столбца в результате запроса. Ключевое слово AS, псевдонимы с пробелами и для вычислений, где их использовать.

  6. 2.6 Сортировка результатов 6 мин

    ORDER BY в SQL сортирует результат запроса. Сортировка по возрастанию и убыванию, по нескольким столбцам, по выражениям и псевдонимам, порядок NULL.

  7. 2.7 Ограничение результатов, LIMIT и OFFSET 5 мин

    LIMIT в SQL ограничивает число строк результата, а OFFSET пропускает строки. Топ-N, постраничный вывод, зачем нужен ORDER BY, а также TOP и FETCH FIRST.

  8. 2.8 Все вместе: WHERE, ORDER BY и LIMIT 6 мин

    WHERE, ORDER BY и LIMIT в одном запросе SQL. Обязательный порядок предложений, логический порядок выполнения, топ-N с фильтром и постраничный вывод.

3 Работа с функциями

  1. 3.1 Встроенные функции SQL 8 мин

    Разберитесь, как работают встроенные функции SQL в SELECT и WHERE, и научитесь применять их для анализа данных на примерах из Sakila.

  2. 3.2 Основные строковые функции 8 мин

    Изучите ключевые строковые функции SQL на примерах из Sakila: как очищать, объединять и извлекать текстовые данные в практических запросах.

  3. 3.3 Основные математические функции 8 мин

    Изучите основные математические функции SQL на примерах из Sakila: округление, модуль, степень, корень и практические сценарии вычислений.

  4. 3.4 Функции даты и времени 8 мин

    Функции даты и времени в SQL: текущая дата, части даты, добавление интервалов, разница между датами и форматирование. Примеры с NOW, DATE_ADD, DATEDIFF.

  5. 3.5 Условный оператор 7 мин

    CASE WHEN добавляет в SQL-запрос логику «если - то - иначе». Простой и поисковый CASE, категории и метки в SELECT, своя сортировка и условия в WHERE.

  6. 3.6 JSON-функции 8 мин

    Читайте значения из JSON-столбцов по пути, фильтруйте по ним строки, считайте элементы массивов и собирайте JSON с JSON_VALUE, ->>, JSON_OBJECT и JSON_ARRAYAGG.

4 Агрегатные функции и группировка

  1. 4.1 Базовые агрегатные функции 8 мин

    Разбираем основные агрегатные функции SQL на примерах Sakila: COUNT, SUM, AVG, MIN, MAX, различия COUNT(*), COUNT(column) и COUNT(DISTINCT ...).

  2. 4.2 Группировка данных 7 мин

    Разбираем GROUP BY: синтаксис, правила, примеры группировки по одному и нескольким столбцам, применение на Sakila.

  3. 4.3 Фильтрация агрегированных данных 7 мин

    Разбираем оператор HAVING: синтаксис, различия WHERE vs HAVING, фильтрация групп после агрегации, примеры на Sakila.

  4. 4.4 Условная агрегация 8 мин

    Условная агрегация считает несколько метрик одним SQL-запросом через SUM, COUNT и AVG от CASE WHEN. Шаблоны, частые ошибки и строки в столбцы (pivot).

  5. 4.5 Продвинутая агрегация 9 мин

    ROLLUP, CUBE и GROUPING SETS добавляют к результату GROUP BY промежуточные и общие итоги. Чем они отличаются, WITH ROLLUP в MySQL и функция GROUPING().

5 Работа с несколькими таблицами

  1. 5.1 Основы соединений (JOIN) в SQL 8 мин

    SQL JOIN объединяет строки нескольких таблиц по связанному столбцу. Как работает JOIN, условие ON и псевдонимы таблиц на примерах Sakila.

  2. 5.2 INNER JOIN - Соединение совпадающих строк 6 мин

    INNER JOIN в SQL возвращает только строки, у которых есть совпадение в обеих таблицах. Синтаксис, псевдонимы таблиц, соединение трёх таблиц и что теряется.

  3. 5.3 LEFT JOIN - Включение всех записей из левой таблицы 7 мин

    LEFT JOIN в SQL возвращает все строки левой таблицы и совпадающие строки правой, а где совпадений нет - NULL. Синтаксис, антисоединение и типичные ловушки.

  4. 5.4 RIGHT JOIN - Включение всех записей из правой таблицы 4 мин

    RIGHT JOIN в SQL возвращает все строки правой таблицы и совпадающие строки левой. Синтаксис, зеркальная связь с LEFT JOIN и когда его использовать.

  5. 5.5 FULL OUTER JOIN - Объединение всех данных из обеих таблиц 6 мин

    FULL OUTER JOIN в SQL возвращает все строки обеих таблиц, а где совпадения нет - NULL. Синтаксис и способ получить тот же результат в MySQL и MariaDB.

  6. 5.6 CROSS JOIN - Декартово произведение 5 мин

    CROSS JOIN в SQL возвращает все комбинации строк двух таблиц. Синтаксис, размер результата и как строить сетку отчёта и заполнять пропуски.

  7. 5.7 SELF JOIN - Соединение таблицы с самой собой 5 мин

    SELF JOIN в SQL соединяет таблицу с самой собой, чтобы сравнить строки или пройти по иерархии. Зачем нужны псевдонимы и как избежать повторных пар.

  8. 5.8 Практические сценарии и методы использования JOIN 8 мин

    Практические примеры SQL JOIN: несколько таблиц, агрегация после JOIN, поиск недостающих строк, завышенные суммы и потерянные строки внешних соединений.

  9. 5.9 Алгоритмы JOIN 9 мин

    Как СУБД выполняет соединения: nested loop, hash join и merge join. Как работает каждый алгоритм, когда планировщик его выбирает и как увидеть его в EXPLAIN.

  10. 5.10 Операции над наборами данных 8 мин

    Операции над наборами данных позволяют объединять, пересекать и вычитать результаты запросов. Разберем UNION, INTERSECT и EXCEPT на примерах Sakila.

6 Подзапросы и обобщенные табличные выражения (CTE)

  1. 6.1 Введение в подзапросы 7 мин

    Подзапрос - это SELECT внутри другого запроса. Разберем типы подзапросов, логику выполнения и Inline View на примерах Sakila.

  2. 6.2 Подзапросы в предложении WHERE 8 мин

    Подзапросы в WHERE помогают динамически фильтровать данные. Разберем IN, NOT IN, EXISTS, NOT EXISTS, ANY и ALL на примерах Sakila.

  3. 6.3 Коррелированные подзапросы 6 мин

    Коррелированный подзапрос в SQL использует значения внешнего запроса для каждой строки. Как он работает, сравнение с группой, EXISTS и производительность.

  4. 6.4 Общие табличные выражения (CTE) 8 мин

    CTE в SQL - именованный временный набор строк, заданный через WITH. Синтаксис CTE, сравнение с подзапросом, цепочки CTE и практические примеры анализа.

  5. 6.5 Рекурсивные CTE 9 мин

    Рекурсивный CTE в SQL обходит иерархии с WITH RECURSIVE. Якорная и рекурсивная части, путь по оргструктуре, ограничение глубины и защита от циклов.

  6. 6.6 Применение рекурсивных CTE 9 мин

    Практические примеры рекурсивных CTE: ряд дат для заполнения пропусков, итоги по поддереву категорий, разузлование BOM и поиск маршрутов в графе.

7 Оконные функции

  1. 7.1 Оконные функции 8 мин

    Оконные функции SQL считают по связанным строкам, не сворачивая их. OVER, PARTITION BY и ORDER BY, отличие от GROUP BY и доля от общего итога.

  2. 7.2 Использование ROW_NUMBER, RANK, DENSE_RANK и NTILE 8 мин

    Чем отличаются ROW_NUMBER, RANK, DENSE_RANK и NTILE в SQL: как каждая обрабатывает равные значения, когда какую выбрать, плюс PERCENT_RANK и CUME_DIST.

  3. 7.3 Оконные фреймы - управление границами окна 8 мин

    Рамка окна определяет, какие строки использует оконная функция. ROWS и RANGE, BETWEEN, UNBOUNDED, рамка по умолчанию, скользящее среднее и WINDOW.

  4. 7.4 Функции LAG, LEAD, FIRST_VALUE и LAST_VALUE 9 мин

    Разбираем функции LAG, LEAD, FIRST_VALUE и LAST_VALUE: синтаксис, типовые сценарии, сравнение строк без self join и важный нюанс LAST_VALUE с оконным фреймом.

8 Язык манипулирования данными (DML)

  1. 8.1 Оператор INSERT INTO 7 мин

    INSERT INTO в SQL добавляет в таблицу новые строки. Синтаксис со списком столбцов, вставка нескольких строк, INSERT ... SELECT, NULL, DEFAULT и ошибки.

  2. 8.2 Оператор UPDATE 7 мин

    UPDATE в SQL изменяет существующие строки. SET и WHERE, несколько столбцов, расчёт от текущего значения, обновление по другой таблице и безопасность.

  3. 8.3 Оператор DELETE 6 мин

    DELETE в SQL удаляет строки из таблицы. DELETE ... WHERE, удаление по другой таблице, ошибки внешних ключей, проверка перед удалением и DELETE vs TRUNCATE.

  4. 8.4 Транзакции в SQL 10 мин

    Транзакция SQL объединяет операторы в одно целое: выполняются все или ни один. COMMIT, ROLLBACK, SAVEPOINT, автокоммит и уровни изоляции.

9 Язык определения данных (DDL)

  1. 9.1 Оператор CREATE TABLE 9 мин

    CREATE TABLE в SQL создаёт таблицу. Типы данных, PRIMARY KEY, AUTO_INCREMENT, ограничения NOT NULL, UNIQUE, DEFAULT, CHECK и FOREIGN KEY.

  2. 9.2 Оператор ALTER TABLE 9 мин

    ALTER TABLE в SQL изменяет существующую таблицу. Как добавить, изменить, переименовать и удалить столбец, добавить и удалить ограничения в MySQL и PostgreSQL.

  3. 9.3 Операторы TRUNCATE и DROP TABLE 6 мин

    TRUNCATE в SQL очищает таблицу, DROP TABLE удаляет её. Чем они отличаются от DELETE: скорость, откат, автоинкремент и внешние ключи.

  4. 9.4 Временные таблицы 7 мин

    Временные таблицы в SQL хранят промежуточные результаты в пределах сессии. CREATE TEMPORARY TABLE, AS SELECT, сравнение с CTE и ловушки MySQL.

  5. 9.5 Представления (VIEW) 8 мин

    Разбираем представления SQL: синтаксис CREATE VIEW, отличия от таблиц и временных таблиц, обновляемость и практические сценарии на примерах Sakila.

  6. 9.6 Материализованные представления 9 мин

    Материализованное представление хранит результат запроса на диске и обновляется по команде. CREATE и REFRESH MATERIALIZED VIEW и замена в MySQL.

  7. 9.7 Нормализация баз данных 10 мин

    Нормализация разносит данные по связанным таблицам, чтобы каждый факт хранился один раз. Разбираем 1НФ, 2НФ, 3НФ, НФБК, аномалии и денормализацию.

10 Производительность и качество запросов

  1. 10.1 Лучшие практики читаемости и поддержки кода 8 мин

    Лучшие практики читаемого SQL: регистр ключевых слов, переносы и отступы, имена в snake_case, понятные псевдонимы, комментарии и чистка запутанного запроса.

  2. 10.2 Написание эффективных SQL-запросов 10 мин

    Эффективные SQL-запросы снижают нагрузку на сервер и ускоряют отчеты. Изучите практики фильтрации, JOIN, SARGable-условий и использования LIMIT.

  3. 10.3 Введение в SQL-индексы 10 мин

    Узнайте, что такое SQL-индексы, как они влияют на скорость SELECT-запросов и какие базовые правила помогут избежать типичных ошибок в производительности.

  4. 10.4 Как читать EXPLAIN 12 мин

    Разбираем EXPLAIN и EXPLAIN ANALYZE по шагам: типы доступа, порядок соединения таблиц, cost и rows, оценка и факт, признаки медленного SQL-запроса.

  5. 10.5 Как работает B-tree индекс 11 мин

    Разберитесь, как устроен B-tree индекс в SQL, почему он ускоряет поиск до логарифмической сложности и как использовать его в практических запросах.

  6. 10.6 Полнотекстовые индексы 10 мин

    Полнотекстовый индекс находит строки по словам в тексте, а LIKE '%слово%' читает всю таблицу. MATCH AGAINST в MySQL и полнотекстовый поиск в PostgreSQL.

11 Преобразование и манипулирование данными для анализа

  1. 11.1 Практическая обработка строк в SQL 10 мин

    Научитесь практически обрабатывать текстовые данные в SQL: очищать строки, извлекать домены email, формировать метки и проверять качество данных.

  2. 11.2 Практическое использование функций даты и времени для анализа данных 11 мин

    Научитесь практически применять функции даты и времени в SQL: строить дневные и месячные метрики, считать интервалы, выявлять сезонность и готовить отчеты.

12 Разбор задач

  1. 12.1 Самый быстрый вариант перелета 6 мин

    Разбор SQL-задачи: самый быстрый перелёт с одной пересадкой через самосоединение таблицы flights и арифметику интервалов в PostgreSQL.

  2. 12.2 Рассчитать среднюю заполняемость рейсов 7 мин

    Разбор SQL-задачи: средняя заполняемость мест по аэропортам и классам через LEFT JOIN, COUNT FILTER и два уровня агрегации в PostgreSQL.

  3. 12.3 Карта мест в самолете 5 мин

    Разбор SQL-задачи: схема мест в самолёте - номер места делится функциями rtrim и right, а буквы собираются в JSON-массив функцией json_agg.

  4. 12.4 N-я по величине зарплата 7 мин

    Как найти вторую или N-ю по величине зарплату в SQL: MAX с подзапросом, LIMIT OFFSET, DENSE_RANK, коррелированный подзапрос, дубли, NULL и отделы.

  5. 12.5 Поиск и удаление дубликатов 7 мин

    Как найти дубликаты в SQL через GROUP BY и HAVING, показать каждую копию оконной функцией, удалить дубли с сохранением одной строки и не допустить новых.

  6. 12.6 Топ-N строк в каждой группе 7 мин

    Топ-N строк в каждой группе в SQL: ROW_NUMBER с PARTITION BY, равные значения с RANK и DENSE_RANK, коррелированный подзапрос и LATERAL на данных Sakila.

  7. 12.7 Нарастающий итог 6 мин

    Нарастающий итог в SQL через SUM() OVER (ORDER BY): накопленная выручка по дням, итог с обнулением каждый год, ловушка ROWS и RANGE и решение без окон.

  8. 12.8 Пропуски и острова 7 мин

    Задача gaps and islands в SQL: группировка дат подряд приёмом с ROW_NUMBER, поиск пропусков с LEAD и самая длинная серия дней подряд для каждого клиента.

  9. 12.9 Pivot: строки в столбцы 7 мин

    Pivot в SQL - строки в столбцы: условная агрегация с SUM(CASE ...), разворот по месяцам, динамический pivot в MySQL, оператор PIVOT и обратный unpivot.