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

Для чего SQL

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

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

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

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

Для чего SQL

SQL (Structured Query Language) — это язык для работы с реляционными базами данных. Для QA Engineer это критически важный навык, потому что часто нужно проверять данные в БД.

Где SQL используется в тестировании

1. Проверка данных в БД

Нужно убедиться, что приложение правильно сохраняет данные:

-- Проверить, создался ли пользователь после регистрации
SELECT * FROM users WHERE email = 'test@example.com';

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

-- Вставить тестовых пользователей для тестов
INSERT INTO users (name, email, age) VALUES 
  ('John', 'john@test.com', 25),
  ('Alice', 'alice@test.com', 30),
  ('Bob', 'bob@test.com', 28);

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

-- Проверить, что нет дублей
SELECT email, COUNT(*) FROM users GROUP BY email HAVING COUNT(*) > 1;

-- Проверить orphaned records
SELECT * FROM orders WHERE user_id NOT IN (SELECT id FROM users);

4. Проверка бизнес-логики

-- Сумма заказов пользователя
SELECT SUM(amount) FROM orders WHERE user_id = 123;

-- Последний заказ
SELECT * FROM orders WHERE user_id = 123 ORDER BY created_at DESC LIMIT 1;

5. Очистка тестовых данных

-- Удалить все тестовые заказы
DELETE FROM orders WHERE user_id IN (SELECT id FROM users WHERE email LIKE '%test%');

Типичные SQL запросы для QA

SELECT — получение данных

-- Все пользователи
SELECT * FROM users;

-- С условием
SELECT * FROM users WHERE age > 18;

-- С сортировкой
SELECT * FROM users ORDER BY created_at DESC;

-- С лимитом
SELECT * FROM users LIMIT 10;

INSERT — добавление данных

INSERT INTO users (name, email, age) VALUES ('John', 'john@test.com', 25);

UPDATE — изменение данных

UPDATE users SET age = 26 WHERE id = 123;

DELETE — удаление данных

DELETE FROM users WHERE id = 123;

Сценарии использования SQL в тестировании

Сценарий 1: Проверка создания заказа

-- Пользователь создал заказ через UI
-- Я проверяю в БД
SELECT * FROM orders WHERE user_id = 123 ORDER BY id DESC LIMIT 1;

-- Результат должен показать новый заказ с правильной суммой

Сценарий 2: Проверка удаления

-- Пользователь нажал delete
-- Я проверяю
SELECT COUNT(*) FROM users WHERE id = 123;  -- Должно быть 0

Сценарий 3: Проверка транзакции

-- При платеже должны произойти несколько операций

-- Проверить платёж
SELECT * FROM payments WHERE order_id = 123;

-- Проверить, что статус заказа изменился
SELECT status FROM orders WHERE id = 123;  -- Должно быть 'Paid'

-- Проверить, что был создан shipping
SELECT * FROM shipping WHERE order_id = 123;

Сценарий 4: Проверка производительности

-- Поиск медленных запросов
EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 123;

-- Нужны ли индексы?
SHOW INDEXES FROM orders;

Сценарий 5: Проверка безопасности

-- Может ли пользователь видеть данные другого пользователя?
SELECT * FROM orders WHERE user_id = 999;  -- Если видно, security issue

-- Хранятся ли пароли в plain-text?
SELECT password FROM users LIMIT 1;  -- Если видно, security issue!

Сложные запросы

JOIN — связь между таблицами

-- Получить заказы с информацией о пользователе
SELECT u.name, o.amount, o.created_at
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE u.id = 123;

GROUP BY — группировка

-- Сумма заказов по пользователям
SELECT user_id, SUM(amount) as total
FROM orders
GROUP BY user_id
ORDER BY total DESC;

Aggregates — агрегирующие функции

-- Средняя стоимость заказа
SELECT AVG(amount) FROM orders;

-- Максимальный заказ
SELECT MAX(amount) FROM orders;

-- Количество заказов
SELECT COUNT(*) FROM orders;

Инструменты для работы с SQL

DBeaver: бесплатный, мощный, удобный GUI

pgAdmin: для PostgreSQL, web-интерфейс

MySQL Workbench: для MySQL

CommandLine: mysql, psql — прямое подключение

DataGrip: платный, но мощный (JetBrains)

Почему это важно для QA

1. Независимая проверка:

  • UI может врать, но БД не врёт
  • Если UI показывает "заказ создан", но в БД его нет — баг

2. Edge cases:

  • Проверить данные, которые невозможно увидеть в UI
  • Проверить скрытые поля

3. Производительность:

  • Иногда приложение зависает из-за медленных запросов
  • SQL помогает найти проблему

4. Безопасность:

  • Проверить, что sensitive данные не хранятся в plain-text
  • Проверить, что пользователь не видит данные других

5. Тестовые данные:

  • Быстро подготовить нужные данные
  • Быстро очистить после теста

Совет QA

Не обязательно быть экспертом в SQL, но базовые SELECT, INSERT, UPDATE, DELETE должны быть на автомате. Это сэкономит часы работы и найдёт множество багов, которые невидны в UI.

Основные запросы, которые использую каждый день:

SELECT * FROM table WHERE condition;  -- проверка данных
INSERT INTO ... VALUES ...;  -- подготовка данных
DELETE FROM ... WHERE ...;  -- очистка
UPDATE ... SET ... WHERE ...;  -- изменение
Для чего SQL | PrepBro