Оператор IN
Оператор IN определяет набор значений, которые должны иметь столбцы:
| 1 | WHERE выражение [NOT] IN (выражение) |
Выражение в скобках после IN определяет набор значений. Этот набор может вычисляться динамически на основании, например, еще одного запроса, либо это могут быть константные значения.
Например, выберем товары, у которых производитель либо Samsung, либо Xiaomi, либо Huawei:
| 1 2 | SELECT * FROM ProductsWHERE Manufacturer IN ('Samsung', 'HTC', 'Huawei'); |

Оператор NOT, наоборот, позволяет выбрать все строки, столбцы которых не имеют определенных значений:
| 1 2 | SELECT * FROM ProductsWHERE Manufacturer NOT IN ('Samsung', 'HTC', 'Huawei'); |

Оператор BETWEEN
Оператор BETWEEN определяет диапазон значений с помощью начального и конечного значения, которому должно соответствовать выражение:
| 1 | WHERE выражение [NOT] BETWEEN начальное_значение AND конечное_значение |
Например, получим все товары, у которых цена от 20 000 до 50 000 (начальное и конечное значения также включаются в диапазон):
| 1 2 | SELECT * FROM ProductsWHERE Price BETWEEN 20000 AND 50000; |

Если надо, наоборот, выбрать те строки, которые не попадают в данный диапазон, то добавляется оператор NOT:
| 1 2 | SELECT * FROM ProductsWHERE Price NOT BETWEEN 20000 AND 50000; |
Также можно использовать более сложные выражения. Например, получим товары по совокупной стоимости (цена * количество):
| 1 2 | SELECT * FROM ProductsWHERE Price * ProductCount BETWEEN 90000 AND 150000; |
Операторы LIKE и REGEXP
Оператор LIKE принимает шаблон строки, которому должно соответствовать выражение.
| 1 | WHERE выражение [NOT] LIKE шаблон_строки |
Для определения шаблона могут применяться ряд специальных символов подстановки:
- %: соответствует любой подстроке, которая может иметь любое количество символов, при этом подстрока может и не содержать ни одного символаНапример, выражение
WHERE ProductName LIKE 'Galaxy%'соответствует таким значениям как «Galaxy Ace 2» или «Galaxy S7» - _: соответствует любому одиночному символуНапример, выражение
WHERE ProductName LIKE 'Galaxy S_'соответствует таким значениям как «Galaxy S7» или «Galaxy S8».
Применим оператор LIKE:
| 1 2 | SELECT * FROM ProductsWHERE ProductName LIKE 'iPhone%'; |

REGEXP позволяет задать регулярное выражение, которому должно соответствовать значение столбца. В этом плане REGEXP представляет более изощренный и комплексный способ фильтрации, нежели оператор LIKE. REGEXP имеет похожий синтаксис:
| 1 | WHERE выражение [NOT] REGEXP регулярное выражение |
Регулярное выражение может принимать следующие специальные символы:
- ^: указывает на начало строки
- $: указывает на конец строки
- .: соответствует любому одиночному символу
- [символы]: соответствует любому одиночному символу из скобок
- [начальный_символ-конечный_символ]: соответствует любому одиночному символу из диапазона символов
- |: отделяет два шаблона строки, и значение должно соответствовать одну из этих шаблонов
Примеры REGEXP:
WHERE ProductName REGEXP 'Phone': строка должна содержать «Phone», например,iPhone X,Nokia Phone N,iPhoneWHERE ProductName REGEXP '^Phone': строка должна начинаться с «Phone», например,Phone 34,PhoneXWHERE ProductName REGEXP 'Phone$': строка должна заканчиваться на «Phone», например,iPhone,Nokia PhoneWHERE ProductName REGEXP 'iPhone [78]';: строка должна содержать либоiPhone 7, либоiPhone 8WHERE ProductName REGEXP 'iPhone [6-8]';: строка должна содержать либоiPhone 6, либоiPhone 7, либоiPhone 8
Например, найдем товары, названия которых содержат либо «Phone», либо «Galaxy»:
| 1 2 | SELECT * FROM ProductsWHERE ProductName REGEXP 'Phone|Galaxy'; |

IS NULL
Оператор IS NULL позволяет выбрать все строки, столбцы которых имеют значение NULL:
| 1 2 | SELECT * FROM ProductsWHERE ProductCount IS NULL; |
С помощью добавления оператора NOT можно, наоброт, выбрать строки, столбцы которых не имеют значения NULL:
2 | SELECT * FROM ProductsWHERE ProductCount IS NOT NULL; |