Добро пожаловать

Учебник SQL

От простого к сложному — на реальных базах данных тренажёров. Каждая глава — одна идея, подкреплённая задачами в живом редакторе.

Аналогия

SQL — это Excel на стероидах. У вас есть таблицы (как листы), в них строки и столбцы. Вы говорите SQL-серверу, что хотите видеть, а он сам решает, как это взять. Не надо указывать «листай по строкам» — просто спросите.

Три базы — три сценария

В этом курсе мы будем работать с реальными учебными базами тренажёров:

  • petstore_db — интернет-магазин питомцев: pet, category, tag, user, order
  • library_v1 — библиотека книг и отзывов: book, review
  • taskmanager — менеджер задач: task, user, feedback

Как проходить урок

  1. Прочитайте аналогию и шпаргалку — не запоминайте, просто поймите идею.
  2. Откройте задачу через кнопку «Открыть в редакторе» — БД и SQL подставятся автоматически.
  3. Попробуйте сами. Если не получилось — «Подсказка», затем «Показать ответ».
  4. Дальше — следующая задача, задачи в главе идут от простого к сложному.

⚠️ Это read-only редактор. Только SELECT. Никаких DELETE, DROP, UPDATE — сервер откажется, даже если очень хочется. Данные сбрасываются каждую ночь, так что «сломать» их можно только на несколько часов.

Глава 1

SELECT — основы

Самая базовая команда. «Покажи мне данные из таблицы». Больше ничего — только «дай посмотреть».

Аналогия

Представьте меню в ресторане. SELECT — это сказать официанту: «Принесите мне вот эти блюда». Вы не готовите — просто выбираете из того, что есть.

Шпаргалка

SELECT * FROM pet;           -- все колонки
SELECT name FROM pet;        -- только колонка name
SELECT name, status FROM pet; -- две колонки
1.1

Все питомцы

БД: petstore_db · Таблица: pet

Выведи все колонки и все строки из таблицы pet.

Подсказка
Звёздочка * означает «все колонки».
Ответ
SELECT * FROM pet;
1.2

Только имена

БД: petstore_db · Таблица: pet

Выведи только колонку name из таблицы pet.

Подсказка
Вместо * перечислите нужные колонки через запятую. Здесь одна.
Ответ
SELECT name FROM pet;
1.3

Имя и статус

БД: petstore_db · Таблица: pet

Выведи две колонки: name и status из pet.

Ответ
SELECT name, status FROM pet;
Глава 2

WHERE — фильтрация

Покажет только те строки, которые подходят под условие. Всё остальное отбросит.

Аналогия

Фильтр в интернет-магазине. Вы ставите галочку «только со скидкой» — и видите только их. WHERE — та же галочка, только текстом.

Шпаргалка

SELECT * FROM pet WHERE status = 'available';
SELECT * FROM pet WHERE category_id = 1;
SELECT * FROM pet WHERE name = 'Рекс';
2.1

Доступные питомцы

БД: petstore_db · Таблица: pet

Покажи питомцев, у которых status = 'available'.

Подсказка
Строки в SQL — в одинарных кавычках: 'available', не "available".
Ответ
SELECT * FROM pet WHERE status = 'available';
2.2

Только собаки

БД: petstore_db · Таблица: pet

В таблице category есть категория «Собаки» с id = 1. Покажи всех питомцев из этой категории.

Подсказка
Используйте колонку category_id, а не id.
Ответ
SELECT * FROM pet WHERE category_id = 1;
2.3

Найти Рекса

БД: petstore_db · Таблица: pet

Найди питомца с именем Рекс.

Ответ
SELECT * FROM pet WHERE name = 'Рекс';
Глава 3

ORDER BY + LIMIT

Сортировка и обрезание. «Топ-5», «последние 10», «сначала новые» — это они.

Аналогия

ORDER BY — это «разложи карточки по алфавиту». LIMIT — «покажи мне только первые 3». Вместе — топ-чарт.

Шпаргалка

SELECT * FROM book ORDER BY title;         -- по возрастанию
SELECT * FROM book ORDER BY title DESC;    -- по убыванию
SELECT * FROM book LIMIT 3;                 -- первые 3
SELECT * FROM book ORDER BY id DESC LIMIT 3; -- последние 3
3.1

