CodeRang
Диалекты

MySQL онлайн: задачи и практика SQL в браузере

MySQL онлайн позволяет писать и запускать запросы без локальной установки базы данных. В SQL Arena доступна отдельная MySQL-песочница, где можно решать задачи и практиковать функции и синтаксис этого диалекта.

Обновлено · Команда SQL Arena

Что потренируете

  • Писать и проверять запросы в MySQL 8
  • Собирать значения группы через GROUP_CONCAT
  • Работать с NULL с помощью IFNULL
  • Форматировать даты через DATE_FORMAT
  • Учитывать особенности JOIN, LIMIT и синтаксиса MySQL

Пример задачи в тренажёре

Так выглядит задача в SQL Arena: условие, редактор, результат и схема базы.

Пред.След.Случайная
ЗаданиеОтправкиAI Mentor
Соберите подтверждённых участников по мастер-классам

Есть мастер-классы и регистрации на них. Для каждого мастер-класса выведите название в workshop и имена подтверждённых участников в confirmed_attendees, отсортированные по алфавиту и разделённые запятой. Если подтверждённых участников нет, выведите none. Результат отсортируйте по id мастер-класса.

Запрос 1MySQLv8.0
SELECT w.title AS workshop,
       IFNULL(GROUP_CONCAT(r.attendee_name ORDER BY r.attendee_name SEPARATOR ', '), 'none') AS confirmed_attendees
FROM workshops w
LEFT JOIN registrations r
  ON r.workshop_id = w.id AND r.status = 'confirmed'
GROUP BY w.id, w.title
ORDER BY w.id;
Отправить
Результатworkshopsregistrations
Ответ принят

Разбор MySQL-запроса с GROUP_CONCAT и LEFT JOIN

Здесь важно сохранить в результате все мастер-классы, даже если подтверждённых регистраций у них нет. Поэтому запрос начинается с workshops и использует LEFT JOIN. Условие r.status = 'confirmed' находится внутри ON: к мастер-классу присоединяются только подтверждённые регистрации, но сама строка мастер-класса не исчезает, если совпадений нет.

После соединения строки группируются по мастер-классу. GROUP_CONCAT превращает несколько имён внутри группы в одну строку. MySQL позволяет задать ORDER BY прямо внутри GROUP_CONCAT, поэтому Daniel, Oliver и Sofia гарантированно собираются в алфавитном порядке. SEPARATOR ', ' задаёт разделитель между именами.

Для Poster Design есть регистрация, но она отменена. Для Indoor Garden регистраций нет вообще. После условия в LEFT JOIN в обоих случаях справа получается NULL. GROUP_CONCAT по такой группе тоже возвращает NULL, а IFNULL заменяет его на строку none. Это позволяет получить одинаковый понятный результат для двух разных ситуаций.

Если перенести r.status = 'confirmed' из ON в общий WHERE, поведение изменится. Строки мастер-классов без подтверждённых регистраций будут отфильтрованы целиком, и Poster Design с Indoor Garden исчезнут. Это одна из самых полезных деталей при практике LEFT JOIN: условие на правую таблицу в ON и то же условие в WHERE не всегда равнозначны.

Финальный ORDER BY w.id нужен для устойчивого порядка результата. Сортировка имён внутри GROUP_CONCAT решает другую задачу: она определяет порядок элементов внутри одной ячейки, но не порядок самих мастер-классов. В одном запросе поэтому используются два независимых ORDER BY.

Онлайн-компилятор MySQL полезен, когда нужно быстро проверить синтаксис или выполнить запрос без настройки локального сервера. Для полноценного обучения одной проверки SELECT недостаточно: стоит практиковать JOIN, GROUP BY, подзапросы, агрегатные функции и особенности самого MySQL. Например, GROUP_CONCAT собирает значения группы в одну строку, IFNULL заменяет NULL указанным значением, а DATE_FORMAT форматирует даты. Такие конструкции лучше изучать непосредственно в MySQL, поскольку синтаксис и набор функций различаются между SQL-диалектами.

SQLMySQL v8.0
SELECT w.title AS workshop,
       IFNULL(GROUP_CONCAT(r.attendee_name ORDER BY r.attendee_name SEPARATOR ', '), 'none') AS confirmed_attendees
