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

Как фильтровать данные в команде SELECT?

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

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

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

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

Фильтрация данных в команде SELECT: основные методы и синтаксис

Фильтрация данных в команде SELECT — одна из ключевых операций при работе с SQL. Она позволяет извлекать только те строки из таблицы, которые удовлетворяют определённым условиям, вместо получения всего содержимого таблицы. Основным инструментом для этого является конструкция WHERE, но также существуют дополнительные методы, такие как HAVING, LIMIT, и использование операторов JOIN с условиями.

Использование WHERE для базовой фильтрации

Конструкция WHERE указывается после FROM и содержит логическое условие. Строки, для которых условие возвращает TRUE, включаются в результат.

SELECT *
FROM employees
WHERE salary > 50000;

Этот запрос вернёт всех сотрудников с зарплатой выше 50 000.

Основные операторы в WHERE:

  • Операторы сравнения: =, != или <>, >, <, >=, <=.
    SELECT * FROM products WHERE price = 100;
    
  • Логические операторы: AND, OR, NOT для комбинирования условий.
    SELECT * FROM orders WHERE status = 'completed' AND total_amount > 1000;
    
  • Операторы для работы с диапазонами и списками: IN, NOT IN, BETWEEN.
    SELECT * FROM customers WHERE country IN ('USA', 'Canada');
    SELECT * FROM orders WHERE order_date BETWEEN '2024-01-01' AND '2024-01-31';
    
  • Операторы для работы с текстом: LIKE для поиска по шаблону (с использованием % для любого количества символов и _ для одного символа).
    SELECT * FROM users WHERE name LIKE 'John%';
    
  • Операторы для работы с NULL: IS NULL, IS NOT NULL.
    SELECT * FROM tasks WHERE assigned_to IS NULL;
    

Фильтрация с использованием JOIN

Фильтрация может происходить не только в основной таблице, но и при соединении таблиц. Условия можно добавлять непосредственно в ON при JOIN или использовать WHERE после соединения всех таблиц.

SELECT e.name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.id AND d.location = 'New York';
-- Условие фильтрации локации добавлено прямо в ON

Фильтрация агрегированных данных с помощью HAVING

Ключевое отличие HAVING от WHERE заключается в том, что WHERE фильтрует строки перед агрегацией (группировкой), а HAHING фильтрует результаты после агрегации. Поэтому HAVING используется вместе с GROUP BY и агрегатными функциями (COUNT, SUM, AVG, MAX, MIN).

SELECT department_id, COUNT(*) as emp_count, AVG(salary) as avg_salary
FROM employees
GROUP BY department_id
HAVING AVG(salary) > 75000 AND COUNT(*) > 5;

Этот запрос найдёт отделы, где средняя зарплата превышает 75 000 и количество сотрудников больше 5.

Ограничение количества строк (LIMIT / FETCH / TOP)

Для фильтрации по количеству строк (например, получить только первые N записей) используются:

  • LIMIT в MySQL, PostgreSQL, SQLite.
    SELECT * FROM logs ORDER BY timestamp DESC LIMIT 10;
    
  • FETCH FIRST (стандартный SQL) в Oracle, DB2, PostgreSQL.
    SELECT * FROM logs ORDER BY timestamp DESC FETCH FIRST 10 ROWS ONLY;
    
  • TOP в SQL Server.
    SELECT TOP 10 * FROM logs ORDER BY timestamp DESC;
    

Подводя итог: стратегии фильтрации для QA Automation

При написании автоматизированных тестов, взаимодействующих с базой данных, важно понимать эти методы:

  • Для проверки состояния данных: Используйте WHERE с точными условиями для выборки конкретных тестовых записей, созданных в ходе теста.
  • Для проверки бизнес-правил и агрегированной статистики: Используйте комбинацию GROUP BY и HAVING.
  • Для работы с большими таблицами в тестах производительности: Используйте LIMIT для контроля объёма данных.
  • Для проверки связей между сущностями: Используйте фильтры в условиях JOIN.

Правильная фильтрация позволяет создавать эффективные, быстрые и точные запросы в тестах, проверяя именно те данные, которые относятся к текущему тестовому сценарию, минимизируя влияние "шума" от других записей в базе.