Привет, коллега! На связи Ваш "Повар В IT"
Помню, лет пять назад я ловил сложный баг в интернет-магазине. Пользователь жаловался, саппорт заводил инц и был баг-репорт: «Оформил заказ, деньги списали, а заказ пропал». В админке сайта заказ висел со статусом «Оплачен», но на почту клиенту ничего не пришло, и в списке заказов у него было пусто. Лезть в код? Долго. Перебирать логи ручками? Можно свихнуться.
Я зашёл в базу данных, написал один простой запрос на SQL, чтобы найти этот заказ по номеру транзакции, и увидел проблему за минуту. У заказа был правильный статус, но чужой user_id. Оказалось, что на этапе оплаты где-то в коде потерялась привязка к пользователю. Баг нашли и починили за час, а не за день.
Вот так SQL стал моим главным инструментом. Если вы только входите в тестирование или разработку и думаете, что SQL — это что-то сложное для «настоящих программистов» — выкиньте это из головы. Это просто язык, чтобы разговаривать с базой данных. И сегодня я докажу, что основы вы освоите за 15 минут.
Что вообще такое эта база данных?
Представьте себе обычный шкаф с папками. База данных (БД) — это и есть шкаф. А таблицы — это папки.
В каждой папке (таблице) лежат листочки с информацией одного типа.
- В одной папке — «Пользователи»: имя, email, дата регистрации.
- В другой — «Заказы»: номер заказа, сумма, статус (новый, оплачен, отправлен), и ссылка на то, какой пользователь сделал этот заказ.
Когда я как тестировщик проверяю новый функционал, моя задача — убедиться, что все «листочки» заполнились правильно. И SQL — это мой фонарик, с которым я лезу в этот шкаф.
Зачем тестировщику учить SQL? Жить станет проще
Многие новички пытаются проверять всё только глазами через интерфейс. Но интерфейс — это витрина. А нам нужно зайти на склад.
Вот реальные задачи, которые я решаю SQL-запросами каждый день:
- Проверить регистрацию: Я создал нового пользователя «Test User» на сайте. Иду в базу, ищу в таблице пользователей запись с email User. Если запись есть — значит, бэкенд сработал и сохранил данные. Всё ок.
- Найти дубликаты: Проверяю форму регистрации на стресс. После быстрого двойного клика по кнопке «Зарегистрироваться» или отправки более 100 запросов, в базе может появиться два одинаковых "User". SQL-запрос найдёт такие дубликаты за секунду.
- Проверить логику статусов: Клиент нажал «Оплатить». В интерфейсе статус сменился на «Оплачен». Но я лезу в базу, в таблицу «Заказы», и смотрю поле status. Действительно ли там проставилось нужное значение и изменилось ли время оплаты? Только так можно убедиться, что данные реально поменялись, а не просто «нарисовались» на экране.
Наш главный инструмент: SELECT
Самый важный запрос, который вы будете использовать в 95% случаев — это SELECT. В переводе с английского — «выбрать». Мы говорим базе: «Покажи мне данные из такой-то таблицы».
В самом простом виде это выглядит так:
SELECT * FROM Пользователи;
Звёздочка * означает «все колонки». Эта команда вывалит вам весь список пользователей. Если их 10 — отлично, если 10 миллионов — компьютер задумается, а вам будет больно смотреть на поток бесконечных строк.
Поэтому мы всегда уточняем, что именно хотим видеть. Например, только имена и емейл:
SELECT name, email FROM Пользователи;
Когда я проверяю конкретный заказ, я ищу его по номеру. Тут на помощь приходит...
Фильтруем мусор: WHERE
Представьте, что в таблице «Заказы» 10 тысяч строк. Искать нужный заказ глазами — гиблое дело. Чтобы отсеять лишнее, мы используем волшебное слово WHERE (где).
Вот как я ищу тот самый проблемный заказ:
SELECT * FROM Заказы WHERE id = 12345;
Эта команда скажет базе: «Дай мне всё из таблицы заказов, но только ту строчку, где номер (id) равен 12345». Мгновенно и точно.
Или, например, мне нужно найти все заказы, которые всё ещё висят в статусе «Новый», но были созданы больше часа назад. Такое может быть багом.
SELECT * FROM Заказы WHERE status = 'Новый' AND created_at < '2026-01-15 10:00:00';
Здесь я говорю: покажи заказы со статусом «Новый» И временем создания раньше указанного.
Немного магии: Связываем таблицы (JOIN)
Данные редко живут в одной таблице. Это неудобно. Представьте, если бы в каждом заказе мы хранили полное имя, адрес и телефон пользователя. Если пользователь сменит телефон, пришлось бы править тысячу его старых заказов.
Поэтому данные хранят умно. В таблице «Заказы» лежит ссылка на пользователя (обычно это user_id). А подробности о пользователе лежат в таблице «Пользователи».
Чтобы увидеть полную картину (например, «Кто сделал заказ №12345 и какой у него телефон»), нам нужно связать две таблицы через JOIN.
Выглядит страшновато, но смысл прост:
SELECT Заказы.id, Пользователи.name, Пользователи.phone
FROM Заказы
JOIN Пользователи ON Заказы.user_id = Пользователи.id
WHERE Заказы.id = 12345;
Мы говорим: «Возьми заказ, найди для него пользователя по user_id и покажи имя и телефон этого пользователя».
Считаем и группируем: GROUP BY
Часто нужно не просто найти записи, а посчитать их. Например, я тестирую акцию «Приведи друга». Мне нужно убедиться, что статистика на сайте рисуется правильно.
В базе я могу сгруппировать заказы по каждому клиенту и посчитать их количество. Это делается с помощью GROUP BY.
SELECT user_id, COUNT(*) as total_orders
FROM Заказы
GROUP BY user_id;
Этот запрос скажет: «Сгруппируй все заказы по user_id и посчитай их количество в каждой группе». На выходе мы получим список ID пользователей и сколько заказов сделал каждый из них.
Итог
SQL — это не магия и не удел избранных. Это просто инструмент для проверки своей работы. Вам не нужно писать сложные процедуры на десятки строк. Достаточно уметь:
- Залезть в таблицу (SELECT).
- Найти там нужную запись (WHERE).
- Иногда связать две таблицы (JOIN), чтобы собрать картинку целиком.
Начните с малого. В следующий раз, когда будете тестировать форму регистрации или оформление заказа, попросите доступ к базе данных (или используйте тестовую) и попробуйте найти свежую запись. Сначала будет непривычно, но уже через неделю вы не будете понимать, как жили без этого раньше. Честно.
Подписывайтесь, чтобы не пропустить новые рецепты из мира IT. В следующих статьях разберём конкретные примеры запросов, которые я использую для поиска самых хитрых багов.