FROM workshops w
LEFT JOIN registrations r
  ON r.workshop_id = w.id AND r.status = 'confirmed'
GROUP BY w.id, w.title
ORDER BY w.id;
Результат запроса
workshopconfirmed_attendees
Ceramics LabAnna, Mila
Street PhotoLeo
Bread BasicsDaniel, Oliver, Sofia
Poster Designnone
Indoor Gardennone

Типичные ошибки в задачах MySQL

01

Фильтр правой таблицы ставят после LEFT JOIN

Конструкция LEFT JOIN сохраняет строки без совпадений, но условие вида WHERE r.status = 'confirmed' затем удалит строки, где r.status равен NULL. В результате запрос фактически потеряет часть поведения LEFT JOIN. Если требуется сохранить все строки слева, условие часто должно быть частью ON.

02

Ожидают FULL JOIN как в некоторых других СУБД

В MySQL нет обычного FULL OUTER JOIN. Если задача требует сохранить несовпавшие строки с обеих сторон, запрос приходится строить другим способом, например комбинировать результаты. Поэтому полезно решать MySQL-задачи именно в MySQL, а не запоминать один синтаксис JOIN для всех диалектов.

03

Смешивают функции PostgreSQL и MySQL

В MySQL часто используются IFNULL, DATE_FORMAT и GROUP_CONCAT, тогда как в других СУБД для похожей логики встречаются другие функции или конструкции. Даже LIMIT может сочетаться с сортировкой и смещением немного иначе, чем привычно по другому диалекту. Практика помогает замечать такие различия до рабочего запроса.

Задачи по теме в тренажёре

Трек SQL на MySQL

После примера с GROUP_CONCAT можно перейти к отдельным задачам MySQL. Среди бесплатных Easy-задач есть фильтрация пятизвёздочных отелей, подсчёт просторных номеров, выбор участников платинового уровня и подсчёт дальних рейсов. На Medium появляются задачи, где нужно группировать данные по сущностям и связывать несколько таблиц: например искать гостей с несколькими бронированиями, считать накопленные мили или определять участников, которые ничего не тратили. SQL Arena даёт отдельную MySQL 8-песочницу, поэтому запрос проверяется в нужном диалекте, а не через приблизительную совместимость. У каждой из 1 192 задач собственные таблицы. Автопроверка запускает решение и на скрытых данных, поэтому жёстко прописанные значения или случайно правильный запрос не считаются полноценным решением. Бесплатно доступны 292 задачи на четырёх диалектах без привязки карты. Для последовательной практики MySQL можно перейти в трек «SQL на MySQL для разработчика». А если запрос уже работает, EXPLAIN помогает посмотреть его выполнение; ER-диаграмма упрощает чтение связей между таблицами, а AI-ментор может дать подсказку или объяснить ошибку.

Справочник по теме

Подробные статьи с синтаксисом и примерами в справочнике SQL Arena.

Частые вопросы

Где использовать MySQL онлайн?

MySQL можно запускать в браузерной песочнице без локальной установки сервера. Это подходит для проверки запросов, обучения и решения SQL-задач.

Где найти курсы MySQL?

При выборе курса полезно смотреть, есть ли в нём самостоятельная практика запросов на MySQL. В SQL Arena доступны курсы и отдельная MySQL-песочница для выполнения запросов.

Где решать MySQL задачи?

Для практики выбирайте задачи, которые выполняются именно на MySQL. Это позволяет привыкнуть не только к общему SQL, но и к функциям и ограничениям конкретного диалекта.

Что такое MySQL онлайн-компилятор?

Так обычно называют браузерный SQL-редактор, который отправляет запрос в MySQL и показывает результат выполнения. Для работы с ним не нужно устанавливать MySQL локально.

Какие запросы стоит практиковать в MySQL?

Начните с SELECT, WHERE, JOIN, GROUP BY и подзапросов. Затем добавьте функции MySQL, включая GROUP_CONCAT, IFNULL, DATE_FORMAT и другие диалектные возможности.

Практика и задачи MySQL онлайн

Откройте MySQL 8 в браузере и начните с бесплатных Easy-задач. Локальная установка базы для этого не требуется.

Решать задачи MySQL