SQL
SQL — язык запросов к базам данных. Курс с нуля на SQLite с пометками для MySQL и PostgreSQL: таблицы, выборка, группировка, JOIN, ключи, индексы и транзакции.
SQL (Structured Query Language — язык структурированных запросов) — язык, на котором программы и люди разговаривают с базами данных: создают таблицы, добавляют строки, ищут, считают, меняют и удаляют данные. Читается «эс-кью-эль», часто говорят и «сиквел».
Базы данных стоят почти за каждым сайтом, интернет-магазином, учётной программой и мобильным приложением. Список товаров, заказы, пользователи, сообщения — всё это строки в таблицах, и достают их запросами SQL. Поэтому SQL нужен не только программистам: им пользуются аналитики, тестировщики, бухгалтеры и все, кому мало Excel.
Какие бывают СУБД
Базу данных хранит и обслуживает программа — СУБД (система управления базами данных). Самые распространённые бесплатные:
- SQLite — вся база в одном файле, сервер не нужен. Встроена в Android, браузеры и множество программ. С неё проще всего начать: установка занимает минуту.
- MySQL и её ветвь MariaDB — серверные СУБД, на них работает огромное число сайтов, в том числе на WordPress.
- PostgreSQL — серверная СУБД с широкой поддержкой стандарта SQL и множеством возможностей, частый выбор для новых проектов.
Есть и платные: Microsoft SQL Server, Oracle. Основа языка у всех одна — стандарт SQL, но у каждой СУБД свой диалект: где-то другое имя функции, где-то своя команда. Курс написан на SQLite, а там, где MySQL и PostgreSQL ведут себя иначе, это отмечено.
Что нужно для начала
- компьютер с Windows, Linux или macOS;
- программа
sqlite3(командная строка) или DB Browser for SQLite (окна и мышь) — как их поставить, рассказано в первом уроке; - знание программирования не обязательно: SQL описывает, что нужно получить, а не как это делать по шагам.
Как пройти курс
Уроки идут по порядку: от первой таблицы до связей, индексов и транзакций. Во всех уроках одна учебная база небольшого магазина — товары, покупатели и заказы, поэтому каждый следующий урок опирается на предыдущий. Набирайте запросы сами и сравнивайте ответ с таблицей в уроке: так SQL запоминается быстрее, чем при чтении.
После каждого урока — несколько вопросов для проверки, в конце — итоговый тест. В справочнике — короткие ответы на частые вопросы: как удалить дубликаты, выбрать первые 10 строк, проверить NULL, сделать резервную копию.
Курс с нуля
- 1.Базы данных и SQL — с чего начатьЧто такое база данных, таблица и СУБД, чем SQLite отличается от MySQL и PostgreSQL, как поставить sqlite3 или DB Browser for SQLite и выполнить первый запрос.
- 2.Создание таблицы и типы данныхКак создать таблицу командой CREATE TABLE, какие типы данных есть в SQLite, MySQL и PostgreSQL, что значат NOT NULL, DEFAULT и CHECK и как удалить таблицу.
- 3.Добавление строк — INSERTКак добавить в таблицу одну или несколько строк командой INSERT, что будет с пропущенными столбцами, как записать текст с апострофом и что значат частые ошибки.
- 4.Выборка данных — SELECT, WHERE, ORDER BY, LIMITКак выбрать из таблицы нужные столбцы и строки: условия WHERE с AND, OR, IN и BETWEEN, сортировка ORDER BY, первые строки через LIMIT и уникальные значения DISTINCT.
- 5.Подсчёт и группировка — COUNT, SUM, AVG, GROUP BY, HAVINGКак посчитать строки, сумму, среднее, минимум и максимум, разбить таблицу на группы через GROUP BY и отобрать группы условием HAVING.
- 6.Объединение таблиц — JOINКак собрать в одном ответе данные из нескольких таблиц: INNER JOIN и LEFT JOIN, условие ON, псевдонимы таблиц, JOIN с группировкой и поиск строк без пары.
- 7.Изменение и удаление — UPDATE и DELETEКак изменить значения в строках командой UPDATE и удалить строки командой DELETE, почему без WHERE меняется вся таблица и как проверить запрос до выполнения.
- 8.Ключи, связи и индексыЧто такое первичный и внешний ключ, как связать таблицы через REFERENCES, включить проверку внешних ключей в SQLite и ускорить поиск индексом CREATE INDEX.
- 9.ПодзапросыКак использовать результат одного запроса внутри другого: подзапрос в WHERE, IN и EXISTS, в списке столбцов и в FROM, а также запросы с WITH и ловушка NOT IN с NULL.
- 10.Транзакции — BEGIN, COMMIT, ROLLBACKЧто такое транзакция и зачем она нужна, как сохранить изменения командой COMMIT или отменить их через ROLLBACK, что такое автофиксация и чем SQLite, MySQL и PostgreSQL отличаются в мелочах.
Справочник
- NULL в SQL — как проверить на пустое значениеПочему WHERE столбец = NULL ничего не находит, как проверять IS NULL и IS NOT NULL, заменить NULL через COALESCE и чем NULL отличается от пустой строки.
- Автоинкремент в SQLite, MySQL и PostgreSQLКак сделать автоматически растущий id в SQLite, MySQL, PostgreSQL и SQL Server, узнать номер только что добавленной строки, сбросить счётчик и почему в номерах бывают дыры.
- Вставить или обновить — ON CONFLICT и ON DUPLICATE KEY UPDATEКак добавить строку, а если такая уже есть — обновить её одной командой (upsert) в SQLite, PostgreSQL и MySQL, как пропустить повтор и чем опасен REPLACE.
- Даты в SQL — текущая дата, прибавить день, разницаКак хранить даты в SQLite, получить текущую дату, прибавить дни и месяцы, посчитать разницу, выбрать строки за месяц и вывести дату как 15.09.2026 — в SQLite, MySQL и PostgreSQL.
- Как выбрать первые 10 строк — LIMIT, TOP, FETCH FIRSTКак вывести первые или последние N строк в SQLite, MySQL, PostgreSQL и SQL Server, листать результат страницами через OFFSET и взять первые строки в каждой группе.
- Как добавить столбец в таблицу — ALTER TABLEКак добавить столбец командой ALTER TABLE ADD COLUMN, задать значение по умолчанию, переименовать и удалить столбец, изменить его тип в SQLite, MySQL и PostgreSQL.
- Как объединить строки в SQLКак склеить текст из нескольких столбцов (|| и CONCAT), что делать с NULL, как собрать значения многих строк в одну через group_concat, GROUP_CONCAT и string_agg.
- Как переименовать таблицу в SQLКак переименовать таблицу в SQLite, MySQL, PostgreSQL и SQL Server, что происходит с индексами, ключами и представлениями и как переименовать базу данных.
- Как посчитать количество строк в SQLКак узнать число строк в таблице, по условию и по группам, чем COUNT со звёздочкой отличается от COUNT по столбцу и COUNT DISTINCT, как посчитать несколько условий сразу.
- Как создать пользователя MySQL и дать ему праваКак создать пользователя MySQL или MariaDB командой CREATE USER, выдать права на базу через GRANT, разрешить вход с другого компьютера, сменить пароль и удалить пользователя.
- Как удалить дубликаты в SQLКак найти повторяющиеся строки через GROUP BY и HAVING, удалить дубликаты с сохранением одной строки в SQLite, PostgreSQL и MySQL и не допустить их снова.
- Как удалить таблицу или все строки — DROP, DELETE, TRUNCATEЧем отличаются DROP TABLE, DELETE и TRUNCATE, как очистить таблицу в SQLite, MySQL и PostgreSQL, удалить базу данных и почему файл SQLite не уменьшается после удаления.
- Ошибка database is locked в SQLiteПочему SQLite пишет database is locked, как найти и закрыть подключение, которое держит базу, и как избежать ошибки: короткие транзакции, busy_timeout и режим WAL.
- Поиск по части текста — LIKEКак найти строки, где текст начинается, заканчивается или содержит слово: шаблоны LIKE с % и _, регистр букв в SQLite, MySQL и PostgreSQL, ILIKE, поиск знака процента.
- Резервная копия базы данных — SQLite, MySQL, PostgreSQLКак сделать резервную копию базы и восстановить её: .backup и VACUUM INTO в SQLite, mysqldump в MySQL и MariaDB, pg_dump и pg_restore в PostgreSQL.
- Условие в запросе — CASE WHENКак сделать «если — то — иначе» прямо в SQL: CASE WHEN в столбцах ответа, в подсчётах, сортировке и UPDATE, а также короткие IIF и IF в SQLite, SQL Server и MySQL.
- Чем LEFT JOIN отличается от INNER JOININNER JOIN оставляет только строки с парой, LEFT JOIN — все строки левой таблицы с NULL там, где пары нет. Примеры, поиск строк без пары и две частые ошибки с WHERE и COUNT.
- Чем WHERE отличается от HAVINGWHERE отбирает строки до группировки, HAVING — группы после неё. Примеры, порядок выполнения запроса, ошибка misuse of aggregate и что работает в разных СУБД.
Официальная документация
- Язык SQL в SQLite — https://www.sqlite.org/lang.html
- Документация MySQL — https://dev.mysql.com/doc/
- Документация PostgreSQL — https://www.postgresql.org/docs/current/