
Условие в SQL определяет, какие строки из таблицы будут включены в результат запроса. Основной инструмент для этого – оператор WHERE. Он сравнивает значения столбцов с заданными константами или результатами функций. Например, SELECT * FROM orders WHERE amount > 1000; вернёт все заказы, сумма которых превышает 1000 единиц.
Для работы с несколькими условиями используют логические операторы AND, OR и NOT. Последовательность их применения влияет на результат, поэтому важно использовать скобки для явного определения порядка вычислений: SELECT * FROM orders WHERE (amount > 1000 AND status = ‘confirmed’) OR priority = ‘high’;
SQL поддерживает фильтрацию по шаблону с помощью LIKE, где символы % и _ обозначают произвольное количество и один символ соответственно. Например, WHERE customer_name LIKE ‘Ив%’ выберет всех клиентов, чьи имена начинаются с «Ив». Для числовых диапазонов удобен оператор BETWEEN, а для проверки нескольких значений – IN.
При работе с NULL-значениями условие требует отдельного внимания. Прямое сравнение = NULL не сработает; нужно использовать IS NULL или IS NOT NULL. Например, SELECT * FROM users WHERE last_login IS NULL; вернёт пользователей, которые ещё не заходили в систему.
Использование функций внутри условий расширяет возможности фильтрации. DATE, YEAR, TRIM и LOWER позволяют сравнивать даты, извлекать части строк и нормализовать текст без изменения исходных данных. Пример: WHERE YEAR(order_date) = 2025 AND LOWER(status) = ‘pending’;
Использование WHERE для фильтрации строк по конкретным значениям

Ключевое применение оператора WHERE – выборка строк, соответствующих точным значениям столбцов. Синтаксис простой: SELECT * FROM table_name WHERE column_name = 'значение';. Например, для таблицы employees, чтобы получить всех сотрудников с должностью «Менеджер»: SELECT * FROM employees WHERE position = 'Менеджер';.
Для фильтрации по нескольким значениям используется оператор IN: SELECT * FROM employees WHERE department IN ('Продажи', 'Маркетинг');. Такой подход эффективнее последовательного использования OR и упрощает поддержку запросов при расширении списка значений.
Сравнения числовых значений выполняются через =, <, >, <=, >=. Например, SELECT * FROM products WHERE price <= 1000; вернёт все товары стоимостью до 1000 единиц.
Для точного соответствия строк используется чувствительность к регистру базы данных. В PostgreSQL строковые сравнения чувствительны к регистру, а в MySQL можно применять COLLATE для игнорирования регистра: WHERE name COLLATE UTF8_GENERAL_CI = 'Иван'.
Использование WHERE с датами требует точного формата, совпадающего с типом столбца. Пример: SELECT * FROM orders WHERE order_date = '2025-10-01';. Для диапазонов удобно применять BETWEEN: WHERE order_date BETWEEN '2025-10-01' AND '2025-10-31'.
При фильтрации по NULL значение необходимо использовать IS NULL или IS NOT NULL, так как = NULL не работает: SELECT * FROM customers WHERE phone IS NULL;.
Для комплексных условий можно комбинировать несколько фильтров через AND и OR, например: SELECT * FROM employees WHERE department = 'ИТ' AND position = 'Разработчик';. Это обеспечивает точную выборку без лишних строк.
Применение операторов сравнения: =, <>, >, =,

Оператор BETWEEN позволяет выбирать строки, значения которых попадают в заданный диапазон, включая границы. Синтаксис: column BETWEEN значение_минимум AND значение_максимум. Для исключения диапазона используется NOT BETWEEN.
Пример выборки заказов с суммой от 1000 до 5000 рублей:
SELECT *
FROM orders
WHERE total_amount BETWEEN 1000 AND 5000;
Для диапазонов с датами оператор BETWEEN учитывает включительно начало и конец:
SELECT *
FROM orders
WHERE order_date BETWEEN '2025-01-01' AND '2025-01-31';
Чтобы исключить определённый диапазон, применяется NOT BETWEEN. Пример: выбор клиентов, которые сделали заказы меньше 1000 или больше 5000 рублей:
SELECT *
FROM customers
WHERE total_orders NOT BETWEEN 1000 AND 5000;
Использование BETWEEN эффективно при работе с числовыми, датированными и символьными полями, где важна непрерывность диапазона. Следует учитывать, что:
| Особенность | Рекомендация |
|---|---|
| Границы включаются | Если требуется исключить граничные значения, используйте < или >. |
| Тип данных | BETWEEN корректно работает с INT, DECIMAL, DATE, DATETIME и CHAR/VARCHAR. |
| NULL-значения | Строки с NULL игнорируются. Для включения NULL используйте OR column IS NULL. |
| Сортировка | BETWEEN работает корректно независимо от порядка сортировки таблицы. |
Комбинация BETWEEN и NOT BETWEEN позволяет строить гибкие фильтры: выбирать диапазоны, исключать промежутки и комбинировать несколько условий с AND или OR. Это уменьшает сложность запросов и повышает читаемость SQL-кода.
Поиск совпадений с помощью LIKE и шаблонов

