Оператор WHERE в SQL обеспечивает гибкую фильтрацию извлекаемых данных. В этой статье пойдет речь о типах условий, которые предусматривает его синтаксис.
В WHERE можно использовать различные логические выражения, связанные через not, or, and. Для обозначения отношения равенства применяется символ =, а неравенства - <>. Но есть и более специфические операторы, как
Диапазон (BETWEEN)
Позволяет задать промежуток, в которых должно лежать целевое значение. Конечно, его можно заменить с помощью комбинации операторов > и <, но BETWEEN предоставляет более читаемую и компактную версию. Выберем все бои в рамках турниров UFC (подробнее об этом наборе писал ранее) с количеством раундов между 1 и 2:
SELECT "Event", "Fighter_left", "Fighter_right", "Method:", "Round:"
FROM ufc_stat
WHERE "Round:" BETWEEN 1 and 2
Обратите внимание на способ победы - везде досрочный, что подтверждает правильность нашего запроса (при судейском решении минимальное количество раундов - 3).
Условие членства (IN)
Применяется для проверки наличия целевого значения в заданном множестве. Выберем все бои Конора Макгрегора и Хабиба Нурмагомедова:
SELECT "Event", "Fighter_left", "Fighter_right", "Method:", "Round:"
FROM ufc_stat
WHERE "Fighter_left" IN ('Conor McGregor', 'Khabib Nurmagomedov')
or "Fighter_right" IN ('Conor McGregor','Khabib Nurmagomedov')
Подзапросы
В WHERE для задания различных ограничений можно использовать и подзапросы. Например, выведем все поединки обслуживавшиеся рефери с опытом судейства более 500 боев. Сначала построим список рефери и количества боев с их участием:
SELECT "Referee:", COUNT("Event") fight_count
FROM ufc_stat
GROUP BY "Referee:"
ORDER BY fight_count DESC
Немного видоизменив этот запрос и вставив в качестве подзапроса, достигнем своей цели:
SELECT "Event", "Fighter_left", "Fighter_right", "Referee:"
FROM ufc_stat
WHERE "Referee:" IN (SELECT "Referee:"
FROM ufc_stat
GROUP BY "Referee:"
HAVING COUNT("Event") > 500)
Условия соответствия (LIKE)
Если вы частично помните строчное написание некоторого значения, то вам следует воспользоваться оператором LIKE. Выведем поединки, в которых в правом углу выступал Джастин Гейджи:
SELECT "Event", "Fighter_left", "Fighter_right"
FROM ufc_stat
WHERE "Fighter_right" LIKE '%Gae%'
- % обозначает произвольное количество некоторых символов, а
- _ в точности один некоторый символ.
Аналогичный запрос в случае, если забыли первую букву имени Исраэля Адесаньи:
SELECT "Event", "Fighter_left", "Fighter_right"
FROM ufc_stat
WHERE "Fighter_right" LIKE '_srael%'