MySQL онлайн: задачи и практика SQL в браузере
MySQL онлайн позволяет писать и запускать запросы без локальной установки базы данных. В SQL Arena доступна отдельная MySQL-песочница, где можно решать задачи и практиковать функции и синтаксис этого диалекта.
Обновлено · Команда SQL Arena
Что потренируете
- Писать и проверять запросы в MySQL 8
- Собирать значения группы через GROUP_CONCAT
- Работать с NULL с помощью IFNULL
- Форматировать даты через DATE_FORMAT
- Учитывать особенности JOIN, LIMIT и синтаксиса MySQL
Пример задачи в тренажёре
Так выглядит задача в SQL Arena: условие, редактор, результат и схема базы.
Есть мастер-классы и регистрации на них. Для каждого мастер-класса выведите название в workshop и имена подтверждённых участников в confirmed_attendees, отсортированные по алфавиту и разделённые запятой. Если подтверждённых участников нет, выведите none. Результат отсортируйте по id мастер-класса.
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;
| # | workshop | confirmed_attendees |
|---|---|---|
| 1 | Ceramics Lab | Anna, Mila |
| 2 | Street Photo | Leo |
| 3 | Bread Basics | Daniel, Oliver, Sofia |
| 4 | Poster Design | none |
Есть мастер-классы и регистрации на них. Для каждого мастер-класса выведите название в workshop и имена подтверждённых участников в confirmed_attendees, отсортированные по алфавиту и разделённые запятой. Если подтверждённых участников нет, выведите none. Результат отсортируйте по id мастер-класса.
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;
Разбор 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-диалектами.
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;
| workshop | confirmed_attendees |
|---|---|
| Ceramics Lab | Anna, Mila |
| Street Photo | Leo |
| Bread Basics | Daniel, Oliver, Sofia |
| Poster Design | none |
| Indoor Garden | none |
Типичные ошибки в задачах MySQL
Фильтр правой таблицы ставят после LEFT JOIN
Конструкция LEFT JOIN сохраняет строки без совпадений, но условие вида WHERE r.status = 'confirmed' затем удалит строки, где r.status равен NULL. В результате запрос фактически потеряет часть поведения LEFT JOIN. Если требуется сохранить все строки слева, условие часто должно быть частью ON.
Ожидают FULL JOIN как в некоторых других СУБД
В MySQL нет обычного FULL OUTER JOIN. Если задача требует сохранить несовпавшие строки с обеих сторон, запрос приходится строить другим способом, например комбинировать результаты. Поэтому полезно решать MySQL-задачи именно в MySQL, а не запоминать один синтаксис JOIN для всех диалектов.
Смешивают функции 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-ментор может дать подсказку или объяснить ошибку.
- EasyбесплатноПятизвёздочные отели сетиpostgresqlmysqlclickhouse
- EasyбесплатноКоличество просторных номеровpostgresqlmysqlclickhouse
- EasyбесплатноПлатиновые участники программы лояльностиpostgresqlmysqlclickhouse
- EasyбесплатноКоличество дальних рейсовpostgresqlmysqlclickhouse
- MediumPremiumСамый прибыльный отель сетиpostgresqlmysqlclickhouse
- MediumPremiumГости с несколькими бронированиямиpostgresqlmysqlclickhouse
- MediumPremiumНакопленные мили по участникамpostgresqlmysqlclickhouse
- MediumPremiumУчастники, которые ни разу не тратили милиpostgresqlmysqlclickhouse
Справочник по теме
Подробные статьи с синтаксисом и примерами в справочнике 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