AND в MySQL. Введение
AND в MySQL — логический оператор «И», объединяющий несколько условий. Чаще всего используется в выражениях WHERE, ON, HAVING, в CASE и проверках ограничений. Приоритет AND ниже унарных операторов и выше, чем у OR, поэтому для сложных выражений рекомендуется явно использовать скобки.
Ниже — синтаксис, типовая конструкция и 100 уникальных примеров из разных доменов.
Синтаксис
SELECT ... FROM t WHERE cond1 AND cond2;UPDATE t SET col=expr WHERE cond1 AND cond2 AND cond3;DELETE FROM t WHERE (condA AND condB) AND (condC OR condD);SELECT ... FROM a JOIN b ON a.id=b.a_id AND b.active=1;SELECT CASE WHEN (x>0 AND y>0) THEN 'Q1' ELSE 'other' END;Типовая конструкция
SELECT id, email
FROM users
WHERE active=1 AND verified=1;100 примеров
1. Фильтрация пользователей по статусу и верификации
SELECT id, email FROM users WHERE status='active' AND verified=1;2. Заказы дороже суммы и по конкретной стране
SELECT id FROM orders WHERE total>100 AND country='NL';3. Товары в наличии и с рейтингом выше 4
SELECT id, name FROM products WHERE in_stock=1 AND rating>=4;4. Платежи за сегодня и успешные
SELECT id FROM payments WHERE DATE(paid_at)=CURDATE() AND status='success';5. Сессии длиннее часа и с мобильного
SELECT user_id FROM sessions WHERE duration_sec>3600 AND device='mobile';6. Логи уровня error и из сервиса billing
SELECT id FROM logs WHERE level='error' AND service='billing';7. Доставки по городу и в статусе shipped
SELECT id FROM deliveries WHERE city='Amsterdam' AND status='shipped';8. Отзывы с оценкой 5 и с фото
SELECT id FROM reviews WHERE rating=5 AND has_photo=1;9. Подписки активные и не истёкшие
SELECT user_id FROM subscriptions WHERE active=1 AND valid_to>=CURDATE();10. Кандидаты с опытом > 3 лет и знанием SQL
SELECT id FROM candidates WHERE years_exp>3 AND has_sql=1;11. Сенсоры онлайн и с температурой ниже порога
SELECT id FROM sensors WHERE online=1 AND temp_c<min_threshold;12. Сделки выигранные и с маржой > 20%
SELECT id FROM deals WHERE stage='won' AND margin>=0.2;13. Билеты открытые и с приоритетом high
SELECT id FROM tickets WHERE status='open' AND priority='high';14. Позиции заказа с qty>0 и не удалённые
SELECT order_id, line_no FROM order_items WHERE qty>0 AND deleted=0;15. Документы опубликованные и локализованные
SELECT id FROM docs WHERE published=1 AND lang='ru';16. Ученики старше 18 и сдан вступительный
SELECT id FROM students WHERE age>=18 AND entrance_passed=1;17. Сотрудники full-time и в отделе data
SELECT id FROM employees WHERE contract='full' AND dept='data';18. Устройства активные и с версией прошивки v2
SELECT id FROM devices WHERE active=1 AND fw_version LIKE '2.%';19. Кампании запущенные и бюджет не исчерпан
SELECT id FROM campaigns WHERE started=1 AND spent < budget;20. Лиды квалифицированные и из источника ads
SELECT id FROM leads WHERE qualified=1 AND source='ads';21. Коммиты сегодня и автор = CI
SELECT hash FROM commits WHERE DATE(created_at)=CURDATE() AND author='ci';22. Файлы размером >10MB и типом image
SELECT id FROM uploads WHERE size_bytes>10*1024*1024 AND mime LIKE 'image/%';23. Бронирования подтверждены и оплачен депозит
SELECT id FROM bookings WHERE confirmed=1 AND deposit_paid=1;24. Треки с bpm в диапазоне и жанром techno
SELECT id FROM tracks WHERE bpm BETWEEN 125 AND 135 AND genre='techno';25. Автомобили электромобили и пробег < 50k
SELECT vin FROM cars WHERE type='ev' AND mileage_km<50000;Ещё примеры
26. Обновить активным пользователям флаг рассылки
UPDATE users SET newsletter=1 WHERE active=1 AND unsubscribed=0;27. Снизить цену товарам старше года и без продаж
UPDATE products SET price=price*0.9 WHERE DATEDIFF(CURDATE(), created_at)>365 AND sales_30d=0;28. Архивировать сессии старше 30 дней и неактивные
UPDATE sessions SET archived=1 WHERE last_seen<CURDATE()-INTERVAL 30 DAY AND active=0;29. Удалить логи debug и старше недели
DELETE FROM logs WHERE level='debug' AND created_at<CURDATE()-INTERVAL 7 DAY;30. Удалить неактивные купоны и с нулевым остатком
DELETE FROM coupons WHERE active=0 AND remaining=0;31. Обновить тикеты high и overdue
UPDATE tickets SET status='urgent' WHERE priority='high' AND due_at<NOW();32. Сбросить попытки входа и снять блокировку
UPDATE users SET failed_logins=0, locked=0 WHERE locked=1 AND failed_logins>=3;33. Удалить черновики без контента и старые
DELETE FROM drafts WHERE (title='' OR body='') AND updated_at<CURDATE()-INTERVAL 14 DAY;34. Обновить лимит карт с истёкшим KYC и активных
UPDATE cards SET limit_amt=0 WHERE kyc_valid=0 AND status='active';35. Удалить временные файлы и без ссылок
DELETE FROM uploads WHERE tmp=1 AND ref_count=0;36. Повысить зарплату стажёрам data и passed=1
UPDATE employees SET salary=salary*1.1 WHERE role='intern' AND dept='data' AND passed=1;37. Деактивировать устройства без пинга и онлайн=0
UPDATE devices SET active=0 WHERE last_ping<NOW()-INTERVAL 1 DAY AND online=0;38. Удалить корзины пустые и старше суток
DELETE FROM carts WHERE items_count=0 AND updated_at<NOW()-INTERVAL 1 DAY;39. Обновить статусы заказов paid и shipped
UPDATE orders SET status='completed' WHERE paid=1 AND shipped=1;40. Удалить сообщения, помеченные как spam и старые
DELETE FROM messages WHERE is_spam=1 AND created_at< NOW()-INTERVAL 90 DAY;41. Обновить скидку категориям seasonal и активным
UPDATE categories SET discount=15 WHERE seasonal=1 AND active=1;42. Удалить записи очереди завершённые и без ошибок
DELETE FROM queue WHERE finished=1 AND error IS NULL;43. Обновить статус инвойсов overdue и unpaid
UPDATE invoices SET status='overdue' WHERE due_at<CURDATE() AND paid=0;44. Удалить регистр миграций с флагом orphan и старыми датами
DELETE FROM migrations WHERE orphan=1 AND applied_at<'2024-01-01';45. Обновить профиль: verified и заполнен паспорт
UPDATE profiles SET level='trusted' WHERE verified=1 AND passport_no IS NOT NULL;Ещё примеры
46. Соединить заказы и платежи по id и успешному статусу
SELECT o.id, p.amount
FROM orders o
JOIN payments p ON p.order_id=o.id AND p.status='success';47. LEFT JOIN пользователей и профилей по id и актуальному профилю
SELECT u.id, p.city
FROM users u
LEFT JOIN profiles p ON p.user_id=u.id AND p.is_current=1;48. JOIN товаров и категорий по ключу и активной категории
SELECT p.id, c.name
FROM products p
JOIN categories c ON c.id=p.category_id AND c.active=1;49. CASE для сегментации по тратам и активности
SELECT u.id,
CASE WHEN (u.orders_cnt>=5 AND u.last_seen>=CURDATE()-INTERVAL 30 DAY)
THEN 'loyal' ELSE 'regular' END AS segment
FROM users u;50. CASE для гео‑кластера по стране и городу
SELECT id,
CASE WHEN (country='NL' AND city='Amsterdam') THEN 'nl-ams' ELSE 'other' END geo
FROM profiles;51. JOIN логинов и пользователей по user_id и verified=1
SELECT l.user_id, l.login_time
FROM logins l
JOIN users u ON u.id=l.user_id AND u.verified=1;52. JOIN доставок и складов по коду и складу активному
SELECT d.id, w.name
FROM deliveries d
JOIN warehouses w ON w.code=d.warehouse_code AND w.active=1;53. JOIN devices и firmware по модели и актуальной версии
SELECT d.id, f.version
FROM devices d
JOIN firmware f ON f.model=d.model AND f.is_latest=1;54. CASE на скор скоринга и kyc
SELECT c.id,
CASE WHEN (score>=700 AND kyc_ok=1) THEN 'approved' ELSE 'manual' END decision
FROM customers c;55. JOIN comments и posts по id и опубликованной статье
SELECT c.id, c.body
FROM comments c
JOIN posts p ON p.id=c.post_id AND p.published=1;56. JOIN reviews и products по product_id и не удалённому товару
SELECT r.id, r.rating
FROM reviews r
JOIN products p ON p.id=r.product_id AND p.deleted=0;57. JOIN tickets и agents по agent_id и online=1
SELECT t.id, a.name
FROM tickets t
JOIN agents a ON a.id=t.agent_id AND a.online=1;58. JOIN routes и vehicles по vehicle_id и status=ready
SELECT r.id, v.plate
FROM routes r
JOIN vehicles v ON v.id=r.vehicle_id AND v.status='ready';59. JOIN chat_msgs и chats по chat_id и неархивному чату
SELECT m.id, m.text
FROM chat_msgs m
JOIN chats c ON c.id=m.chat_id AND c.archived=0;60. CASE для SLA по приоритету и просрочке
SELECT id,
CASE WHEN (priority='high' AND due_at<NOW()) THEN 'breach' ELSE 'ok' END sla
FROM tickets;61. JOIN stock и products по sku и активному товару
SELECT s.sku, s.qty
FROM stock s
JOIN products p ON p.sku=s.sku AND p.active=1;62. JOIN payments и refunds по order_id и возврату подтвержденному
SELECT p.id, r.id AS refund_id
FROM payments p
JOIN refunds r ON r.order_id=p.order_id AND r.confirmed=1;63. CASE для сегмента цены и скидки
SELECT id,
CASE WHEN (price>=100 AND discount>0) THEN 'promo' ELSE 'base' END kind
FROM products;64. JOIN shipments и deliveries по коду и совпадению дня
SELECT s.id, d.id AS delivery_id
FROM shipments s
JOIN deliveries d ON d.code=s.code AND DATE(d.arrive_at)=DATE(s.depart_at);65. JOIN employees и salaries по id и активной ставке
SELECT e.id, s.amount
FROM employees e
JOIN salaries s ON s.employee_id=e.id AND s.is_current=1;Ещё примеры
66. HAVING по сумме заказов и количеству
SELECT user_id
FROM orders
GROUP BY user_id
HAVING SUM(total)>1000 AND COUNT(*)>=3;67. EXISTS покупка и подписка одновременно
SELECT u.id FROM users u
WHERE EXISTS (SELECT 1 FROM orders o WHERE o.user_id=u.id)
AND EXISTS (SELECT 1 FROM subscriptions s WHERE s.user_id=u.id AND s.active=1);68. IN по странам и статусам
SELECT id FROM profiles WHERE country IN ('NL','DE') AND status IN ('active','trial');69. JSON наличие ключей и значение
SELECT id FROM cfg WHERE JSON_EXTRACT(body,'$.feature')='on' AND JSON_CONTAINS_PATH(body,'one','$.threshold');70. REGEXP по email и домену
SELECT id FROM users WHERE email REGEXP '^[a-z0-9._%+-]+@' AND email LIKE '%.nl';71. BETWEEN по датам и по сумме
SELECT id FROM invoices WHERE issued_at BETWEEN '2025-01-01' AND '2025-12-31' AND amount BETWEEN 100 AND 1000;72. Проверка NULL/NOT NULL одновременно
SELECT id FROM orders WHERE shipped_at IS NULL AND cancelled_at IS NULL;73. Комбинация LIKE и сравнения
SELECT id FROM products WHERE name LIKE '%pro%' AND price<500;74. Сложные скобки с OR
SELECT id FROM leads WHERE (source='ads' AND score>=70) OR (source='seo' AND score>=80);75. AND в CHECK ограничении
ALTER TABLE accounts ADD CONSTRAINT chk_positive CHECK (balance>=0 AND overdraft>=0);76. AND в GENERATED столбце (условная метка)
ALTER TABLE orders ADD COLUMN high_value TINYINT AS ((total>500) AND (country='NL')) STORED;77. AND в триггере условия
CREATE TRIGGER bu_users BEFORE UPDATE ON users FOR EACH ROW
BEGIN
IF (NEW.active=1 AND NEW.verified=1) THEN SET NEW.level='trusted'; END IF;
END;78. AND в событии‑очистке
CREATE EVENT ev_purge ON SCHEDULE EVERY 1 DAY DO
DELETE FROM logs WHERE level='debug' AND created_at<CURDATE()-INTERVAL 7 DAY;79. AND при построении витрины
CREATE VIEW v_loyal AS
SELECT user_id FROM orders GROUP BY user_id
HAVING SUM(total)>500 AND COUNT(*)>=5;80. AND в подзапросе коррелированном
SELECT id FROM products p WHERE EXISTS (
SELECT 1 FROM reviews r WHERE r.product_id=p.id AND r.rating>=4
) AND p.active=1;81. AND с SPATIAL предикатами
SELECT id FROM geo_points WHERE ST_Within(geom, ST_GeomFromText('POLYGON(...)')) AND ST_IsValid(geom);82. AND и полнотекстовый поиск
SELECT id FROM posts WHERE MATCH(title,body) AGAINST('+mysql +index' IN BOOLEAN MODE) AND language='ru';83. AND с окнами через фильтр WHERE
SELECT * FROM (
SELECT id, SUM(total) OVER (PARTITION BY user_id) s FROM orders
) x WHERE s>1000 AND id IS NOT NULL;84. AND в MERGE‑логике (эмуляция)
INSERT INTO inventory (sku, qty)
SELECT sku, SUM(qty) FROM incoming WHERE arrived=1 AND damaged=0 GROUP BY sku
ON DUPLICATE KEY UPDATE qty=VALUES(qty)+inventory.qty;85. Финансы: и комиссия > 0, и валюта EUR
SELECT id FROM payments WHERE fee>0 AND currency='EUR';Ещё примеры
86. E‑commerce: и в наличии, и не скрыт
SELECT id FROM products WHERE in_stock=1 AND hidden=0;87. HR: и резюме загружено, и телефон подтверждён
SELECT id FROM candidates WHERE cv_uploaded=1 AND phone_verified=1;88. IoT: и батарея > 30%, и сигнал стабильный
SELECT id FROM devices WHERE battery>30 AND signal>2;89. Логистика: и доставлено, и без повреждений
SELECT id FROM deliveries WHERE status='delivered' AND damaged=0;90. Support: и тикет открыт, и SLA нарушен
SELECT id FROM tickets WHERE status='open' AND due_at<NOW();91. Media: и опубликовано, и видимость public
SELECT id FROM posts WHERE published=1 AND visibility='public';92. Games: и онлайн, и рейтинг > 2000
SELECT id FROM players WHERE online=1 AND rating>2000;93. Security: и попытка неуспешна, и ip в чёрном списке
SELECT id FROM auth_log WHERE success=0 AND ip IN (SELECT ip FROM blacklist);94. DataOps: и задача завершена, и без ошибок
SELECT id FROM etl_runs WHERE finished=1 AND error IS NULL;95. Маркетинг: и CTR > 5%, и показы > 10k
SELECT id FROM ads WHERE ctr>0.05 AND impressions>10000;96. Аналитика: и дата в диапазоне, и сегмент premium
SELECT id FROM sessions WHERE at BETWEEN '2025-09-01' AND '2025-09-15' AND segment='premium';97. Соцсеть: и друзья > 100, и постов > 50
SELECT id FROM users WHERE friends_cnt>100 AND posts_cnt>50;98. Образование: и посещаемость 100%, и оценка ≥ 4.5
SELECT id FROM students WHERE attendance=100 AND gpa>=4.5;99. Медицина: и прививка сделана, и ПЦР отрицательный
SELECT id FROM patients WHERE vaccinated=1 AND pcr='neg';100. Edge‑кейс: и цена > 0, и скидка в (0,50]
SELECT id FROM products WHERE price>0 AND discount>0 AND discount<=50;Заключение
AND соединяет предикаты и позволяет формулировать точные логические правила. Следите за приоритетом с OR и используйте скобки для читаемости и корректности. 100 примеров выше показывают, как применять AND в фильтрах, соединениях, агрегатах, JSON, CHECK и автоматизации.
Справка: официальная документация MySQL.