TOP

SQL-Урок 4. Фильтрация данных (WHERE)

В большинстве случаев необходимо получать не все записи, а только соответствующие определенным критериям. Поэтому для осуществления фильтрации выборки в SQL имеется специальный оператор WHERE.


1. Простая фильтрация оператором WHERE.

Давайте из нашей таблицы, например, отберем записи, относящиеся только к определенному товару. Для этого мы укажем дополнительный параметр отбора, который будет фильтровать значение по колонке Product.

Пример запроса для отбора текстовых значений:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product = 'Bikes'

Как видим, условие отбора взято в одинарные кавычки, что является обязательным при фильтрации текстовых значений. При фильтрации числовых значений кавычки не требуются.

Пример запроса для отбора числовых значений:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Amount > 40000 
ORDER BY Amount

В этом примере мы отобрали записи, в которых выручка от реализации составляла более 40 тыс.$ и, вдобавок, все записи рассортировали по росту по полю Amount.

В таблице ниже указан перечень условных операторов, поддерживаемых SQL:

Знак операции Значение
= Равняется
<> Не равно
< Меньше
<= Меньшее или ровное
> Больше
>= Большее или ровное
BETWEEN Между двумя значениями
IS NULL Отсутствует запись

2. Фильтрация по диапазону значений (BETWEEN)

Для отбора данных, лежащих в определенном диапазоне, используется оператор BETWEEN. В следующем запросе будут отобраны все значения, лежащие в пределах от $1000 до $2000 включительно, в поле Amount.

Run SQLSELECT * 
FROM Sumproduct 
WHERE Amount BETWEEN 1000 AND 2000

Очередность сортировки будет зависеть от порядка расположения полей в запросе. То есть, в нашем случае сначала данные будут рассортированы по колонке Amount, а затем по City.

3. Выборка пустых записей (IS NULL)

В SQL существует специальный оператор для выборки пустых записей (называется NULL). Пустой записью считается любая ячейка в таблице, в которую не введен ни один символ. Если в ячейку введено 0 или пробел, то считается, что поле заполнено.

SELECT * 
FROM Sumproduct 
WHERE Amount IS NULL

В примере выше мы умышленно удалили два значения в поле Amount, чтобы продемонстрировать работу оператора NULL.

4. Расширенная фильтрация (AND, OR)

Язык SQL не ограничивается фильтрацией по одному условию, для собственных целей вы можете использовать достаточно сложные конструкции для выборки данных одновременно по многим критериям. Для этого в SQL есть дополнительные операторы, расширяющие возможности оператора WHERE. Такими операторами являются: AND, OR, IN, NOT. Приведем несколько примеров работы данных операторов.

Run SQLSELECT * 
FROM Sumproduct 
WHERE Amount > 40000 AND City = 'Toronto'
Run SQLSELECT * 
FROM Sumproduct 
WHERE Month = 'April' OR Month = 'March'

Давайте объединим операторы AND и OR. Для этого произведем выборку велосипедов (Bikes) и коньков (Skates), проданных в марте (March).

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product = 'Bikes' OR Product = 'Skates' AND Month = 'March'

Видим, что в нашу выборку попало много значений (кроме марта (March), также январь (January), февраль (February) и апрель (April)). В чем причина? А в том, что SQL имеет приоритеты выполнения команд. То есть оператор AND имеет более приоритет, чем оператор OR, поэтому сначала были отобраны записи с коньками, проданными в марте, а затем все записи, касающиеся велосипедов.

Итак, чтобы получить правильную выборку, нам нужно изменить приоритеты выполнения команд. Для этого используем скобки, как в математике. Тогда, сначала будут проработаны операторы в скобках, а затем – все остальные.

Run SQLSELECT * 
FROM Sumproduct 
WHERE (Product = 'Bikes' OR Product = 'Skates') AND Month = 'March'

5. Расширенная фильтрация (оператор IN)

Run SQLSELECT * 
FROM Sumproduct 
WHERE ID IN (4, 12, 58, 67)

Оператор IN выполняет ту же функцию, что и OR, однако имеет ряд преимуществ:

  • При работе с длинными списками, предложение по IN легче читать;
  • Используется меньшее количество операторов, что ускоряет обработку запроса;
  • Самое важное преимущество IN в том, что в его конструкции можно использовать дополнительную конструкцию SELECT, что
  • відкриває великі можливості для створення складних підзапитів.

    6. Расширенная фильтрация (оператор NOT)

    Run SQLSELECT * 
    FROM Sumproduct 
    WHERE NOT City IN ('Toronto', 'Montreal')
    

    Ключевое слово NOT позволяет убрать ненужные значения из выборки. Также его особенностью является то, что он проставляется перед названием столбца, участвующего в фильтрации, а не после.