Найти в Дзене
Властелин машин

Какие условия ставит оператор WHERE в SQL

Оглавление

Оператор 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')

-2

Подзапросы

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

SELECT "Referee:", COUNT("Event") fight_count
FROM ufc_stat
GROUP BY "Referee:"
ORDER BY fight_count DESC
-3

Немного видоизменив этот запрос и вставив в качестве подзапроса, достигнем своей цели:

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)

-4

Условия соответствия (LIKE)

Если вы частично помните строчное написание некоторого значения, то вам следует воспользоваться оператором LIKE. Выведем поединки, в которых в правом углу выступал Джастин Гейджи:

SELECT "Event", "Fighter_left", "Fighter_right"
FROM ufc_stat
WHERE "Fighter_right" LIKE '%Gae%'

-5
  • % обозначает произвольное количество некоторых символов, а
  • _ в точности один некоторый символ.

Аналогичный запрос в случае, если забыли первую букву имени Исраэля Адесаньи:

SELECT "Event", "Fighter_left", "Fighter_right"
FROM ufc_stat
WHERE "Fighter_right" LIKE '_srael%'
-6

-7