// SQL-детектив · дело № 01

SQL-детектив: кража в коворкинге «Гараж»

Улики — в таблицах. Твой инструмент — SQL. Восстанови события и найди заказчика кражи, бесплатно и без регистрации.

  • 7 шагов
  • 8 таблиц
  • 30–60 минут
0 / 7 шагов

Шаг 1. Заявление о краже

Прогресс и запрос сохраняются в этом браузере.

Улики по порядку

от заявления до заказчика
  1. текущий шаг Заявление о краже

    Начни с журнала происшествий: за неделю в нём несколько записей, и только одна о краже. Найди её и узнай, из какой комнаты пропал прототип.

    к SQL-запросу

    нужно: SELECT и WHERE

    подсказка

    Столбец kind хранит тип происшествия одним словом в нижнем регистре.

  2. закрыт Кто слышал служебный выход

    Утром охрана сняла двенадцать показаний. Кто-то из опрошенных упомянул служебный выход: найди это показание по тексту и назови человека.

    к SQL-запросу

    нужно: LIKEJOIN

    подсказка

    Текст лежит в statements.statement, имена в people.full_name. Ищи подстроку «служебный выход» через LIKE.

  3. закрыт Кто вышел через служебный выход

    Проверь слова охранника по журналу турникетов: сколько разных людей вышли через служебный выход 13 марта между 23:30 и 23:50?

    к SQL-запросу

    нужно: BETWEEN и датыCOUNT(DISTINCT)

    подсказка

    Дата и время в passed_at, сравнивай со строкой вида '2026-03-13 23:30'. Считай DISTINCT person_id, чтобы двойной проход не удвоил ответ.

  4. закрыт Кто из них был на третьем этаже

    У каждого этажа своя точка Wi-Fi. Кто из этих двоих был подключён к сети третьего этажа между 22:30 и 23:40?

    к SQL-запросу

    нужно: подзапрос и INJOIN

    подсказка

    Сессия пересекает окно, если началась до его конца и закончилась после его начала: started_at < '…23:40' AND ended_at > '…22:30'. Двоих с прошлого шага подставь подзапросом.

  5. закрыт Машина у шлагбаума

    Подозреваемый вышел в 23:41. Какая машина покинула паркинг в следующие десять минут?

    к SQL-запросу

    нужно: interval и даты

    подсказка

    Верхняя граница: '2026-03-13 23:41'::timestamp + interval '10 minutes'. Или запиши обе границы строками.

  6. закрыт Чья это машина

    Номер есть, теперь владелец и его компания: соедини паркинг с людьми и компаниями и назови компанию.

    к SQL-запросу

    нужно: JOIN трёх таблиц

    подсказка

    parking.person_id ведёт в people.id, а people.company_id в companies.id. Машина заезжала всю неделю, поэтому без DISTINCT получишь одну строку на каждый заезд.

  7. закрыт Заказчик

    Кражу готовили заранее: кто-то из компании владельца машины всю неделю с 9 по 13 марта бронировал переговорные третьего этажа. Кто из этой компании делал это чаще всех?

    к SQL-запросу

    нужно: GROUP BY и COUNTORDER BY и LIMIT

    подсказка

    Переговорные третьего этажа начинаются с «3-»: room LIKE '3-%'. Сгруппируй по человеку и отсортируй по COUNT(*) DESC.

SQL-консоль

к заданию
PostgreSQL в браузере только чтение
осмотреться:
Ctrl / ⌘ + Enter

Пиши SELECT: результат появится ниже. База восстанавливается перед каждым запуском.

результат запроса

Выполни первый запрос, чтобы осмотреть журнал происшествий. При первом запуске загрузится PostgreSQL — около 17 МБ.

таблицы базы 8

Нажми на имя таблицы, чтобы подставить запрос.

  • 11 строк компании-резиденты и их офисы id, name, floor, room
  • 57 строк все, у кого есть бейдж; у гостя host_id указывает на пригласившего id, full_name, role, company_id, host_id
  • 7 строк журнал происшествий охраны id, reported_at, reported_by, room, kind, description
  • 12 строк показания, снятые утром 14 марта id, person_id, taken_at, statement
  • 472 строк турникеты: главный вход, паркинг, служебный выход id, person_id, door, direction, passed_at
  • 213 строк подключения к точкам доступа, по одной на этаж id, person_id, floor, started_at, ended_at
  • 63 строк брони переговорных id, room, person_id, starts_at, ends_at, purpose
  • 68 строк шлагбаум паркинга id, plate, person_id, entered_at, left_at

people.id связан с person_id, reported_by и host_id. Компания человека: people.company_id → companies.id.

Как играть

  1. Читай шаг и пиши запрос в консоли. Результат появляется под редактором.
  2. Впиши найденное в поле ответа: комнату, имя, число или номер машины. Регистр и «ё» не важны.
  3. Верный ответ открывает следующий шаг и один из рабочих запросов, чтобы сравнить со своим.

Прогресс и последний запрос хранятся в этом браузере. Кнопка «начать заново» — над шагами расследования.

Что тренируешь

Каждая конструкция разобрана в справочнике: ссылка ведёт на статью с примерами на живой базе.

Преподавателям

Игру можно давать на уроке или в домашнем задании: страница открывается без регистрации, база живёт в браузере ученика, ответы проверяются на месте. Ссылка на эту страницу в материалах курса приветствуется.

Диалект PostgreSQL. Данные вымышлены, совпадения случайны.

Дальше