Фильтрация. WHERE

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

Для фильтрации данных применяется оператор WHERE, после которого указывается условие, на основании которого производится фильтрация:

WHERE условие

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

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

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

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

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

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

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

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

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

SELECT * FROM Products
WHERE Manufacturer = 'Apple';
Фильтрация WHERE в PostgreSQL

Стоит отметить, что в данном случае большое значение имеет регистр символов, к примеру, строка "Apple" не эквивалентна строке "APPLE" или "apple".

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

SELECT * FROM Products
WHERE Price < 39000;

В качестве условия могут использоваться и более сложные выражения. Например, найдем все товары, у которых совокупная стоимость больше 90 000:

SELECT * FROM Products
WHERE Price * ProductCount > 90000;
Оператор WHERE в PostgreSQL

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

Чтобы объединить нескольких условий в одно, в PostgreSQL можно использовать логические операторы:

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

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

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

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

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

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

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

    NOT выражение

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

SELECT * FROM Products
WHERE Manufacturer = 'Samsung' AND Price > 50000;
Логический оператор AND в PostgreSQL

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

SELECT * FROM Products
WHERE Manufacturer = 'Samsung' OR Price > 50000;
Логический оператор OR в PostgreSQL

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

SELECT * FROM Products
WHERE NOT Manufacturer = 'Samsung';
Логический оператор not в PostgreSQL

Но в большинстве случае вполне можно обойтись без оператора NOT. Так, в предыдущий пример мы можем переписать следующим образом:

SELECT * FROM Products
WHERE Manufacturer <> 'Samsung'

Также в одной команде SELECT можно использовать сразу несколько операторов:

SELECT * FROM Products
WHERE Manufacturer = 'Samsung' OR Price > 30000 AND ProductCount > 2;

Так как оператор AND имеет более высокий приоритет, то сначала будет выполняться подвыражение Price > 30000 AND ProductCount > 2, и только потом оператор OR. То есть здесь выбираются товары, которыех на складе больше 2 и у которых одновременно цена больше 30000, либо те товары, производителем которых является Samsung.

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

SELECT * FROM Products
WHERE (Manufacturer = 'Samsung' OR Price > 30000) AND ProductCount > 2;

IS NULL

Ряд столбцов может допускать значение NULL. Это значение не эквивалентно пустой строке ''. NULL представляет полное отсутствие какого-либо значения. И для проверки на наличие подобного значения применяется оператор IS NULL.

Например, выберем все товары, у которых не установлено поле ProductCount:

SELECT * FROM Products
WHERE ProductCount IS NULL;

Если, наоборот, необходимо получить строки, у которых поле ProductCount не равно NULL, то можно использовать оператор NOT:

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