← Назад к вопросам

Какие запросы писал в SQL

1.0 Junior🔥 211 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Распространённые SQL-запросы в работе QA Engineer

В роли QA Engineer я активно использую SQL для верификации данных, анализа тестовых сценариев, создания тестовых данных и отладки интеграционных процессов. Моя работа с БД обычно сосредоточена вокруг проверки целостности данных после выполнения операций (UI или API), подготовки окружения и исследования баг-репортов. Вот основные типы запросов, которые я пишу регулярно.

1. Запросы на выборку данных (SELECT)

Это основа 80% моих SQL-запросов. Использую для проверки, что данные корректно сохранились, обновились или удалились.

-- Проверка состояния заказа после теста UI
SELECT id, status, total_amount, created_at
FROM orders
WHERE user_id = 12345
ORDER BY created_at DESC
LIMIT 1;
-- Сравнение данных из разных таблиц после интеграционного теста
SELECT u.email, p.payment_status, o.shipping_address
FROM users u
JOIN orders o ON u.id = o.user_id
JOIN payments p ON o.id = p.order_id
WHERE u.id = 9876;

2. Проверка уникальности и целостности данных

Часто нужно убедиться в отсутствии дубликатов или нарушенных связей.

-- Поиск дубликатов email в пользовательской базе
SELECT email, COUNT(*) as duplicate_count
FROM users
GROUP BY email
HAVING COUNT(*) > 1;

3. Агрегация для анализа тестового покрытия

Позволяет оценить объем данных, сгенерированных тестами.

-- Статистика по заказам за тестовый период
SELECT 
    status,
    COUNT(*) as order_count,
    AVG(total_amount) as avg_amount,
    MIN(created_at) as first_order,
    MAX(created_at) as last_order
FROM orders
WHERE created_at BETWEEN '2024-01-01' AND '2024-01-31'
GROUP BY status;

4. Подготовка тестовых данных

Хотя предпочитаю использовать API или seed-скрипты, иногда нужно прямое вмешательство.

-- Создание тестового пользователя с определенными характеристиками
INSERT INTO users (username, email, is_active, role_id)
VALUES ('test_user_qa', 'qa_test@example.com', 1, 3);

5. "Очистка" после тестов

Для поддержания чистоты тестового окружения.

-- Удаление тестовых данных, созданных в конкретной сессии
DELETE FROM cart_items 
WHERE user_id IN (
    SELECT id FROM users 
    WHERE email LIKE '%automation_test%@example.com'
);

6. Исследование багов

Когда в баг-репорте указаны некорректные данные, SQL помогает найти корневую причину.

-- Трассировка цепочки данных для расследования бага
SELECT 
    o.id as order_id,
    o.status as order_status,
    i.sku as product_sku,
    i.quantity,
    w.name as warehouse
FROM orders o
LEFT JOIN order_items i ON o.id = i.order_id
LEFT JOIN inventory inv ON i.product_id = inv.product_id
LEFT JOIN warehouses w ON inv.warehouse_id = w.id
WHERE o.id = 45678;

7. Проверка временных меток и последовательностей

Критически важно для тестирования систем с аудитом или event-sourcing архитектурой.

-- Проверка последовательности обновления статусов заказа
SELECT 
    id,
    status,
    updated_at,
    LAG(status) OVER (ORDER BY updated_at) as previous_status,
    LAG(updated_at) OVER (ORDER BY updated_at) as previous_update
FROM order_status_history
WHERE order_id = 99999
ORDER BY updated_at;

Ключевые принципы моей работы с SQL:

  • Читаемость — всегда структурирую запросы с отступами, использую понятные алиасы
  • Изоляция — в тестовой БД использую специфические идентификаторы или временные метки, чтобы не затрагивать продакшн-данные
  • Производительность — для больших таблиц добавляю условия по индексируемым полям и ограничиваю выборку (LIMIT)
  • Документирование — сложные запросы сопровождаю комментариями о цели проверки

Наиболее сложные запросы обычно связаны с анализом данных в распределенных системах, где нужно джойнить таблицы из разных сервисов (например, заказы, платежи и логистика), или с тестированием механизмов репликации и консистентности данных между основной и резервной БД.

SQL — незаменимый инструмент в арсенале QA, особенно при тестировании backend-систем, ETL-процессов и любых приложений с богатой бизнес-логикой, завязанной на данных. Умение быстро и точно извлекать и анализировать информацию из БД значительно сокращает время на исследование дефектов и повышает глубину тестирования.