SQL является одним из наиболее важных языков для работы с данными в Сети. Без SQL мы не смогли бы обмениваться данными настолько уверенным и мощным способом, как мы это делаем сегодня. Независимо от того, работаете ли вы с большими или маленькими данными, анализируете их, сохраняете или предоставляете доступ к ним, вероятно, вам нужно будет работать с SQL. И мы можем подтвердить его важность не только теоретически, но и на практике, представив некоторые исследования и статистики, которые показывают, как SQL используется в реальной жизни.
Я предлагаю вам свой roadmap, который поможет вам научиться работать SQL. Однако я хотел бы отметить, что SQL - это очень широкий и распространенный язык, и, к сожалению, невозможно освоить его полностью за короткое время. Чтобы стать настоящим экспертом в SQL, нужно много практиковаться и изучать различные аспекты языка на протяжении многих лет. Мой roadmap предлагает отличный старт для начала изучения SQL, поэтому я рекомендую вам приступить к обучению согласно моему плану. Продолжайте обучаться и практиковаться, и вы увидите результаты своих усилий уже в ближайшее время. Желаю вам успехов и удачного обучения!
Первые 10 поинтов карты советую изучать один за другим, ко всем остальным вы можете идти разными путями или же, предложенным мной.
Основы реляционных баз данных:
Реляционная модель данных
Терминология (таблица, столбец, строка, ключ, связь)
Первичные и внешние ключи
Кардинальность связей
Нормализация баз данных
Денормализация баз данных
Отличная статья у VK про реляционную модель на Хабре.
Подробное видео, которого будет достаточно для понимания нормализации баз данных.
Про первичные и внешние ключи есть хорошая документация на сайте Microsoft.
Краткий разбор терминологии(стоит самостоятельно погуглить):
Таблица (Table): структура данных, которая содержит информацию в виде строк и столбцов, где каждый столбец представляет отдельное поле данных, а каждая строка - отдельную запись.
Столбец (Column): элемент таблицы, который хранит определенный тип данных, такой как числа, строки или даты, для каждой записи в таблице.
Строка (Row): отдельная запись в таблице, которая содержит значения полей данных в каждом столбце.
Ключ (Key): столбец или набор столбцов, который уникально идентифицирует каждую строку в таблице. Он может быть использован для поиска, обновления или удаления определенных строк.
Связь (Relationship): связь между двумя таблицами, которая устанавливается на основе значений ключевых полей. Она может быть один-к-одному, один-ко-многим и многие-ко-многим.
Хороший курс на Stepik для введения в базы данных.
Основы 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/
Сложные SQL-запросы:
Функции агрегирования (SUM, AVG, MAX, MIN, COUNT)
Подзапросы (IN, EXISTS, ANY/ALL)
Вложенные запросы
Группировка и сортировка данных
Оконные функции
Базовые операции изменения данных:
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'.
Работа с индексами:
Как работают индексы
Как и когда использовать индексы
Типы индексов (B-Tree, Hash, GIN/GiST)
Создание, изменение, удаление индексов
Композитные индексы
Видосы про индексы в SQL:
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/
Настройка производительности:
Подготовка запроса (EXPLAIN, ANALYZE)
Оптимизация запросов (использование индексов, подзапросов, JOIN)
Работа с пулом соединений
Кэширование данных
Репликация баз данных
Статья про оптимизацию запросов на Хабре
Документация с Microsoft и статья с Хабр про пул соединений:
Кэширование данных - это временное хранение данных в памяти компьютера или на жестком диске, чтобы уменьшить время доступа к ним в будущем. Когда приложение запрашивает данные, они сначала проверяются в кеше. Если данные уже есть в кеше, то они считываются оттуда вместо того, чтобы загружаться с сервера базы данных, что значительно сокращает время ответа. Однако, кэширование данных может привести к проблемам с целостностью данных, если данные в базе изменяются, а изменения не отражаются в кеше.
Репликация баз данных - это процесс создания копий баз данных на нескольких серверах для обеспечения доступности и устойчивости данных в случае отказа одного из серверов. Репликация подразумевает трансляцию изменений из одного источника данных на несколько других серверов-адресатов. Это обеспечивает более быстрый доступ к данным и повышает отказоустойчивость. Однако, репликация может привести к проблемам синхронизации данных между копиями баз данных и требует дополнительных затрат на обработку и передачу данных.
Управление правами доступа:
Создание пользователей и групп
Назначение прав доступа на таблицы, представления и процедуры
Удаление пользователей и групп
Процедуры, триггеры и функции:
Как создать и использовать процедуры и функции
Основные принципы триггеров
Хранимые процедуры и функции
Варианты вызова процедур и функций
Материализованные представления
Триггеры в SQL — это специальные программы, которые запускаются автоматически при определенных событиях в базе данных, например, при вставке, обновлении или удалении данных в таблице.
Основные принципы работы триггеров в SQL:
Триггеры выполняются автоматически в ответ на определенные события в базе данных, без необходимости явного вызова.
Триггеры работают в фоновом режиме, их выполнение не блокирует другие операции в базе данных.
Триггеры могут использоваться для автоматического обновления данных в связанных таблицах или для выполнения других операций, например, отправки сообщений электронной почты.
Триггеры уменьшают вероятность ошибок, связанных с человеческим фактором, так как автоматически выполняют заданные действия в ответ на определенные события в базе данных.
Триггеры могут быть использованы для контроля целостности данных, включая проверку и ограничение значений, используемых в таблицах.
Триггеры могут быть ограничены по времени выполнения или по количеству срабатываний, чтобы избежать перегрузки базы данных.
Интерфейсы для работы с базой данных:
Работа с консольным интерфейсом (psql)
Управление базой данных с помощью GUI-клиентов
Работа с базой данных через API
Работа с NoSQL базами данных:
Различия между реляционными и NoSQL базами данных
Типы NoSQL баз данных (key-value, document, column-family, graph)
Операции чтения и записи данных в NoSQL базах данных
Использование NoSQL баз данных в сочетании с реляционными базами данных
ACID-свойства и транзакции:
Что такое ACID и почему это важно
Понятие транзакции
Работа с транзакциями (BEGIN, COMMIT, ROLLBACK)
Тайм-ауты транзакций и блокировки
Про ACID-свойства и транзакции:
https://www.youtube.com/watch?v=X5fgUaANKK4
https://struchkov.dev/blog/ru/transaction-jdbc-and-spring-boot/
Резервное копирование и восстановление базы данных:
Как создать резервную копию базы данных
Восстановление данных из резервной копии
Типы резервных копий (полная, инкрементальная, дифференциальная)
Видосы:
https://www.youtube.com/watch?v=1cr-F2leHek
Безопасность баз данных:
Защита от SQL-инъекций
Управление доступом и авторизацией
Шифрование данных в базе данных
Основы аудита баз данных
Базы данных в облаке и распределенные СУБД:
Основы облачных баз данных (AWS RDS, Google Cloud SQL)
Работа с распределенными СУБД (PostgreSQL XL, Greenplum, Apache Cassandra)
Кластеризация баз данных и горизонтальное масштабирование
Статья по кластеризации баз данных и горизонтальному масштабированию
SQL и программирование:
Связь SQL и языков программирования (Python, Java, C#)
Как использовать SQL в приложениях
Использование ORM-библиотек (Django ORM, Hibernate)
Работа с SQL-генераторами запросов
Две части статей на Хабр про использований Python для запросов в SQL
Основы работы с базами данных на уровне DevOps:
Использование конфигурационных файлов для развертывания базы данных в автоматическом режиме
Основы контейнеризации баз данных (Docker)
Использование инфраструктуры как код (Terraform, Ansible) для управления базами данных.
Документация Microsoft про использование конфигурационных файлов
Поддержка многопользовательской работы:
Работа с блокировками для поддержки многопользовательской работы
Концепция изоляции транзакций (READ COMMITTED, REPEATABLE READ, SERIALIZABLE)
Работа с параллельными запросами
Про настройку многопользовательской работы в SQL server
Оптимизация запросов:
Использование индексов для оптимизации запросов на чтение
Использование материализованных представлений и хранимых процедур для оптимизации запросов на запись
Понимание как запросы работают на уровне машины, чтобы можно было сделать более эффективный код
Про оптимизацию запросов на youtube:
Обзор расширений:
Примеры расширений, доступных в PostgreSQL
Установка и использование расширений (hstore, PostGIS, pgAdmin)
Создание своих собственных расширений
Системы реального времени:
Работа с системами реального времени, такими как Apache Kafka
Понимание как использовать SQL для работы с системами реального времени
Создание стримовых таблиц
Работа с JSON:
Работа с JSON в SQL
Работа с операторами JSONB
Создание собственных функций для работы с JSON
JSON в SQL:
https://www.youtube.com/watch?v=lBrUV73ULYU
https://youtube.com/playlist?list=PL5FkCIZQgbvMfdrxZO8tYJYc4wW3pA5bV
Оптимизация скорости работы с большими объемами данных:
Использование различных методов компрессии данных (gzip, lzop, lz4)
Разбиение баз данных на таблицы (шардирование)
Перенос данных во временные таблицы для оптимизации запросов.
Знание SQL может принести вам большие преимущества на рынке труда, так как специалисты с навыками в SQL всегда востребованы. Не останавливайтесь на достигнутом и продолжайте совершенствоваться в SQL, получайте новые знания и опыт, и вы станете великим разработчиком!
Три хорошие книги на русском языке про SQL (выпущенные после 2020 года):
"SQL для анализа данных: Учебное пособие" авторов Филиппа Кузьменко и Алексея Трофимова.
"SQL. Руководство по использованию SQL-3" автора Сергея Симдянова.
"SQL. Полный курс. Базовый уровень" авторов Ильи Кантора и Романа Мельникова.
"SQL. Сборник рецептов". Автор Энтони Молинаро
Хороших сайта для практики SQL:
Sql‑ex — легенда. Без комментариев.
SQLZOO — этот сайт предлагает обучающие материалы и задачи для практики SQL на всех уровнях сложности. Сайт доступен на нескольких языках, включая русский.
HackerRank — HackerRank предлагает множество задач и квизов для практики SQL. Сайт на английском языке.
LeetCode (https://leetcode.com/problemset/database/) — LeetCode знаменит своими задачами на алгоритмы, но у них также есть раздел для практики SQL с множеством интересных задач. Сайт на английском языке.
Хорошие бесплатные курсы на Coursera:
Анализ данных от Google( есть блок с SQL)
Данный Roadmap открыт для ваших изменений и добавлений! Пишите в комментарии свои предложения, каждое обещаю рассмотреть.
Спасибо за внимание! И да прибудет с вами Сила.