SQL-песочница с базой курса
База интернет-магазина "Полка" из курса "Рабочий день тестировщика: тренажер по SQL". Меняйте данные и создавайте таблицы: кнопка вернёт базу к исходной.
- SQLite 3.49, как проверка в Rusau Learn
- Таблиц: 7
- Без регистрации, база живёт в этой вкладке
Запрос к базе
Таблицы и колонки – нажмите имя, чтобы подставить
- (, , , , )
- (, , , , )
- (, , , , , )
- (, , , , , )
- (, , , , , )
- (, , , )
- (, , , )
Где тот же запрос даст другой ответ
Курс идёт на двух площадках. Stepik проверяет ответы на MySQL 8.0, а Rusau Learn и эта песочница – на SQLite 3.49. На работе чаще всего встретится третий движок, PostgreSQL. Почти всё в курсе работает на всех трёх одинаково, но в строках ниже ответы расходятся. Значения Stepik и Rusau Learn сняты прогоном на живых площадках, PostgreSQL описан по документации.
| Что проверяем | Stepik (MySQL 8.0) | Rusau Learn и песочница (SQLite 3.49) | PostgreSQL |
|---|---|---|---|
Регистр букв в сравнении SELECT id, status FROM orders WHERE status = 'Paid'; | 9 строк: 'Paid' и 'paid' для MySQL одно и то же | Пусто: регистр различается | Пусто, как в Learn |
Буквы ё и е SELECT 'ёлка' = 'елка' AS same; | 1: ё и е считаются одной буквой | 0: это разные буквы | false |
LIKE и русские буквы SELECT id, subject FROM support_tickets WHERE subject LIKE '%списали%'; | Находит "Списали деньги дважды" | Пусто: без учёта регистра SQLite сравнивает только латиницу | Пусто: LIKE различает регистр, для поиска без него есть ILIKE |
Деление целых SELECT 7 / 2 AS half; | 3.5000 | 3: дробная часть отбрасывается | 3, как в Learn |
Вид среднего SELECT AVG(amount) AS avg_payment FROM payments; | 2686.1538 | 2686.153846153846 | 2686.1538461538461538 |
Склейка строк через || SELECT 'a' || 'b' AS glued, CONCAT('a', 'b') AS same_everywhere; | 0: для MySQL || – логическое ИЛИ. CONCAT даёт ab | ab и ab | ab и ab |
Колонка вне GROUP BY SELECT customer_id, status, COUNT(*) AS orders_count
FROM orders
GROUP BY customer_id; | Ошибка 1055 | Выполнит и возьмёт status из любой строки группы | Ошибка, как на Stepik |
Порядок групп без ORDER BY SELECT status, COUNT(*) AS orders_count
FROM orders
GROUP BY status; | paid, cancelled, pending, failed – как встретились в таблице | cancelled, failed, paid, pending – по алфавиту | Любой порядок, без ORDER BY он не обещан |
FULL OUTER JOIN SELECT o.id AS order_id, p.id AS payment_id
FROM orders o
FULL OUTER JOIN payments p ON p.order_id = o.id; | Ошибка: в MySQL полного соединения нет, его собирают из LEFT JOIN, UNION и RIGHT JOIN | 16 строк | 16 строк |
Приведение к целому SELECT CAST(2.6 AS SIGNED) AS signed_int, CAST(2.6 AS INTEGER) AS integer_int; | AS SIGNED даёт 3, а AS INTEGER – ошибку | 3 и 2: AS SIGNED переводится в CAST(ROUND(x) AS INTEGER), а AS INTEGER отбрасывает дробь | SIGNED не знает, AS INTEGER округляет до 3 |
TRUNCATE внутри транзакции START TRANSACTION;
TRUNCATE TABLE payments;
ROLLBACK;
SELECT COUNT(*) AS payments_left FROM payments; | 0: TRUNCATE завершает транзакцию, ROLLBACK ничего не вернёт | 13: TRUNCATE выполняется как DELETE, и ROLLBACK его отменяет | 13: ROLLBACK вернёт таблицу |
Внешние ключи PRAGMA foreign_keys; | Проверяются: строку со ссылкой в никуда база не примет | Не проверяются (0). В песочнице проверку включает PRAGMA foreign_keys = ON; | Проверяются |
Длина VARCHAR(n) CREATE TABLE notes (title VARCHAR(5));
INSERT INTO notes VALUES ('слишком длинно');
SELECT title FROM notes; | Ошибка 1406: строка длиннее n не поместится | Сохранит строку целиком: длину SQLite не проверяет | Ошибка, как на Stepik |
Пустое значение SELECT IFNULL(NULL, 0) AS a, COALESCE(NULL, 0) AS b; | Обе функции работают | Обе функции работают | IFNULL нет, работает только COALESCE |
Имя текущей базы SELECT DATABASE(); | Имя базы | Ошибка: база одна, функции нет | Функции нет, вместо неё current_database() |
Текст ошибки SELECT nickname FROM customers; | Unknown column 'nickname' in 'field list' | no such column: nickname | column "nickname" does not exist |
Что переписывается само
Задания курса написаны под MySQL. Чтобы те же решения выполнялись на SQLite, песочница и проверка заданий в Rusau Learn перед запуском заменяют четыре конструкции. Остальное выполняется как написано.
START TRANSACTION→ BEGIN
TRUNCATE TABLE x→ DELETE FROM x
AUTO_INCREMENT→ убирается: ключ INTEGER PRIMARY KEY нумеруется сам
CAST(x AS SIGNED)→ CAST(ROUND(x) AS INTEGER)
Где учиться дальше
Курс SQL проводит по этой базе от первого SELECT до приёмки миграции. Остальные курсы платформы учат тестированию целиком: от теории до резюме и собеседования.