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

Какие операторы использовать для формирования условий в SQL

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

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

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

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

Условные операторы в SQL

Для формирования условий в SQL (Structured Query Language) используются различные операторы, которые можно разделить на несколько категорий: операторы сравнения, логические операторы, операторы для работы с диапазонами, списками и шаблонами, а также специализированные операторы для проверки NULL значений.

Основные операторы сравнения

Эти операторы используются для сравнения значений в условиях WHERE, HAVING, CASE и других конструкциях:

  • = (равно): Проверяет равенство значений.
    SELECT * FROM employees WHERE department_id = here;
    
  • <> или != (не равно): Проверяет неравенство значений.
    SELECT * FROM products WHERE status != 'DISCONTINUED';
    
  • > (больше), < (меньше): Сравнивает числовые, датовые или строковые значения.
    SELECT * FROM orders WHERE order_date > '2024-01-01';
    
  • >= (больше или равно), <= (меньше или равно).
    SELECT * FROM inventory WHERE quantity <= reorder_level;
    

Логические операторы

Они позволяют комбинировать несколько простых условий в сложные логические выражения:

  • AND (И): Возвращает TRUE, если оба условия истинны.
    SELECT * FROM users WHERE active = TRUE AND registration_year >= 2023;
    
  • OR (ИЛИ): Возвращает TRUE, если хотя бы одно из условий истинно.
    SELECT * FROM tickets WHERE status = 'OPEN' OR status = 'IN_PROGRESS';
    
  • NOT (НЕ): Инвертирует (отрицает) условие.
    SELECT * FROM customers WHERE NOT country = 'USA';
    

Операторы для работы с диапазонами и списками

  • BETWEEN ... AND ...: Проверяет, попадает ли значение в указанный диапазон включительно.
    SELECT * FROM sales WHERE amount BETWEEN 1000 AND 5000;
    
  • IN (список): Проверяет, совпадает ли значение с одним из элементов в списке. Крайне полезен для замены нескольких условий OR.
    SELECT * FROM products WHERE category_id IN (1, 5, 7);
    
  • NOT BETWEEN и NOT IN: Отрицательные формы этих операторов.

Операторы для работы с шаблонами (Pattern Matching)

  • LIKE: Используется для поиска по шаблону в строковых полях. Работает с двумя специальными символами:
    *   `%` (процент): Обозначает **любую последовательность** символов (включая пустую).
    *   `_` (нижнее подчеркивание): Обозначает **ровно один** любой символ.
```sql
-- Найти имена, начинающиеся на 'A'
SELECT * FROM clients WHERE name LIKE 'A%';
-- Найти email-адреса из домена gmail.com
SELECT * FROM users WHERE email LIKE '%@gmail.com';
-- Найти коды товаров по шаблону: ABC-123-X
SELECT * FROM items WHERE code LIKE 'ABC-_-_-X';
```
  • ILIKE (в PostgreSQL и некоторых других СУБД): Регистронезависимая версия LIKE.
  • NOT LIKE: Для отрицания условия.

Специальные операторы для NULL значений

Важно помнить, что NULL — это отсутствие значения, и его нельзя сравнивать обычными операторами (=, <>). Для этого существуют:

  • IS NULL: Проверяет, является ли значение NULL.
    SELECT * FROM employees WHERE termination_date IS NULL;
    
  • IS NOT NULL: Проверяет, что значение не является NULL.
    SELECT * FROM orders WHERE shippment_id IS NOT NULL;
    

Условные выражения CASE

Хотя CASE — это не оператор, а выражение, оно активно используется для формирования условной логики непосредственно в теле запроса, в SELECT, ORDER BY и других разделах.

SELECT
    product_name,
    quantity,
    CASE
        WHEN quantity = 0 THEN 'Out of Stock'
        WHEN quantity < 10 THEN 'Low Stock'
        ELSE 'In Stock'
    END AS stock_status
FROM products;

Практические рекомендации по использованию

  1. Приоритет операторов: Как и в других языках, в SQL есть приоритет операций. NOT имеет высший приоритет, затем AND, затем OR. Всегда используйте скобки () для явного указания порядка вычисления в сложных условиях, это улучшает читаемость и предотвращает логические ошибки.

    -- Неоднозначно: какие условия объединяются?
    SELECT * FROM log WHERE level = 'ERROR' OR level = 'CRITICAL' AND date > '2024-01-01';
    -- Ясно и правильно
    SELECT * FROM log WHERE (level = 'ERROR' OR level = 'CRITICAL') AND date > '2024-01-01';
    
  2. Производительность: Использование функций над полями в условиях WHERE (например, WHERE UPPER(name) = 'JOHN') часто приводит к отказу от использования индексов и полному сканированию таблицы (table scan). По возможности, переписывайте условие.

  3. Читаемость: Оператор IN почти всегда предпочтительнее серии OR для проверки одного поля на равенство нескольким значениям. BETWEEN более лаконичен и понятен, чем два условия с >= и <=.

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

Какие операторы использовать для формирования условий в SQL | PrepBro