← Все вопросы

Как объединить несколько условий в WHERE (AND, OR, IN, BETWEEN, LIKE)?

Задан 11 месяцев назад691 просмотров2 ответа
13

Знаю только WHERE col = значение. А как написать «город Москва И сумма больше 1000», или «статус один из нескольких», или «дата в диапазоне», или «имя начинается на А»? Подскажите операторы.

2 ответа

21

Вот основной набор для WHERE:

SELECT * FROM orders
WHERE city = 'Москва' AND amount > 1000;        -- оба условия

SELECT * FROM orders
WHERE status IN ('paid', 'shipped', 'done');     -- одно из списка (короче чем куча OR)

SELECT * FROM orders
WHERE amount BETWEEN 500 AND 1500;               -- диапазон, ВКЛЮЧИТЕЛЬНО оба края

SELECT * FROM users
WHERE name LIKE 'А%';                             -- начинается на А (% — любые символы)
  • AND — нужны оба условия, OR — хотя бы одно.
  • При смешивании AND/OR ставь скобки, иначе логика сломается: WHERE (a OR b) AND c.
  • В LIKE: % — любое число символов, _ — ровно один символ. '%оск%' — содержит «оск».
Кристина Киселёва LIKE по-умолчанию регистрозависимый? — зависит от СУБД, в PostgreSQL да, есть ILIKE для игнора регистра · 11 месяцев назад
oleg kisil про скобки при AND/OR — больная тема, спасибо что напомнили · 11 месяцев назад
7

IN (...) вместо длинной цепочки OR — самый частый лайфхак.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект