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

Какие знаешь запросы в БД?

2.0 Middle🔥 202 комментариев
#Базы данных и SQL

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

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

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

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

Как QA Engineer с опытом более 10 лет, я активно использую SQL-запросы для верификации данных, отладки тестов и проверки целостности приложения. Основные категории запросов, которые регулярно применяются в работе:

1. DQL (Data Query Language) — Запросы на выборку данных

Это основа для проверки состояния БД после тестовых действий.

-- Базовый SELECT с фильтрацией
SELECT id, username, email, created_at 
FROM users 
WHERE status = 'active' 
ORDER BY created_at DESC 
LIMIT 10;

-- JOIN для связанных таблиц
SELECT o.order_number, u.username, p.product_name
FROM orders o
JOIN users u ON o.user_id = u.id
JOIN products p ON o.product_id = p.id
WHERE o.created_at > '2024-01-01';

-- Агрегация данных
SELECT 
    user_id, 
    COUNT(*) as total_orders,
    SUM(amount) as total_amount
FROM orders 
GROUP BY user_id 
HAVING total_orders > 5;

2. DML (Data Manipulation Language) — Запросы на изменение данных

Используются для подготовки тестового окружения и очистки после тестов.

-- Вставка тестовых данных
INSERT INTO users (username, email, status) 
VALUES ('test_user', 'test@example.com', 'pending');

-- Обновление записей
UPDATE orders 
SET status = 'shipped', updated_at = NOW() 
WHERE id = 12345;

-- Удаление данных (с осторожностью!)
DELETE FROM session_logs 
WHERE created_at < DATE_SUB(NOW(), INTERVAL 30 DAY);

3. DDL (Data Definition Language) — Запросы определения структуры

Полезны при анализе миграций БД и проверке схемы.

-- Просмотр структуры таблицы
DESCRIBE users;

-- Создание временной таблицы для тестов
CREATE TEMPORARY TABLE temp_orders AS 
SELECT * FROM orders WHERE status = 'processing';

4. Транзакционные запросы

Для тестирования атомарности операций и конкурентного доступа.

-- Начало транзакции
START TRANSACTION;

-- Проверка изоляции уровней
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT balance FROM accounts WHERE user_id = 1 FOR UPDATE;

-- Откат или фиксация
ROLLBACK;
-- COMMIT;

5. Специализированные запросы для тестирования

Конкретные сценарии, которые часто нужны в QA:

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

-- Проверка ссылочной целостности
SELECT o.* 
FROM orders o
LEFT JOIN users u ON o.user_id = u.id
WHERE u.id IS NULL;

-- Анализ производительности (EXPLAIN)
EXPLAIN ANALYZE
SELECT * FROM large_table WHERE indexed_column = 'value';

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

В своей работе я использую SQL для:

  • Валидации бэкенд-логики: После API-запроса на создание заказа проверяю, что запись появилась в БД с корректными полями
  • Подготовки данных: Создаю специфические тестовые сценарии (например, пользователь с 100+ заказами)
  • Дебаггинга: Когда UI показывает некорректные данные, первым делом проверяю, что фактически хранится в базе
  • Миграционного тестирования: Сравниваю структуру таблиц до и после применения миграций
  • Нагрузочного тестирования: Анализирую, как растут таблицы и индексы под нагрузкой

Ключевые принципы, которых придерживаюсь:

  • Всегда делаю SELECT перед UPDATE или DELETE в продакшн-подобных окружениях
  • Использую транзакции для атомарных изменений в тестах
  • Пишу идиоматичный SQL для конкретной СУБД (MySQL, PostgreSQL, Oracle имеют различия)
  • Храню набор полезных запросов в репозитории команды для повторного использования

Для современного QA Engineer уверенное владение SQL — не опция, а необходимость, особенно при тестировании сложных enterprise-систем с многослойной бизнес-логикой.