Бран · продюсер «Хроник Пограничья»
Дизайнеры сделали новый посох и хотят позвать на тест магов с 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 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.