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

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

Для конкретизации выборки SQLite позволяет применять ряд операторов. Рассмотрим их.

Оператор IN

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

выражение [NOT] IN (набор_значений | выражение)

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

Например, пусть у нас есть следующая таблица products:

DROP TABLE IF EXISTS products;
CREATE TABLE products
(
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    company TEXT NOT NULL,
    product_count INTEGER DEFAULT 0,
    price INTEGER
);
  
INSERT INTO products (name, company, product_count, price)
VALUES
('iPhone 13', 'Apple', 3, 76000),
('iPhone 12', 'Apple', 3, 51000),
('Galaxy S21', 'Samsung', 2, 56000),
('Galaxy S20', 'Samsung', 1, 41000),
('P40 Pro', 'Huawei', 5, 36000),
('Nokia XR20', 'HMD Global', 2, 45000),
('T11 Pro', 'Xiaomi', 1, 54000);

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

SELECT * FROM products
WHERE company IN ('Samsung', 'Xiaomi', 'Huawei');
Оператор IN в SQLite

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

SELECT * FROM products
WHERE company NOT IN ('Samsung', 'Xiaomi', 'Huawei');
Оператор NOT IN в SQLite

Оператор BETWEEN

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

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

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

SELECT * FROM products
WHERE price BETWEEN 20000 AND 50000;
Оператор BETWEEN в SQLite

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

SELECT * FROM products
WHERE price NOT BETWEEN 20000 AND 50000;

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

SELECT * FROM products
WHERE price * product_count BETWEEN 90000 AND 150000;

Оператор LIKE

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

WHERE выражение [NOT] LIKE шаблон_строки

Для определения шаблона могут применяться ряд специальных символов подстановки:

  • %: соответствует любой подстроке, которая может иметь любое количество символов, при этом подстрока может и не содержать ни одного символа

    Например, выражение WHERE name LIKE 'Galaxy%' соответствует таким значениям как "Galaxy Ace 2" или "Galaxy S7"

  • _: соответствует любому одиночному символу

    Например, выражение WHERE name LIKE 'Galaxy S_' соответствует таким значениям как "Galaxy S7" или "Galaxy S8".

Применим оператор LIKE:

SELECT * FROM products
WHERE name LIKE 'iPhone%';
Оператор LIKE в SQLite

GLOB

Оператор GLOB также позволяет проверить, соответствует ли строка некоторому выражению. GLOB имеет похожий синтаксис:

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

Оператор GLOB может использовать следующие специальные символы:

  • *: соответствует любому количеству символов

  • ?: соответствует одному символу

  • .: соответствует любому одиночному символу

  • [символы]: соответствует любому одиночному символу из списка символов внутри скобок ([abc])

  • [начальный_символ-конечный_символ]: соответствует любому одиночному символу из диапазона символов ([a-zA-Z0-9])

  • ^: этот символ используется в начале списка символов и соответствует любому символу, которое НЕ входит в список ([^0-9])

Также следует учитывать, что оператор GLOB регистрозависимый.

Примеры GLOB:

  • WHERE name GLOB '*Pro': строка должна содержать оканчиваться на "Pro", например, T11 Pro, P40 Pro, iPhone X Pro

  • WHERE name GLOB '*2?': строка должна иметь символ "2", перед которым может идти любое количество символов, а после - идет один символ, например, Nokia XR20, Galaxy S21

  • WHERE name GLOB 'iPhone 1[012]': строка должна начинаться на iPhone 1, и затем идет одна цифра: 0, 1 или 2. Соответствует либо iPhone 10. либо iPhone 11, либо iPhone 12

  • WHERE name GLOB 'iPhone [6-8]': строка должна содержать либо iPhone 6, либо iPhone 7, либо iPhone 8

Например, найдем товары, названия которых содержат "Phone":

SELECT * FROM products
WHERE name  GLOB '*Phone*';
Оператор GLOB в SQLite

IS NULL

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

SELECT * FROM products
WHERE product_count IS NULL;

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

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