Фильтрация данных. Оператор WHERE

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

Нередко при получении данных из БД выбираются только те данные, которые соответствуют некоторому определенному условию. Для фильтрации данных в команде SELECT применяется оператор WHERE, после которого указывается условие:

WHERE условие

Если условие истинно, то строка попадает в результирующую выборку. В качестве можно использовать операции сравнения, которые сравнивают два выражения:

  • =: сравнение на равенство

  • !=: сравнение на неравенство

  • <>: сравнение на неравенство

  • <: меньше чем

  • >: больше чем

  • <=: меньше чем или равно

  • >=: больше чем или равно

К примеру, возьмем следующую таблицу 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', 2, 51000),
('Galaxy S21', 'Samsung', 2, 56000),
('Galaxy S20', 'Samsung', 1, 41000),
('P40 Pro', 'Huawei', 5, 36000);

Выберем из этой таблицы все товары, производителем которых является компания Samsung:

SELECT * FROM products
WHERE company = 'Samsung';
Оператор WHERE в SQLite

Стоит отметить, что для SQLite важен регистр символов, и, к примеру, строка "Samsung" НЕ будет эквивалентна строке "SAMSUNG" или "samSunG".

Другой пример - найдем все товары, количество которых меньше 3:

SELECT * FROM products
WHERE product_count < 3;

Критерий фильтрации может представлять и более сложное составное выражение. Например, найдем все товары, у которых совокупная стоимость больше 100 000:

SELECT * FROM products
WHERE product_count * price > 100000;
Фильтрация данных с помощью WHERE в SQLite

Логические операторы

Логические операторы позволяют объединить несколько условий. В SQLite можно использовать следующие логические операторы:

  • AND: операция логического И. Она объединяет два выражения:

    выражение1 AND выражение2

    Только если оба этих выражения одновременно истинны, то и общее условие оператора AND также будет истинно. То есть если и первое условие истинно, и второе.

  • OR: операция логического ИЛИ. Она также объединяет два выражения:

    выражение1 OR выражение2

    Если хотя бы одно из этих выражений истинно, то общее условие оператора OR также будет истинно. То есть если или первое условие истинно, или второе.

  • NOT: операция логического отрицания. Если выражение в этой операции ложно, то общее условие истинно.

    NOT выражение

Например, выберем все товары, у которых производитель Samsung и одновременно цена больше 50000:

SELECT * FROM products
WHERE company = 'Samsung' AND price > 50000;
Логический оператор AND в SQLite

Теперь изменим оператор на OR. То есть выберем все товары, у которых либо производитель Samsung, либо цена больше 50000:

SELECT * FROM products
WHERE company = 'Samsung' OR price > 50000;
Логический оператор OR в SQLite

Применение оператора NOT - выберем все товары, у которых производитель не Samsung:

SELECT * FROM products
WHERE NOT company = 'Samsung';
Оператор NOT в SQLite

Приоритет операций

В одном условии при необходимости мы можем объединять несколько логических операций. При этом следует учитывать, что самой приоритетной операцией, которая выполняется в первую очередь, является NOT, менее приоритетная - AND и операция с наименьшим приоритетом - OR. Например:

SELECT * FROM products
WHERE company ='Samsung' OR NOT price > 30000 AND product_count > 2;

В данном случае сначала вычисляется выражение NOT Price > 30000, то есть цена должна быть НЕ больше 30000 (то есть меньше или равна 30000).

Затем вычисляется выражение NOT Price > 30000 AND ProductCount > 2, то есть цена должна быть меньше или равна 30000 и одновременно количество товаров должно быть больше 2.

В конце вычисляется оператор OR - либо цена должна быть меньше или равна 30000 и одновременно количество товаров должно быть больше 2, либо производителем должен быть Samsung.

Приоритет логических операций в SQLite

С помощью скобок можно переопределить приоритет операций:

SELECT * FROM products
WHERE company ='Samsung' OR NOT (price > 30000 AND product_count > 2);

В данном случае находим товары, у которых либо производитель Samsung, либо одновременно цена товара НЕ больше 30000 (то есть меньше или равна 30000) и количество товаров НЕ больше 2 (то есть 2 или меньше).

приоритет логических операций AND, OR, NOT в SQLite
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850