Раздел 42 · Аналитика данных с нуля

WHERE: отбираем нужные строки

junior~10 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Бран · продюсер «Хроник Пограничья»

Дизайнеры сделали новый посох и хотят позвать на тест магов с 40-го по 50-й уровень. Сколько таких у нас? И заодно: правда, что в Долине Новичков кроме сюжета делать нечего?

В прошлом уроке ты выбирал столбцы. Но запрос всё ещё возвращал все строки: всех 5602 персонажей. Брану нужны не все, а только маги определённых уровней. Сегодня учимся отбирать строки по условию.

Сито

Представь, что ты высыпаешь мешок зерна в сито. Мелкое проходит, крупное остаётся. Сито не меняет зёрна, оно только решает, какие пройдут дальше.

WHERE и есть такое сито. Ты пишешь условие, и база проверяет его для каждой строки по отдельности. Строки, для которых условие верно, попадают в результат. Остальные отсеиваются.

SELECT name, class, level
FROM characters
WHERE class = 'mage';

База идёт по characters строка за строкой и спрашивает: «class равен 'mage'?». Да: строка остаётся. Нет: строка выбрасывается. Магов в базе 1278.

Условие, которое бывает только истинным или ложным, называют логическим выражением. Текст в условии берётся в одинарные кавычки: 'mage'. Числа пишутся без кавычек: level = 60.

Сравнения

Кроме равенства есть привычный набор:

ОператорСмыслПример
=равноclass = 'mage'
<> или !=не равноkind <> 'story'
> <больше, меньшеlevel > 50
>= <=больше или равно, меньше или равноlevel >= 40

Строки тоже сравниваются, но строго посимвольно: 'Mage' и 'mage' для базы разные значения. В нашей базе классы записаны строчными английскими буквами, поэтому пиши 'mage'.

AND, OR и NOT: несколько условий

Бран просит магов с 40-го по 50-й уровень. Это три условия сразу: класс маг, уровень не меньше 40, уровень не больше 50. Чтобы строка прошла, верными должны быть все. Для этого есть AND:

SELECT id, name, level
FROM characters
WHERE class = 'mage' AND level >= 40 AND level <= 50;
  id  |     name      | level
------+---------------+-------
 3023 | BladeDragon97 |    50
 2222 | Ulra          |    50
 1582 | WOLF69        |    49
...

Таких магов 63. Если хватает любого из условий, нужен OR: «маг или жрец». А NOT переворачивает условие: NOT (platform = 'pc') оставляет всех, кто играет не на ПК, таких игроков 3254.

урок из курса

Урок из курса «Аналитика данных с нуля». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.