database_search Интерактивный тренажёр

SQL-детектив Расследование в базе данных

В городе SQL City произошло убийство. Улики разложены по таблицам: отчёты полиции, водительские права, протоколы допросов, абонементы спортклуба. Добраться до убийцы можно только запросами — SELECT, WHERE, JOIN. База настоящая, SQLite, и работает прямо в браузере.

9 Таблиц
10 000 Жителей в базе
17 Шагов разбора
🌐
В браузере
SQL-детектив — crime_scene_report
SELECT * FROM crime_scene_report
WHERE type = 'murder'
  AND city = 'SQL City'
  AND date = 20180115;
datetypecity
20180115murderSQL City

1 строка — с неё начинается расследование

touch_app Стенд

Соберите условие — выборка сузится

Это первый шаг расследования: в базе больше тысячи отчётов, а нужен один. Выберите вид преступления и город — запрос соберётся сам.

Интерактивный стенд требует JavaScript. Само расследование с настоящей базой открывается кнопкой ниже.

Здесь восемь отчётов для примера, в настоящей базе их 1228 — и там запросы выполняет настоящий SQLite, а не выпадающий список.

auto_awesome Возможности

Что осваивается по дороге

🔎

Выборка и отбор

С чего начинается любой запрос

  • SELECT
  • FROM
  • WHERE
  • DISTINCT
🧩

Неточный поиск

Когда известна лишь часть строки

  • LIKE '%…%'
  • BETWEEN … AND
  • UPPER() / LOWER()
📊

Агрегаты и сортировка

Ответы на вопросы «сколько» и «кто самый»

  • COUNT, MAX, MIN
  • AVG, SUM
  • ORDER BY … DESC
🔗

Связи между таблицами

Главное, ради чего базы называют реляционными

  • JOIN … ON
  • Первичный и внешний ключ
  • Псевдонимы таблиц
lightbulb О проекте

Запросы, за которыми есть смысл

Русская версия SQL Murder Mystery: расследование вместо упражнений «выведите список сотрудников»

database

База настоящая, не имитация

Внутри SQLite на 10 тысяч человек, 5 тысяч допросов и 20 тысяч отметок на мероприятиях. Запросы выполняет реальный движок в браузере: синтаксическая ошибка даёт настоящее сообщение об ошибке, а не «попробуй ещё».

ОГЭЕГЭБесплатно
route

Два входа

Знающим SQL — сразу условие задачи и пустое поле. Новичкам — разбор на 17 шагов, где по дороге объясняются SELECT, WHERE, LIKE, агрегаты, ORDER BY и JOIN

translate

Полностью по-русски

Переведены сюжет, показания, интерфейс и наполнение базы. Имена таблиц и столбцов оставлены английскими — это SQL, и в учебнике они будут такими же

lock_open

Без регистрации и без установки

Открывается по ссылке, работает офлайн после загрузки, ничего никуда не отправляет

rocket Начать

Как идёт расследование?

1

Найдите отчёт

Известно, что это убийство, 15 января 2018 года, город SQL City. Всё остальное — в таблице отчётов

2

Допросите свидетелей

В отчёте есть их приметы: адрес одного и имя второй. Найдите обоих и прочитайте показания

3

Соедините таблицы

Номер абонемента и часть автомобильного номера ведут к спортклубу и к правам — это уже JOIN

4

Найдите заказчика

Убийца назовёт приметы нанимательницы. Кто она — покажет таблица отметок на мероприятиях

menu_book Справка

Базы данных и SQL: что нужно понимать школьнику

Почему таблицы связаны, а не свалены в одну

Первый вопрос, который возникает при взгляде на схему базы: зачем девять таблиц, если можно было сделать одну большую? Ответ виден на примере. Если хранить человека и его водительские права в одной строке, то у тех, кто прав не имеет, половина строки будет пустой, а если один человек сменит права, придётся править данные в нескольких местах и рано или поздно они разойдутся.

Поэтому данные разносят по таблицам так, чтобы каждый факт хранился ровно в одном месте, а связь между фактами задавалась ссылкой. В таблице person есть столбец license_id — это ссылка на строку в drivers_license. Столбец, однозначно определяющий строку в своей таблице, называют первичным ключом; столбец, ссылающийся на чужой первичный ключ, — внешним ключом. Такое устройство и называют реляционным, то есть основанным на связях.

Как читается запрос

