Как работает оператор WHERE?
Оператор WHERE в SQL используется для фильтрации строк, извлекаемых из базы данных при выполнении запроса. Он позволяет задать условие, которому должны соответствовать строки, чтобы попасть в результирующий набор. Если строка удовлетворяет этому условию, она включается в результат. Если не удовлетворяет — исключается.
Оператор WHERE может применяться во многих SQL-операциях, включая SELECT, UPDATE, DELETE, а также в подзапросах. Он играет ключевую роль в выборке нужной информации из таблиц.
Общий синтаксис оператора WHERE
SELECT столбцы
FROM таблица
WHERE условие;
Примеры использования
Простой пример
SELECT \* FROM Employees
WHERE Department = 'Sales';
Выбирает всех сотрудников из отдела продаж.
С числовым условием
SELECT \* FROM Products
WHERE Price > 100;
Выбирает продукты с ценой больше 100.
С датой
SELECT \* FROM Orders
WHERE OrderDate >= '2024-01-01';
Выбирает заказы, оформленные начиная с 1 января 2024 года.
Поддерживаемые операторы в WHERE
1. Сравнение значений
-
\= — равно
-
!= или <> — не равно
-
> — больше
-
< — меньше
-
>= — больше или равно
-
<= — меньше или равно
Пример:
SELECT \* FROM Employees
WHERE Salary >= 50000;
2. Логические операторы
-
AND — логическое И
-
OR — логическое ИЛИ
-
NOT — логическое НЕ
SELECT \* FROM Employees
WHERE Department = 'IT' AND Salary > 60000;
SELECT \* FROM Orders
WHERE NOT Status = 'Cancelled';
3. Множественный выбор: IN
SELECT \* FROM Products
WHERE Category IN ('Books', 'Electronics', 'Toys');
Оператор IN эквивалентен нескольким условиям OR, но работает быстрее и читается лучше.
4. Диапазоны: BETWEEN ... AND
SELECT \* FROM Products
WHERE Price BETWEEN 100 AND 200;
Включает оба края диапазона (100 и 200). Эквивалентен:
WHERE Price >= 100 AND Price <= 200
5. Поиск по шаблону: LIKE
Используется для поиска по строковым шаблонам. Поддерживает подстановочные символы:
-
% — любое количество любых символов
-
_ — ровно один любой символ
SELECT \* FROM Customers
WHERE Name LIKE 'A%'; -- Имя начинается с "A"
SELECT \* FROM Customers
WHERE Email LIKE '%@gmail.com'; -- Email заканчивается на @gmail.com
6. Проверка на NULL: IS NULL / IS NOT NULL
SELECT \* FROM Users
WHERE PhoneNumber IS NULL;
SELECT \* FROM Orders
WHERE DeliveryDate IS NOT NULL;
NULL — это специальное значение "пусто", оно не эквивалентно ни 0, ни пустой строке. Проверки через = с NULL не работают, используется только IS NULL.
7. С подзапросами
SELECT \* FROM Employees
WHERE DepartmentID IN (
SELECT ID FROM Departments WHERE Name = 'HR'
);
8. Сложные условия
Можно комбинировать условия с помощью скобок:
SELECT \* FROM Orders
WHERE (Status = 'Pending' OR Status = 'Processing')
AND OrderDate >= '2023-01-01';
WHERE в других операциях
В UPDATE:
UPDATE Employees
SET Salary = Salary \* 1.1
WHERE Department = 'Sales';
В DELETE:
DELETE FROM Orders
WHERE Status = 'Cancelled';
В подзапросах:
SELECT Name FROM Customers
WHERE ID NOT IN (
SELECT CustomerID FROM Orders
);
Порядок выполнения с WHERE
Когда выполняется SQL-запрос, WHERE используется до GROUP BY, HAVING и ORDER BY. Это значит, что фильтрация с WHERE происходит до всех агрегаций и сортировок.
Пример:
SELECT Department, AVG(Salary)
FROM Employees
WHERE Active = 1
GROUP BY Department;
Здесь WHERE Active = 1 сначала исключает неактивных сотрудников, и только потом выполняется группировка.
Особенности и подводные камни
-
WHERE не может использовать псевдонимы столбцов, объявленные в SELECT.
-
Нельзя сравнивать NULL с помощью = или !=, только через IS NULL или IS NOT NULL.
-
Условия с OR могут мешать использованию индексов — следует внимательно анализировать производительность.
-
Для строк в SQL сравнение чувствительно к регистру или нечувствительно в зависимости от настроек коллатора базы данных.
Оператор WHERE — это мощный и гибкий механизм фильтрации строк в SQL. Он предоставляет большое разнообразие способов задать условия, от простых сравнений до вложенных подзапросов и шаблонов. Его правильное использование критично как для получения корректных результатов, так и для оптимизации производительности запросов.