Оператор LIKE используется для поиска строк, соответствующих определённому шаблону. В шаблонах применяются символы подстановки: % обозначает любое количество символов, включая ноль, а _ – ровно один символ.
Пример поиска всех пользователей, имена которых начинаются с «А»:
SELECT * FROM users WHERE name LIKE 'А%';
Для поиска строк, где третий символ – «т»:
SELECT * FROM products WHERE code LIKE '__т%';
Если нужно искать конкретные символы, включая символы подстановки, используется экранирование. Например, поиск строк с символом «%»:
SELECT * FROM notes WHERE content LIKE '%\%%' ESCAPE '\';
Оператор NOT LIKE исключает совпадения по шаблону. Например, выбор всех клиентов, чьи email не оканчиваются на «@example.com»:
SELECT * FROM clients WHERE email NOT LIKE '%@example.com';
Чувствительность к регистру зависит от используемой СУБД: в PostgreSQL рекомендуется использовать ILIKE для нечувствительного поиска.
Для повышения производительности запросов с LIKE стоит избегать шаблонов, начинающихся с %, поскольку это препятствует использованию индексов.
Комбинирование LIKE с другими условиями через AND и OR позволяет строить сложные фильтры, например:
SELECT * FROM orders WHERE status LIKE 'оплачено%' AND customer_name LIKE 'Ив%';
Объединение условий с AND, OR и NOT
В SQL фильтрация данных становится гибкой при использовании логических операторов AND, OR и NOT. Они позволяют комбинировать несколько условий в одном запросе.
AND применяется, когда необходимо, чтобы выполнялись все условия одновременно. Пример:
SELECT *
FROM employees
WHERE department = 'Sales' AND salary > 50000;
Этот запрос вернёт только сотрудников из отдела продаж с зарплатой выше 50 000.
OR используется, когда достаточно выполнения хотя бы одного условия. Пример:
SELECT *
FROM employees
WHERE department = 'HR' OR department = 'IT';
Результатом будут сотрудники либо из HR, либо из IT.
NOT инвертирует условие, исключая строки, соответствующие определённому критерию. Пример:
SELECT *
FROM employees
WHERE NOT department = 'Finance';
Выборка исключит сотрудников из финансового отдела.
Комбинирование операторов позволяет создавать сложные фильтры. Важно использовать скобки для управления приоритетом выполнения:
SELECT *
FROM employees
WHERE (department = 'Sales' OR department = 'Marketing') AND salary > 60000;
Сначала выполняется проверка отдела, затем фильтрация по зарплате. Без скобок результат может отличаться, так как AND имеет более высокий приоритет, чем OR.
Рекомендации при использовании AND, OR и NOT:
- Использовать скобки для явного контроля порядка выполнения условий.
- Сначала фильтровать по наиболее селективным условиям для оптимизации производительности.
- Не злоупотреблять NOT в сложных логических конструкциях, чтобы не усложнять читаемость запроса.
- Проверять результаты на тестовых данных, особенно при комбинировании OR и AND.
Фильтрация по множеству значений через IN и NOT IN

Операторы IN и NOT IN позволяют отбирать строки, соответствующие одному или нескольким значениям конкретного столбца. Они особенно полезны, когда список значений известен заранее и велик, но использование множества OR становится громоздким.
Пример фильтрации по списку конкретных категорий товаров:
SELECT product_id, name, category
FROM products
WHERE category IN ('Электроника', 'Книги', 'Игрушки');
Использование NOT IN позволяет исключить несколько значений:
SELECT product_id, name, category
FROM products
WHERE category NOT IN ('Одежда', 'Обувь');
Рекомендации по применению:
- Список значений в
INиNOT INможно формировать через подзапрос:
SELECT customer_id, name
FROM customers
WHERE city IN (SELECT city FROM offices WHERE region = 'Север');
NOT IN с подзапросом, возвращающим NULL – результат будет пустым. Предпочтительно использовать NOT EXISTS в таких случаях.Фильтрация через IN и NOT IN повышает читаемость запросов, сокращает количество условий и упрощает поддержку кода по сравнению с множественными OR или AND.
Вопрос-ответ:
Как правильно использовать оператор WHERE для фильтрации данных в SQL?
Оператор WHERE позволяет выбирать только те строки, которые удовлетворяют определённому условию. Например, если нужно получить все записи о заказах с суммой больше 1000, можно написать: SELECT * FROM orders WHERE amount > 1000;. Здесь условие amount > 1000 ограничивает выборку только нужными записями.
Можно ли в условии SQL использовать несколько проверок одновременно?
Да, несколько условий объединяются с помощью логических операторов AND и OR. Например, чтобы выбрать клиентов из Москвы старше 30 лет, можно написать: SELECT * FROM customers WHERE city = 'Moscow' AND age > 30;. Оператор AND требует, чтобы выполнялись все условия одновременно, а OR позволяет выбрать строки, удовлетворяющие хотя бы одному из условий.
Что такое оператор IN и когда его удобнее использовать?
Оператор IN позволяет проверить, входит ли значение в заданный список. Это удобнее, чем писать несколько OR. Например, чтобы выбрать сотрудников из отделов 1, 2 или 3, пишут: SELECT * FROM employees WHERE department_id IN (1, 2, 3);. Такой синтаксис упрощает чтение запроса и уменьшает вероятность ошибок.
Как применять условия с текстовыми полями в SQL?
Для строковых данных часто используют оператор LIKE. Он позволяет искать по шаблону. Например, чтобы найти всех клиентов, чьи имена начинаются с буквы «А», используют: SELECT * FROM customers WHERE name LIKE 'A%';. Процент (%) обозначает любую последовательность символов после буквы «А». Можно также использовать подчеркивание (_) для замены одного символа.
Можно ли использовать условия для вычисляемых значений?
Да, в SQL условие WHERE может включать выражения и функции. Например, чтобы выбрать заказы, где сумма налога больше 10% от суммы заказа, можно написать: SELECT * FROM orders WHERE tax > amount * 0.1;. Таким образом, фильтрация происходит не только по исходным данным, но и по вычисленным значениям.
