Операторы фильтрации

Последнее обновление: 16.05.2018

Оператор IN

Оператор IN определяет набор значений, которые должны иметь столбцы:

WHERE выражение [NOT] IN (выражение)

Выражение в скобках после IN определяет набор значений. Этот набор может вычисляться динамически на основании, например, еще одного запроса, либо это могут быть константные значения.

Например, выберем товары, у которых производитель либо Samsung, либо Xiaomi, либо Huawei:

SELECT * FROM Products
WHERE Manufacturer IN ('Samsung', 'HTC', 'Huawei');
Оператор IN в mysql

Оператор NOT, наоборот, позволяет выбрать все строки, столбцы которых не имеют определенных значений:

SELECT * FROM Products
WHERE Manufacturer NOT IN ('Samsung', 'HTC', 'Huawei');
Оператор NOT IN в mysql

Оператор BETWEEN

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

WHERE выражение [NOT] BETWEEN начальное_значение AND конечное_значение

Например, получим все товары, у которых цена от 20 000 до 50 000 (начальное и конечное значения также включаются в диапазон):

SELECT * FROM Products
WHERE Price BETWEEN 20000 AND 50000;
Оператор BETWEEN в mysql

Если надо, наоборот, выбрать те строки, которые не попадают в данный диапазон, то добавляется оператор NOT:

SELECT * FROM Products
WHERE Price NOT BETWEEN 20000 AND 50000;

Также можно использовать более сложные выражения. Например, получим товары по совокупной стоимости (цена * количество):

SELECT * FROM Products
WHERE Price * ProductCount BETWEEN 90000 AND 150000;

Операторы LIKE и REGEXP

Оператор 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%';
Оператор LIKE в MySQL

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';
Оператор REGEXP в MySQL

IS NULL

Оператор IS NULL позволяет выбрать все строки, столбцы которых имеют значение NULL:

SELECT * FROM Products
WHERE ProductCount IS NULL;

С помощью добавления оператора NOT можно, наоброт, выбрать строки, столбцы которых не имеют значения NULL:

SELECT * FROM Products
WHERE ProductCount IS NOT NULL;
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850