SQL является одним из наиболее важных языков для работы с данными в Сети. Без SQL мы не смогли бы обмениваться данными настолько уверенным и мощным способом, как мы это делаем сегодня. Независимо от того, работаете ли вы с большими или маленькими данными, анализируете их, сохраняете или предоставляете доступ к ним, вероятно, вам нужно будет работать с SQL. И мы можем подтвердить его важность не только теоретически, но и на практике, представив некоторые исследования и статистики, которые показывают, как SQL используется в реальной жизни.

Я предлагаю вам свой roadmap, который поможет вам научиться работать SQL. Однако я хотел бы отметить, что SQL - это очень широкий и распространенный язык, и, к сожалению, невозможно освоить его полностью за короткое время. Чтобы стать настоящим экспертом в SQL, нужно много практиковаться и изучать различные аспекты языка на протяжении многих лет. Мой roadmap предлагает отличный старт для начала изучения SQL, поэтому я рекомендую вам приступить к обучению согласно моему плану. Продолжайте обучаться и практиковаться, и вы увидите результаты своих усилий уже в ближайшее время. Желаю вам успехов и удачного обучения!

Первые 10 поинтов карты советую изучать один за другим, ко всем остальным вы можете идти разными путями или же, предложенным мной.

  1. Основы реляционных баз данных:

    • Реляционная модель данных

    • Терминология (таблица, столбец, строка, ключ, связь)

    • Первичные и внешние ключи

    • Кардинальность связей

    • Нормализация баз данных

    • Денормализация баз данных

      Отличная статья у VK про реляционную модель на Хабре.

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

      Про первичные и внешние ключи есть хорошая документация на сайте Microsoft.

      Краткий разбор терминологии(стоит самостоятельно погуглить):

      • Таблица (Table): структура данных, которая содержит информацию в виде строк и столбцов, где каждый столбец представляет отдельное поле данных, а каждая строка - отдельную запись.

      • Столбец (Column): элемент таблицы, который хранит определенный тип данных, такой как числа, строки или даты, для каждой записи в таблице.

      • Строка (Row): отдельная запись в таблице, которая содержит значения полей данных в каждом столбце.

      • Ключ (Key): столбец или набор столбцов, который уникально идентифицирует каждую строку в таблице. Он может быть использован для поиска, обновления или удаления определенных строк.

      • Связь (Relationship): связь между двумя таблицами, которая устанавливается на основе значений ключевых полей. Она может быть один-к-одному, один-ко-многим и многие-ко-многим.

        Хороший курс на Stepik для введения в базы данных.

  2. Основы SQL:

    • История и структура SQL

    • Работа с базой данных (создание, удаление, изменение, подключение)

    • SELECT-запросы (основные операторы, UNION, INNER JOIN, OUTER JOIN, DISTINCT)

    • Операторы чтения и изменения данных (INSERT, UPDATE, DELETE)

    • Простые запросы (WHERE, ORDER BY, GROUP BY)

    • Ограничение результатов запроса (LIMIT)

    • Функции для работы со строками, числами и датами

    • Запросы на объединение таблиц (UNION, UNION ALL, INTERSECT, EXCEPT)

      Два бесплатных курса на Stepik изучающие приведенные выше запросы и не только:

      https://stepik.org/course/63054/

      https://stepik.org/course/132225/promo

      Youtube

  3. Сложные SQL-запросы:

  4. Базовые операции изменения данных:

    • INSERT

    • UPDATE

    • DELETE

      Операция INSERT используется для добавления новых данных в таблицу. Новая строка создается со значениями, которые указаны в команде. Пример:

      INSERT INTO employees (name, age, salary)
      VALUES ('John', 30, 50000);

      Это добавляет новую строку в таблицу employees с именем 'John', возрастом 30 и зарплатой 50000.

      UPDATE:
      Операция UPDATE позволяет изменить значения в существующих строках в таблице. Пример:

      UPDATE employees
      SET salary = 60000
      WHERE name = 'John';

      Это изменит зарплату для сотрудника с именем 'John' на 60000.

      DELETE:
      Операция DELETE позволяет удалить одну или более строк из таблицы. Пример:

      DELETE FROM employees
      WHERE name = 'John';

      Это удалит из таблицы employees все строки, где имя сотрудника равно 'John'.

  5. Работа с индексами:

    • Как работают индексы

    • Как и когда использовать индексы

    • Типы индексов (B-Tree, Hash, GIN/GiST)

    • Создание, изменение, удаление индексов

    • Композитные индексы

      Видосы про индексы в SQL:

      https://youtu.be/lAWQNcAEiKw

      https://youtu.be/SsOt1LENCfA

  6. DDL, DML и TCL:

    DDL (Data Definition Language) - это язык определения структуры базы данных. С его помощью можно создавать и удалять таблицы, индексы, ограничения, пользовательские типы данных и другие объекты базы данных.

    Некоторые команды DDL:

    • CREATE TABLE - создание таблицы

    • DROP TABLE - удаление таблицы

    • ALTER TABLE - изменение структуры таблицы

    • CREATE INDEX - создание индекса

    • DROP INDEX - удаление индекса

    • CREATE VIEW - создание представления

    • DROP VIEW - удаление представления

    DML (Data Manipulation Language) - это язык манипулирования данными в базе данных. С его помощью можно:

    • добавлять, изменять и удалять данные в таблицах;

    • выбирать данные из таблиц;

    • управлять транзакциями.

    Некоторые команды DML:

    • SELECT - выбор данных из таблиц

    • INSERT - добавление данных в таблицу

    • UPDATE - изменение данных в таблице

    • DELETE - удаление данных из таблицы

      TCL (Transaction Control Language) - это язык управления транзакциями в SQL. Он предоставляет основные операторы для работы с транзакциями, такие как COMMIT, ROLLBACK и SAVEPOINT.

      Оператор COMMIT используется для сохранения изменений в базе данных, сделанных в рамках транзакции. Оператор ROLLBACK используется для отмены всех изменений, сделанных в рамках транзакции. Оператор SAVEPOINT используется для создания точки сохранения в рамках транзакции, чтобы можно было откатить изменения после этой точки.

      Про все подробнее: https://www.geeksforgeeks.org/sql-ddl-dql-dml-dcl-tcl-commands/

  7. Настройка производительности:

    • Подготовка запроса (EXPLAIN, ANALYZE)

    • Оптимизация запросов (использование индексов, подзапросов, JOIN)

    • Работа с пулом соединений

    • Кэширование данных

    • Репликация баз данных

      Видос про подготовку запросов

      Статья про оптимизацию запросов на Хабре

      Документация с Microsoft и статья с Хабр про пул соединений:

      Кэширование данных - это временное хранение данных в памяти компьютера или на жестком диске, чтобы уменьшить время доступа к ним в будущем. Когда приложение запрашивает данные, они сначала проверяются в кеше. Если данные уже есть в кеше, то они считываются оттуда вместо того, чтобы загружаться с сервера базы данных, что значительно сокращает время ответа. Однако, кэширование данных может привести к проблемам с целостностью данных, если данные в базе изменяются, а изменения не отражаются в кеше.

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

      Подробнее про репликацию

      Про кэширование

  8. Управление правами доступа:

    • Создание пользователей и групп

    • Назначение прав доступа на таблицы, представления и процедуры

    • Удаление пользователей и групп

      Про все пункты здесь

  9. Процедуры, триггеры и функции:

    • Как создать и использовать процедуры и функции

    • Основные принципы триггеров

    • Хранимые процедуры и функции

    • Варианты вызова процедур и функций

    • Материализованные представления

      Про триггеры в SQL

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

      Основные принципы работы триггеров в SQL:

      1. Триггеры выполняются автоматически в ответ на определенные события в базе данных, без необходимости явного вызова.

      2. Триггеры работают в фоновом режиме, их выполнение не блокирует другие операции в базе данных.

      3. Триггеры могут использоваться для автоматического обновления данных в связанных таблицах или для выполнения других операций, например, отправки сообщений электронной почты.

      4. Триггеры уменьшают вероятность ошибок, связанных с человеческим фактором, так как автоматически выполняют заданные действия в ответ на определенные события в базе данных.

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

      6. Триггеры могут быть ограничены по времени выполнения или по количеству срабатываний, чтобы избежать перегрузки базы данных.

        Про варианты вызова процедур и функций

        Про представления в SQL

  10. Интерфейсы для работы с базой данных:

  11. Работа с NoSQL базами данных:

  1. ACID-свойства и транзакции:

  1. Резервное копирование и восстановление базы данных:

  1. Безопасность баз данных:

  1. Базы данных в облаке и распределенные СУБД:

  1. SQL и программирование:

  1. Основы работы с базами данных на уровне DevOps:

  1. Поддержка многопользовательской работы:

  1. Оптимизация запросов:

  • Использование индексов для оптимизации запросов на чтение

  • Использование материализованных представлений и хранимых процедур для оптимизации запросов на запись

  • Понимание как запросы работают на уровне машины, чтобы можно было сделать более эффективный код

    Про оптимизацию запросов на youtube:

    https://www.youtube.com/watch?v=3UUklsDdIsc

    https://www.youtube.com/watch?v=Lfn1sQKu3EU

  1. Обзор расширений:

  • Примеры расширений, доступных в PostgreSQL

  • Установка и использование расширений (hstore, PostGIS, pgAdmin)

  • Создание своих собственных расширений

  1. Системы реального времени:

  • Работа с системами реального времени, такими как Apache Kafka

  • Понимание как использовать SQL для работы с системами реального времени

  • Создание стримовых таблиц

    Основы Кафки

  1. Работа с JSON:

  1. Оптимизация скорости работы с большими объемами данных:

  • Использование различных методов компрессии данных (gzip, lzop, lz4)

  • Разбиение баз данных на таблицы (шардирование)

    • Перенос данных во временные таблицы для оптимизации запросов.

      Про GZIP на Хабре

      Шардирование

      Знание SQL может принести вам большие преимущества на рынке труда, так как специалисты с навыками в SQL всегда востребованы. Не останавливайтесь на достигнутом и продолжайте совершенствоваться в SQL, получайте новые знания и опыт, и вы станете великим разработчиком!

      Три хорошие книги на русском языке про SQL (выпущенные после 2020 года):

      1. "SQL для анализа данных: Учебное пособие" авторов Филиппа Кузьменко и Алексея Трофимова.

      2. "SQL. Руководство по использованию SQL-3" автора Сергея Симдянова.

      3. "SQL. Полный курс. Базовый уровень" авторов Ильи Кантора и Романа Мельникова.

      4. "SQL. Сборник рецептов". Автор Энтони Молинаро

      Хороших сайта для практики SQL:

      1. Sql‑ex — легенда. Без комментариев.

      2. SQLZOO — этот сайт предлагает обучающие материалы и задачи для практики SQL на всех уровнях сложности. Сайт доступен на нескольких языках, включая русский.

      3. HackerRank — HackerRank предлагает множество задач и квизов для практики SQL. Сайт на английском языке.

      4. LeetCode (https://leetcode.com/problemset/database/) — LeetCode знаменит своими задачами на алгоритмы, но у них также есть раздел для практики SQL с множеством интересных задач. Сайт на английском языке.

      5. Хорошие бесплатные курсы на Coursera:

        1. Learn SQL Basics for Data Science

        2. Анализ данных от Google( есть блок с SQL)

Данный Roadmap открыт для ваших изменений и добавлений! Пишите в комментарии свои предложения, каждое обещаю рассмотреть.

Спасибо за внимание! И да прибудет с вами Сила.

Комментарии (12)


  1. Akina
    00.00.0000 00:00

    Как вы считаете, сколько необходимо времени для изучения и понимания SQL?

    Кому-то пять минут. Кому-то полчаса. Встречал тех, кому потребовалось полдня. Если за сутки не удалось - то шанс понять крайне низок, так и останешься на уровне подмастерья. Бывает. Это, кстати, нормально - кому-то ведь реально не дано.


    1. Myclass
      00.00.0000 00:00

      Кстати на многих фирмах уже много раз убеждался, что да, есть очень много таких, которые вроде sql и понимают и каждый день его используют. Но. Настоящего желания делать с его помощью sql-ную красоту - такое есть только у единиц. У остальных - это так, нагромождение полей, имена для которых не подбирались и не продумывались по какой-нибудь системе, а обзывались так, как это ситуативно получалось. И одно и тоже поле в разных таблицах потом имеет 100 разныхвариантов. И таблицы и views - тоже самое - в названиях нет никакой логики, каждая таблица на свой манер, нет общностей. А значения в полях - это вообще вырви глаз. В одной фирме, где клиент-id как long должна была везде быть, так её как только не записывали в разных местах - и как текст, и как число с запятой, и при том с различной степенью точности после запятой итд. Но это везде так - уметь кое-что делать - это одно. С любовью это делать - это другое.


      1. Akina
        00.00.0000 00:00

        Ну я имел в виду не склонность к перфекционизму, а необходимость мыслить множествами и молиться на постулат "Итераций не существует". Собственно основной признак того, что кому-то не дано - это постоянные подзапросы, коррелированные и нет, там, где от них только вред и тормоза (особенно в списке вывода), и станет лучше, если заменить подзапросы на вульгарный джойн.


    1. vagon333
      00.00.0000 00:00
      +3

      Работаю с реляционными базами (ежедневный SQL) более 20 лет и все еще нахожу что-то новое/полезное.


  1. OvkHabr
    00.00.0000 00:00

    "SQL является одним из наиболее важных языков для работы с данными в Сети"

    Точно "в Сети"?


  1. Kisva
    00.00.0000 00:00
    +1

    Советую книгу: "Введение в системы баз данных", К. Дж. Дейт, - если кто хочет взглянуть на путь становления БД и SQL с самого высокого масштаба. Книга не для практического применения, а для осознания почему стало именно так, как есть.


  1. habrbanket
    00.00.0000 00:00
    +1

    Хороший roadmap, спасибо. Я бы добавил сюда блок по проектированию DWH, а также ETL/ELT. И раздел по многопользовательской работе подвинул бы поближе к началу. Многие начинающие (да и не только) инстинктивно работают с БД как с файлом в монопольном режиме, не понимая нюансов конкуренции.


    1. MockBeard
      00.00.0000 00:00

      Скорее куча полезных ссылок для программистов и админов, но куча полезная.


  1. codecity
    00.00.0000 00:00

    Для меня было самым сложным - научиться понимать 10-этажные запросы с (LEFT/RIGHT/CROSS) JOIN.


  1. hard_sign
    00.00.0000 00:00

    Хороший план.

    Я как раз дописываю книгу, содержание которой очень близко к этому плану :)


  1. velipre_xella
    00.00.0000 00:00

    Если ты не идёшь в микро-компанию, где нужен человек-швейцарский нож, то в roadmap много лишнего. Потому что в крупной компании со здоровым процессом разработки программист не будет админить базы , например. И тд и тп.

    На мой взгляд, нужно про хранимый код добавить, что это как минимум процедурное расширение для sql. И для каждой СУБД он будет свой.


  1. MichaelSkirda
    00.00.0000 00:00
    +3

    Просто пройдите первые 60 заданий по SELECT на https://www.sql-ex.ru/