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

Поділитись

Оператор IN

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

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

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

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

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

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

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

Оператор BETWEEN

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

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

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

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

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

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

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

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

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

Оператор LIKE принимает шаблон строки, которому должно соответствовать выражение.

1WHERE выражение [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 Products
WHERE ProductName LIKE 'iPhone%';
Оператор LIKE в MySQL

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

1WHERE выражение [NOT] REGEXP регулярное выражение

Регулярное выражение может принимать следующие специальные символы:

  • ^: указывает на начало строки
  • $: указывает на конец строки
  • .: соответствует любому одиночному символу
  • [символы]: соответствует любому одиночному символу из скобок
  • [начальный_символ-конечный_символ]: соответствует любому одиночному символу из диапазона символов
  • |: отделяет два шаблона строки, и значение должно соответствовать одну из этих шаблонов

Примеры REGEXP:

  • WHERE ProductName REGEXP 'Phone': строка должна содержать “Phone”, например, iPhone XNokia Phone NiPhone
  • WHERE ProductName REGEXP '^Phone': строка должна начинаться с “Phone”, например, Phone 34PhoneX
  • WHERE ProductName REGEXP 'Phone$': строка должна заканчиваться на “Phone”, например, iPhoneNokia Phone
  • WHERE ProductName REGEXP 'iPhone [78]';: строка должна содержать либо iPhone 7, либо iPhone 8
  • WHERE ProductName REGEXP 'iPhone [6-8]';: строка должна содержать либо iPhone 6, либо iPhone 7, либо iPhone 8

Например, найдем товары, названия которых содержат либо “Phone”, либо “Galaxy”:

1
2
SELECT * FROM Products
WHERE ProductName REGEXP 'Phone|Galaxy';
Оператор REGEXP в MySQL

IS NULL

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

1
2
SELECT * FROM Products
WHERE ProductCount IS NULL;

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


2
SELECT * FROM Products
WHERE ProductCount IS NOT NULL;


Поділитись