Книги по алфавиту

БД: library_v1 · Таблица: book

Выведи все книги, отсортированные по названию (title) по возрастанию.

Подсказка
По возрастанию — это по умолчанию, ASC можно не писать. По убыванию — DESC.
Ответ
SELECT * FROM book ORDER BY title;
3.2

Первые 5 книг

БД: library_v1 · Таблица: book

Выведи только первые 5 книг (без сортировки — просто «как лежат»).

Ответ
SELECT * FROM book LIMIT 5;
3.3

Последние 3 книги

БД: library_v1 · Таблица: book

Выведи 3 книги с самыми большими id (сначала самая большая).

Подсказка
Сначала ORDER BY id DESC, потом LIMIT 3. Порядок важен!
Ответ
SELECT * FROM book ORDER BY id DESC LIMIT 3;
Глава 4

AND / OR / NOT

Комбинируем условия. Как в жизни: «хочу и то, и другое» или «или то, или это».

Аналогия

Анкета: «Возраст от 18, И есть водительские права» — AND. «Оплата картой ИЛИ наличными» — OR. «НЕ курю» — NOT.

Шпаргалка

-- И то, и другое (строже)
WHERE status = 'done' AND user_id = 1

-- Или то, или это (шире)
WHERE status = 'todo' OR status = 'in_progress'

-- Отрицание
WHERE NOT status = 'done'
4.1

Задачи Анны, выполненные

БД: taskmanager · Таблица: task

У Анны (user_id = 1) найди все задачи в статусе done.

Подсказка
Два условия через AND. Оба должны быть истинны одновременно.
Ответ
SELECT * FROM task WHERE user_id = 1 AND status = 'done';
4.2

В работе или в планах

БД: taskmanager · Таблица: task

Покажи все задачи, у которых статус — todo или in_progress.

Ответ
SELECT * FROM task WHERE status = 'todo' OR status = 'in_progress';
4.3

Всё, кроме done

БД: taskmanager · Таблица: task

Покажи все задачи, у которых статус не done.

Подсказка
Можно двумя способами: NOT status = 'done' или status != 'done' или status <> 'done'. Все три работают одинаково.
Ответ
SELECT * FROM task WHERE status != 'done';
Глава 5

IN / BETWEEN / LIKE

Три оператора для «списка», «диапазона» и «похожести». Часто удобнее, чем длинные AND/OR.

Аналогия

IN — «я выбираю из меню: пицца, паста или суши» (список).
BETWEEN — «бюджет от 1000 до 3000» (диапазон).
LIKE — «найди контакт, где имя начинается на "А"» (шаблон).

Шпаргалка

WHERE id IN (1, 3, 5)              -- id — одно из перечисленных
WHERE rating BETWEEN 4 AND 5       -- от 4 до 5 включительно
WHERE title LIKE 'В%'              -- начинается на «В»
WHERE title LIKE '%мир%'           -- содержит «мир»
WHERE title LIKE '_ойна и мир'      -- ровно 1 символ вместо _
5.1

Отзывы 4 и 5 звёзд

БД: library_v1 · Таблица: review

Покажи все отзывы с рейтингом 4 или 5.

Подсказка
Можно rating IN (4, 5) или rating BETWEEN 4 AND 5 или rating >= 4. Любой вариант — ок.
Ответ
SELECT * FROM review WHERE rating IN (4, 5);
5.2

Книги на «В»

БД: library_v1 · Таблица: book

Найди все книги, название которых начинается на «В».

Подсказка
Знак % заменяет любое количество символов. «Начинается на В» = 'В%'.
Ответ
SELECT * FROM book WHERE title LIKE 'В%';
5.3

Содержит «мир»

БД: library_v1 · Таблица: book

Найди книги, в названии которых встречается слово «мир» (в любом месте названия).

Подсказка
«Содержит» — это % с обеих сторон: '%мир%'.
Ответ
SELECT * FROM book WHERE title LIKE '%мир%';
🚧 Главы 6–16 — в разработке.
NULL, агрегаты, GROUP BY, HAVING, JOIN, подзапросы, CTE, оконные функции.