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 открыт для ваших изменений и добавлений! Пишите в комментарии свои предложения, каждое обещаю рассмотреть.
Спасибо за внимание! И да прибудет с вами Сила.
Комментарии (12)
OvkHabr
00.00.0000 00:00"SQL является одним из наиболее важных языков для работы с данными в Сети"
Точно "в Сети"?
Kisva
00.00.0000 00:00+1Советую книгу: "Введение в системы баз данных", К. Дж. Дейт, - если кто хочет взглянуть на путь становления БД и SQL с самого высокого масштаба. Книга не для практического применения, а для осознания почему стало именно так, как есть.
habrbanket
00.00.0000 00:00+1Хороший roadmap, спасибо. Я бы добавил сюда блок по проектированию DWH, а также ETL/ELT. И раздел по многопользовательской работе подвинул бы поближе к началу. Многие начинающие (да и не только) инстинктивно работают с БД как с файлом в монопольном режиме, не понимая нюансов конкуренции.
codecity
00.00.0000 00:00Для меня было самым сложным - научиться понимать 10-этажные запросы с (LEFT/RIGHT/CROSS) JOIN.
hard_sign
00.00.0000 00:00Хороший план.
Я как раз дописываю книгу, содержание которой очень близко к этому плану :)
velipre_xella
00.00.0000 00:00Если ты не идёшь в микро-компанию, где нужен человек-швейцарский нож, то в roadmap много лишнего. Потому что в крупной компании со здоровым процессом разработки программист не будет админить базы , например. И тд и тп.
На мой взгляд, нужно про хранимый код добавить, что это как минимум процедурное расширение для sql. И для каждой СУБД он будет свой.
MichaelSkirda
00.00.0000 00:00+3Просто пройдите первые 60 заданий по SELECT на https://www.sql-ex.ru/
Akina
Кому-то пять минут. Кому-то полчаса. Встречал тех, кому потребовалось полдня. Если за сутки не удалось - то шанс понять крайне низок, так и останешься на уровне подмастерья. Бывает. Это, кстати, нормально - кому-то ведь реально не дано.
Myclass
Кстати на многих фирмах уже много раз убеждался, что да, есть очень много таких, которые вроде sql и понимают и каждый день его используют. Но. Настоящего желания делать с его помощью sql-ную красоту - такое есть только у единиц. У остальных - это так, нагромождение полей, имена для которых не подбирались и не продумывались по какой-нибудь системе, а обзывались так, как это ситуативно получалось. И одно и тоже поле в разных таблицах потом имеет 100 разныхвариантов. И таблицы и views - тоже самое - в названиях нет никакой логики, каждая таблица на свой манер, нет общностей. А значения в полях - это вообще вырви глаз. В одной фирме, где клиент-id как long должна была везде быть, так её как только не записывали в разных местах - и как текст, и как число с запятой, и при том с различной степенью точности после запятой итд. Но это везде так - уметь кое-что делать - это одно. С любовью это делать - это другое.
Akina
Ну я имел в виду не склонность к перфекционизму, а необходимость мыслить множествами и молиться на постулат "Итераций не существует". Собственно основной признак того, что кому-то не дано - это постоянные подзапросы, коррелированные и нет, там, где от них только вред и тормоза (особенно в списке вывода), и станет лучше, если заменить подзапросы на вульгарный джойн.
vagon333
Работаю с реляционными базами (ежедневный SQL) более 20 лет и все еще нахожу что-то новое/полезное.