Для конкретизации выборки SQLite позволяет применять ряд операторов. Рассмотрим их.
Оператор 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');
Оператор NOT, наоборот, позволяет выбрать все строки, не соответствуют критерию:
SELECT * FROM products WHERE company NOT IN ('Samsung', 'Xiaomi', 'Huawei');
Оператор BETWEEN определяет диапазон значений с помощью начального и конечного значения, которому должно соответствовать выражение:
выражение [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 * product_count BETWEEN 90000 AND 150000;
Оператор 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%';
Оператор 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*';
Оператор IS NULL позволяет выбрать все строки, столбцы которых имеют значение NULL:
SELECT * FROM products WHERE product_count IS NULL;
С помощью добавления оператора NOT можно, наоброт, выбрать строки, столбцы которых не имеют значения NULL:
SELECT * FROM products WHERE product_count IS NOT NULL;