В большинстве случаев необходимо получать не все записи, а только соответствующие определенным критериям. Поэтому для осуществления фильтрации выборки в SQL имеется специальный оператор 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 | Отсутствует запись |
Для отбора данных, лежащих в определенном диапазоне, используется оператор BETWEEN. В следующем запросе будут отобраны все значения, лежащие в пределах от $1000 до $2000 включительно, в поле Amount.
Run SQLSELECT *
FROM Sumproduct
WHERE Amount BETWEEN 1000 AND 2000
Очередность сортировки будет зависеть от порядка расположения полей в запросе. То есть, в нашем случае сначала данные будут рассортированы по колонке Amount, а затем по City.
В SQL существует специальный оператор для выборки пустых записей (называется NULL). Пустой записью считается любая ячейка в таблице, в которую не введен ни один символ. Если в ячейку введено 0 или пробел, то считается, что поле заполнено.
SELECT *
FROM Sumproduct
WHERE Amount IS NULL
В примере выше мы умышленно удалили два значения в поле Amount, чтобы продемонстрировать работу оператора NULL.
Язык 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'
Run SQLSELECT *
FROM Sumproduct
WHERE ID IN (4, 12, 58, 67)
Оператор IN выполняет ту же функцию, что и OR, однако имеет ряд преимуществ:
Run SQLSELECT *
FROM Sumproduct
WHERE NOT City IN ('Toronto', 'Montreal')
Ключевое слово NOT позволяет убрать ненужные значения из выборки. Также его особенностью является то, что он проставляется перед названием столбца, участвующего в фильтрации, а не после.