Оператор IN определяет набор значений, которые должны иметь столбцы:
WHERE выражение [NOT] IN (выражение)
Выражение в скобках после IN определяет набор значений. Этот набор может вычисляться динамически на основании, например, еще одного запроса, либо это могут быть константные значения.
Например, выберем товары, у которых производитель либо Samsung, либо Xiaomi, либо Huawei:
SELECT * FROM Products WHERE Manufacturer IN ('Samsung', 'HTC', 'Huawei');
Оператор NOT, наоборот, позволяет выбрать все строки, столбцы которых не имеют определенных значений:
SELECT * FROM Products WHERE Manufacturer NOT IN ('Samsung', 'HTC', 'Huawei');
Оператор BETWEEN определяет диапазон значений с помощью начального и конечного значения, которому должно соответствовать выражение:
WHERE выражение [NOT] BETWEEN начальное_значение AND конечное_значение
Например, получим все товары, у которых цена от 20 000 до 50 000 (начальное и конечное значения также включаются в диапазон):
SELECT * FROM Products WHERE Price BETWEEN 20000 AND 50000;
Если надо, наоборот, выбрать те строки, которые не попадают в данный диапазон, то добавляется оператор NOT:
SELECT * FROM Products WHERE Price NOT BETWEEN 20000 AND 50000;
Также можно использовать более сложные выражения. Например, получим товары по совокупной стоимости (цена * количество):
SELECT * FROM Products WHERE Price * ProductCount BETWEEN 90000 AND 150000;
Оператор LIKE принимает шаблон строки, которому должно соответствовать выражение.
WHERE выражение [NOT] LIKE шаблон_строки
Для определения шаблона могут применяться ряд специальных символов подстановки:
%: соответствует любой подстроке, которая может иметь любое количество символов, при этом подстрока может и не содержать ни одного символа
Например, выражение WHERE ProductName LIKE 'Galaxy%'
соответствует таким значениям как "Galaxy Ace 2" или "Galaxy S7"
_: соответствует любому одиночному символу
Например, выражение WHERE ProductName LIKE 'Galaxy S_'
соответствует таким значениям как "Galaxy S7" или "Galaxy S8".
Применим оператор LIKE:
SELECT * FROM Products WHERE ProductName LIKE 'iPhone%';
REGEXP позволяет задать регулярное выражение, которому должно соответствовать значение столбца. В этом плане REGEXP представляет более изощренный и комплексный способ фильтрации, нежели оператор LIKE. REGEXP имеет похожий синтаксис:
WHERE выражение [NOT] REGEXP регулярное выражение
Регулярное выражение может принимать следующие специальные символы:
^: указывает на начало строки
$: указывает на конец строки
.: соответствует любому одиночному символу
[символы]: соответствует любому одиночному символу из скобок
[начальный_символ-конечный_символ]: соответствует любому одиночному символу из диапазона символов
|: отделяет два шаблона строки, и значение должно соответствовать одну из этих шаблонов
Примеры REGEXP:
WHERE ProductName REGEXP 'Phone'
: строка должна содержать "Phone", например, iPhone X
, Nokia Phone N
, iPhone
WHERE ProductName REGEXP '^Phone'
: строка должна начинаться с "Phone", например, Phone 34
, PhoneX
WHERE ProductName REGEXP 'Phone$'
: строка должна заканчиваться на "Phone", например, iPhone
, Nokia Phone
WHERE ProductName REGEXP 'iPhone [78]';
: строка должна содержать либо iPhone 7
, либо iPhone 8
WHERE ProductName REGEXP 'iPhone [6-8]';
: строка должна содержать либо iPhone 6
, либо iPhone 7
, либо iPhone 8
Например, найдем товары, названия которых содержат либо "Phone", либо "Galaxy":
SELECT * FROM Products WHERE ProductName REGEXP 'Phone|Galaxy';
Оператор IS NULL позволяет выбрать все строки, столбцы которых имеют значение NULL:
SELECT * FROM Products WHERE ProductCount IS NULL;
С помощью добавления оператора NOT можно, наоброт, выбрать строки, столбцы которых не имеют значения NULL:
SELECT * FROM Products WHERE ProductCount IS NOT NULL;