- Фильтровать строки по условию с помощью
WHERE - Применять операторы сравнения к числам, тексту и датам
- Строить сложные условия с
AND,OR,NOTи правильно расставлять скобки
Когда в интернет-магазине ты выбираешь фильтры «цена до 50», «только электроника», «есть в наличии», сайт незаметно отправляет запрос в базу данных. Каждый фильтр в SQL — это условие, а условия записывают в части WHERE. В этом уроке ты научишься отбирать из тысяч строк только нужные.
Как работает WHERE
Часть WHERE пишется после FROM. СУБД проверяет условие для каждой строки таблицы: если оно истинно, строка попадает в результат, если ложно — отбрасывается. Текстовые значения пишут в одинарных кавычках, числа — без кавычек.
SELECT first_name, last_name, age
FROM students
WHERE city = 'Bakı'
ORDER BY id;▸ Ожидаемый результат
first_name | last_name | age Aysel | Məmmədova | 15 Leyla | Hüseynova | 14 Rəşad | Kərimov | 16 Kamran | Həsənov | 15
Операторы сравнения
| Оператор | Значение | Пример |
|---|---|---|
| = | равно | grade = 11 |
| <> , != | не равно | subject <> 'Math' |
| < | меньше | price < 50 |
| > | больше | age > 15 |
| <= | меньше или равно | stock <= 20 |
| >= | больше или равно | score >= 90 |
<> — оператор стандарта SQL; != тоже работает во всех популярных СУБД.SELECT name, price
FROM products
WHERE price < 50
ORDER BY price;▸ Ожидаемый результат
name | price Notebook | 3.2 Pen set | 7.9 Water bottle | 12 Desk lamp | 34.99 Chess set | 42
Сравнение работает и для текста, и для дат. Для текста = сравнивает символ за символом, поэтому 'bakı' и 'Bakı' — разные значения. В нашей учебной базе даты хранятся как текст в формате YYYY-MM-DD: в этом формате алфавитный порядок совпадает с календарным. Поэтому заказы за апрель–июнь можно найти обычными >= и <.
SELECT id, product_id, quantity, order_date
FROM orders
WHERE order_date >= '2025-04-01'
AND order_date < '2025-07-01'
ORDER BY id;▸ Ожидаемый результат
id | product_id | quantity | order_date 7 | 2 | 1 | 2025-04-09 8 | 8 | 3 | 2025-04-09 9 | 10 | 1 | 2025-05-21 10 | 5 | 4 | 2025-06-12 11 | 3 | 1 | 2025-06-30
Логические операторы: AND, OR, NOT
A AND B— должны выполняться оба условия. Каждый новыйANDсужает результат.A OR B— должно выполняться хотя бы одно условие. Каждый новыйORрасширяет результат.NOT A— меняет условие на противоположное: истина становится ложью, и наоборот.
SELECT first_name, age, city
FROM students
WHERE city = 'Bakı' AND age >= 15
ORDER BY id;▸ Ожидаемый результат
first_name | age | city Aysel | 15 | Bakı Rəşad | 16 | Bakı Kamran | 15 | Bakı
AND: ученики из Баку, которым при этом не меньше 15 лет.SELECT name, category, price
FROM products
WHERE category = 'Games' OR price > 800
ORDER BY id;▸ Ожидаемый результат
name | category | price Laptop | Electronics | 1450 Smartphone | Electronics | 899.99 Chess set | Games | 42
OR: товары из категории игр или дороже 800.SELECT first_name, last_name, age, grade
FROM students
WHERE age > 15 AND NOT city = 'Bakı'
ORDER BY id;▸ Ожидаемый результат
first_name | last_name | age | grade Murad | Əliyev | 16 | 10 Elvin | Quliyev | 17 | 11 Tural | İsmayılov | 17 | 11 Səbinə | Nəsirova | 16 | 10 Fidan | Cəfərova | 17 | 11
NOT: ученики старше 15 лет, которые живут не в Баку.Приоритет операторов и скобки
Как в математике умножение выполняется раньше сложения, так и в SQL AND вычисляется раньше OR. Допустим, нам нужны электроника и аксессуары дешевле 150. Без скобок СУБД понимает условие совсем иначе: «вся электроника или аксессуары дешевле 150».
-- without parentheses: AND is applied first
SELECT name, category, price
FROM products
WHERE category = 'Electronics'
OR category = 'Accessories' AND price < 150
ORDER BY id;▸ Ожидаемый результат
name | category | price Laptop | Electronics | 1450 Smartphone | Electronics | 899.99 Headphones | Electronics | 120.5 Backpack | Accessories | 55 Water bottle | Accessories | 12 Monitor | Electronics | 310
-- with parentheses: OR is applied first
SELECT name, category, price
FROM products
WHERE (category = 'Electronics' OR category = 'Accessories')
AND price < 150
ORDER BY id;▸ Ожидаемый результат
name | category | price Headphones | Electronics | 120.5 Backpack | Accessories | 55 Water bottle | Accessories | 12
Найди товары, у которых стоимость всего запаса (price * stock) больше 3000.
Показать решениеСкрыть решение
WHERE price * stock > 3000.Результат: Laptop, Smartphone, Headphones и Backpack.
Обрати внимание: выражение повторяется в
WHERE, потому что СУБД выполняет WHERE раньше SELECT, и псевдонимов ещё не существует.SELECT name, price, stock
FROM products
WHERE price * stock > 3000
ORDER BY id;▸ Ожидаемый результат
name | price | stock Laptop | 1450 | 8 Smartphone | 899.99 | 15 Headphones | 120.5 | 40 Backpack | 55 | 60
Выбери из students имя (first_name) и возраст (age) учеников из Баку (Bakı). Отсортируй по возрасту, а при равном возрасте — по имени.
SELECT first_name, age
FROM students
-- add WHERE and ORDER BY▸ Ожидаемый результат
first_name | age Leyla | 14 Aysel | 15 Kamran | 15 Rəşad | 16
Главное
WHEREпроверяет условие для каждой строки и оставляет только подходящие.- Операторы сравнения:
=,<>(!=),<,>,<=,>=. - Текст и даты пишут в одинарных кавычках; даты в формате
YYYY-MM-DDможно сравнивать обычными операторами. ANDсужает результат,ORрасширяет, аNOTменяет условие на противоположное.ANDвычисляется раньшеOR— при их сочетании ставь скобки.
Проверь себя
Вопросов: 10. Каждый правильный ответ приносит XP.