MySQL оператори фільтрації


оператор IN

Оператор 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

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

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

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

SELECT * FROM Products
WHERE ProductCount IS NULL;

За допомогою додавання оператора NOT можна, наоброт, вибрати рядки, стовпчики яких не мають значення NULL :

SELECT * FROM Products
WHERE ProductCount IS NOT NULL;

 


Наш партнер:
beta test mp3 playlist downloader