Запрос SQL читается почти как фраза на английском, и порядок частей в нём всегда один: SELECT — какие столбцы показать, FROM — из какой таблицы, WHERE — какие строки оставить. Всё остальное надстраивается поверх: ORDER BY сортирует результат, LIMIT ограничивает число строк, GROUP BY собирает строки в группы.

Полезная привычка — читать запрос не сверху вниз, а с середины: сначала FROM (откуда берём), потом WHERE (что оставляем), и только потом SELECT (что показываем). Именно в таком порядке запрос и выполняется, и именно поэтому в WHERE нельзя сослаться на псевдоним столбца, заданный в SELECT, — на момент отбора его ещё не существует.

JOIN — то, ради чего всё затевалось

Пока вопрос укладывается в одну таблицу, SQL выглядит как усложнённый фильтр в электронной таблице. Разница начинается там, где данные приходится собирать из нескольких таблиц сразу: «покажи имя человека и его годовой доход» — имя лежит в person, доход в income. Соединяет их JOIN … ON, где после ON пишут, какие столбцы считать одинаковыми.

В расследовании это место видно особенно ясно. Свидетель называет номер абонемента и часть автомобильного номера — и чтобы превратить их в имя, нужно связать четыре таблицы: посещения спортклуба, абонементы, людей и водительские права. Ни одна из них по отдельности ответа не содержит; ответ существует только в связи между ними. Понять это на скучных «сотрудниках и отделах» гораздо труднее, чем когда от результата зависит, найдёте вы убийцу или нет.

Базы данных в школьной программе и на экзамене

В курсе информатики базы данных проходят в 9 и 11 классах: понятие записи и поля, ключ, связь таблиц, простейшие запросы. На ЕГЭ им отведено отдельное задание, где по нескольким связанным таблицам нужно проследить цепочку и извлечь ответ, — писать запросы там не требуется, но требуется ровно то умение читать связи, которое здесь тренируется.

Практический смысл шире экзамена. SQL — один из немногих языков, которые почти не изменились за сорок лет и которые нужны далеко за пределами программирования: аналитику, тестировщику, бухгалтеру в 1С, любому, кто хоть раз выгружал отчёт из корпоративной системы. Освоить его основу можно за один вечер, и расследование в SQL City — самый безболезненный способ этот вечер провести.

quiz FAQ

Часто задаваемые вопросы

Нужно ли устанавливать базу данных? expand_more
Нет. SQLite целиком загружается в браузер и работает у вас на компьютере. Ни сервера, ни установки, ни регистрации — и ни один запрос не уходит наружу.
С какого класса это подходит? expand_more
Пошаговый разбор рассчитан на тех, кто SQL не видел совсем, — это 9 класс и старше, когда проходят тему «Базы данных». Само расследование без разбора интересно и старшеклассникам, и взрослым: последние шаги требуют соединения трёх таблиц и группировки.
Можно ли испортить базу неправильным запросом? expand_more
Нет. Копия базы живёт только во вкладке браузера, и перезагрузка страницы возвращает всё в исходное состояние. Это и есть главное достоинство такого тренажёра: пробовать можно что угодно.
Почему имена таблиц и столбцов английские? expand_more
Потому что так они выглядят в любой настоящей базе, в учебнике и на экзамене. Переводить person в «человек» значило бы учить языку, которого не существует. Всё остальное — задания, показания, отчёты, интерфейс — на русском.
Подходит ли для подготовки к ОГЭ и ЕГЭ? expand_more
Как тренировка понимания — да. Задания ЕГЭ по базам данных проверяют умение читать связанные таблицы и выбирать нужные строки, а это ровно то, чем здесь занимаются всё расследование. Но формат заданий экзамена другой: тут пишут запросы, а на экзамене чаще читают готовые таблицы.
Это перевод SQL Murder Mystery? expand_more
Да. Оригинал сделали Joon Park и Cathy He в Knight Lab (Northwestern University), код под MIT, текст под CC BY-SA 4.0. Мы перевели сюжет, показания, весь интерфейс и наполнение базы, убрали внешние CDN и заменили таблицу-наполнитель с цитатами из «Алисы в Стране чудес» на правдоподобную сводку происшествий.
🕵️

Дело ждёт следователя

Отчёт с места происшествия лежит в базе. Дальше — только ваши запросы.

rocket_launch Начать расследование open_in_new