ALL в MySQL— 100 жизненных приёмов и подзапросов

100 практических кейсов MySQL ALL: сравнения (=, >, <) с подзапросами и UNION ALL.

🟢 ALL в MySQL . Введение

ALL в MySQL используется в двух ключевых контекстах: 1) в сравнительных выражениях с подзапросами (= ALL, > ALL, < ALL и т.д.), 2) в объединении наборов данных через UNION ALL (объединяет без удаления дублей). С ALL удобно проверять условия относительно всех значений подзапроса и эффективно наращивать датасеты.

Ниже — краткий синтаксис и затем 100 уникальных примеров из разных доменов.

Синтаксис

SELECT ... WHERE expr > ALL (SELECT ...);
SELECT ... WHERE expr = ALL (SELECT ...);
SELECT ...
UNION ALL
SELECT ...;

Типовая конструкция

SELECT id, salary FROM employees e
WHERE salary > ALL (
  SELECT AVG(salary) FROM employees WHERE dept_id=e.dept_id
);

100 примеров

1. Зарплата выше всех в отделе

SELECT id, salary FROM employees e
WHERE salary > ALL (
  SELECT salary FROM employees WHERE dept_id=e.dept_id
);

2. Дата заказа раньше всех поставок

SELECT o.id FROM orders o
WHERE o.created_at < ALL (
  SELECT s.arrival_at FROM supplies s WHERE s.product_id=o.product_id
);

3. Рейтинг товара равен всем отзывам (все одинаковые)

SELECT p.id FROM products p
WHERE p.rating = ALL (
  SELECT r.rating FROM reviews r WHERE r.product_id=p.id
);

4. Оплата меньше любого штрафа клиента (меньше всех)

SELECT p.id FROM payments p
WHERE p.amount < ALL (
  SELECT f.amount FROM fines f WHERE f.user_id=p.user_id
);

5. Срок подписки больше всех продлений

SELECT s.user_id FROM subscriptions s
WHERE s.valid_to > ALL (
  SELECT e.valid_to FROM extensions e WHERE e.sub_id=s.id
);

6. Рентабельность выше всех проектов по домену

SELECT prj.id FROM projects prj
WHERE prj.roe > ALL (
  SELECT roe FROM projects WHERE domain=prj.domain AND id<>prj.id
);

7. Скорость выше всех средних по городу

SELECT d.id FROM deliveries d
WHERE d.speed_kmh > ALL (
  SELECT AVG(speed_kmh) FROM deliveries WHERE city=d.city GROUP BY driver_id
);

8. Температура ниже всех порогов сенсора

SELECT s.id FROM sensors s
WHERE s.temp_c < ALL (
  SELECT t.threshold FROM sensor_thresholds t WHERE t.sensor_id=s.id
);

9. Баланс не равен ни одному лимиту (<> ALL)

SELECT a.id FROM accounts a
WHERE a.balance <> ALL (
  SELECT lim.amount FROM limits lim WHERE lim.account_id=a.id
);

10. Оценка равна всем средним по курсу

SELECT g.student_id FROM grades g
WHERE g.score = ALL (
  SELECT ROUND(AVG(score)) FROM grades WHERE course_id=g.course_id GROUP BY exam_id
);

11. Зарплата выше всех в отделе — регион EU

SELECT id, salary FROM employees e
WHERE salary > ALL (
  SELECT salary FROM employees WHERE dept_id=e.dept_id
);

12. Дата заказа раньше всех поставок — регион EU

SELECT o.id FROM orders o
WHERE o.created_at < ALL (
  SELECT s.arrival_at FROM supplies s WHERE s.product_id=o.product_id
);

13. Рейтинг товара равен всем отзывам (все одинаковые) — регион EU

SELECT p.id FROM products p
WHERE p.rating = ALL (
  SELECT r.rating FROM reviews r WHERE r.product_id=p.id
);

14. Оплата меньше любого штрафа клиента (меньше всех) — регион EU

SELECT p.id FROM payments p
WHERE p.amount < ALL (
  SELECT f.amount FROM fines f WHERE f.user_id=p.user_id
);

15. Срок подписки больше всех продлений — регион EU

SELECT s.user_id FROM subscriptions s
WHERE s.valid_to > ALL (
  SELECT e.valid_to FROM extensions e WHERE e.sub_id=s.id
);

16. Рентабельность выше всех проектов по домену — регион EU

SELECT prj.id FROM projects prj
WHERE prj.roe > ALL (
  SELECT roe FROM projects WHERE domain=prj.domain AND id<>prj.id
);

17. Скорость выше всех средних по городу — регион EU

SELECT d.id FROM deliveries d
WHERE d.speed_kmh > ALL (
  SELECT AVG(speed_kmh) FROM deliveries WHERE city=d.city GROUP BY driver_id
);

18. Температура ниже всех порогов сенсора — регион EU

SELECT s.id FROM sensors s
WHERE s.temp_c < ALL (
  SELECT t.threshold FROM sensor_thresholds t WHERE t.sensor_id=s.id
);

19. Баланс не равен ни одному лимиту (<> ALL) — регион EU

SELECT a.id FROM accounts a
WHERE a.balance <> ALL (
  SELECT lim.amount FROM limits lim WHERE lim.account_id=a.id
);

20. Оценка равна всем средним по курсу — регион EU

SELECT g.student_id FROM grades g
WHERE g.score = ALL (
  SELECT ROUND(AVG(score)) FROM grades WHERE course_id=g.course_id GROUP BY exam_id
);

21. Зарплата выше всех в отделе — регион US

SELECT id, salary FROM employees e
WHERE salary > ALL (
  SELECT salary FROM employees WHERE dept_id=e.dept_id
);

22. Дата заказа раньше всех поставок — регион US

SELECT o.id FROM orders o
WHERE o.created_at < ALL (
  SELECT s.arrival_at FROM supplies s WHERE s.product_id=o.product_id
);

23. Рейтинг товара равен всем отзывам (все одинаковые) — регион US

SELECT p.id FROM products p
WHERE p.rating = ALL (
  SELECT r.rating FROM reviews r WHERE r.product_id=p.id
);

24. Оплата меньше любого штрафа клиента (меньше всех) — регион US

SELECT p.id FROM payments p
WHERE p.amount < ALL (
  SELECT f.amount FROM fines f WHERE f.user_id=p.user_id
);

25. Срок подписки больше всех продлений — регион US

SELECT s.user_id FROM subscriptions s
WHERE s.valid_to > ALL (
  SELECT e.valid_to FROM extensions e WHERE e.sub_id=s.id
);

26. Рентабельность выше всех проектов по домену — регион US

SELECT prj.id FROM projects prj
WHERE prj.roe > ALL (
  SELECT roe FROM projects WHERE domain=prj.domain AND id<>prj.id
);

27. Скорость выше всех средних по городу — регион US

SELECT d.id FROM deliveries d
WHERE d.speed_kmh > ALL (
  SELECT AVG(speed_kmh) FROM deliveries WHERE city=d.city GROUP BY driver_id
);

28. Температура ниже всех порогов сенсора — регион US

SELECT s.id FROM sensors s
WHERE s.temp_c < ALL (
  SELECT t.threshold FROM sensor_thresholds t WHERE t.sensor_id=s.id
);

29. Баланс не равен ни одному лимиту (<> ALL) — регион US

SELECT a.id FROM accounts a
WHERE a.balance <> ALL (
  SELECT lim.amount FROM limits lim WHERE lim.account_id=a.id
);

30. Оценка равна всем средним по курсу — регион US

SELECT g.student_id FROM grades g
WHERE g.score = ALL (
  SELECT ROUND(AVG(score)) FROM grades WHERE course_id=g.course_id GROUP BY exam_id
);

31. Зарплата выше всех в отделе — регион APAC

SELECT id, salary FROM employees e
WHERE salary > ALL (
  SELECT salary FROM employees WHERE dept_id=e.dept_id
);

32. Дата заказа раньше всех поставок — регион APAC

SELECT o.id FROM orders o
WHERE o.created_at < ALL (
  SELECT s.arrival_at FROM supplies s WHERE s.product_id=o.product_id
);

33. Рейтинг товара равен всем отзывам (все одинаковые) — регион APAC

SELECT p.id FROM products p
WHERE p.rating = ALL (
  SELECT r.rating FROM reviews r WHERE r.product_id=p.id
);

34. Оплата меньше любого штрафа клиента (меньше всех) — регион APAC

SELECT p.id FROM payments p
WHERE p.amount < ALL (
  SELECT f.amount FROM fines f WHERE f.user_id=p.user_id
);

35. Срок подписки больше всех продлений — регион APAC

SELECT s.user_id FROM subscriptions s
WHERE s.valid_to > ALL (
  SELECT e.valid_to FROM extensions e WHERE e.sub_id=s.id
);

36. Рентабельность выше всех проектов по домену — регион APAC

SELECT prj.id FROM projects prj
WHERE prj.roe > ALL (
  SELECT roe FROM projects WHERE domain=prj.domain AND id<>prj.id
);

37. Скорость выше всех средних по городу — регион APAC

SELECT d.id FROM deliveries d
WHERE d.speed_kmh > ALL (
  SELECT AVG(speed_kmh) FROM deliveries WHERE city=d.city GROUP BY driver_id
);

38. Температура ниже всех порогов сенсора — регион APAC

SELECT s.id FROM sensors s
WHERE s.temp_c < ALL (
  SELECT t.threshold FROM sensor_thresholds t WHERE t.sensor_id=s.id
);

39. Баланс не равен ни одному лимиту (<> ALL) — регион APAC

SELECT a.id FROM accounts a
WHERE a.balance <> ALL (
  SELECT lim.amount FROM limits lim WHERE lim.account_id=a.id
);

40. Оценка равна всем средним по курсу — регион APAC

SELECT g.student_id FROM grades g
WHERE g.score = ALL (
  SELECT ROUND(AVG(score)) FROM grades WHERE course_id=g.course_id GROUP BY exam_id
);

41. Зарплата выше всех в отделе — регион LATAM

SELECT id, salary FROM employees e
WHERE salary > ALL (
  SELECT salary FROM employees WHERE dept_id=e.dept_id
);

42. Дата заказа раньше всех поставок — регион LATAM

SELECT o.id FROM orders o
WHERE o.created_at < ALL (
  SELECT s.arrival_at FROM supplies s WHERE s.product_id=o.product_id
);

43. Рейтинг товара равен всем отзывам (все одинаковые) — регион LATAM

SELECT p.id FROM products p
WHERE p.rating = ALL (
  SELECT r.rating FROM reviews r WHERE r.product_id=p.id
);

44. Оплата меньше любого штрафа клиента (меньше всех) — регион LATAM

SELECT p.id FROM payments p
WHERE p.amount < ALL (
  SELECT f.amount FROM fines f WHERE f.user_id=p.user_id
);

45. Срок подписки больше всех продлений — регион LATAM

SELECT s.user_id FROM subscriptions s
WHERE s.valid_to > ALL (
  SELECT e.valid_to FROM extensions e WHERE e.sub_id=s.id
);

46. Рентабельность выше всех проектов по домену — регион LATAM

SELECT prj.id FROM projects prj
WHERE prj.roe > ALL (
  SELECT roe FROM projects WHERE domain=prj.domain AND id<>prj.id
);

47. Скорость выше всех средних по городу — регион LATAM

SELECT d.id FROM deliveries d
WHERE d.speed_kmh > ALL (
  SELECT AVG(speed_kmh) FROM deliveries WHERE city=d.city GROUP BY driver_id
);

48. Температура ниже всех порогов сенсора — регион LATAM

SELECT s.id FROM sensors s
WHERE s.temp_c < ALL (
  SELECT t.threshold FROM sensor_thresholds t WHERE t.sensor_id=s.id
);

49. Баланс не равен ни одному лимиту (<> ALL) — регион LATAM

SELECT a.id FROM accounts a
WHERE a.balance <> ALL (
  SELECT lim.amount FROM limits lim WHERE lim.account_id=a.id
);

50. Оценка равна всем средним по курсу — регион LATAM

SELECT g.student_id FROM grades g
WHERE g.score = ALL (
  SELECT ROUND(AVG(score)) FROM grades WHERE course_id=g.course_id GROUP BY exam_id
);

Ещё примеры

51. Объединить активных пользователей и пробных

SELECT id, 'active' AS segment FROM users WHERE status='active'
UNION ALL
SELECT id, 'trial' FROM users WHERE status='trial';

52. Склеить продажи за два периода

SELECT * FROM sales WHERE d BETWEEN '2025-01-01' AND '2025-03-31'
UNION ALL
SELECT * FROM sales WHERE d BETWEEN '2025-04-01' AND '2025-06-30';

53. Собрать логины из web и mobile

SELECT user_id, login_time, 'web' src FROM logins_web
UNION ALL
SELECT user_id, login_time, 'mobile' FROM logins_mobile;

54. Слить склад A и B

SELECT sku, qty, 'A' wh FROM stock_a
UNION ALL
SELECT sku, qty, 'B' FROM stock_b;

55. Лидеры: товары и категории

SELECT product_id id, total, 'product' kind FROM product_rank
UNION ALL
SELECT category_id, total, 'category' FROM category_rank;

56. Расходы + доходы в одном потоке

SELECT dt, amount, 'expense' kind FROM expenses
UNION ALL
SELECT dt, amount, 'income' FROM incomes;

57. Мульти‑региональная отчётность

SELECT country, total FROM sales_eu
UNION ALL
SELECT country, total FROM sales_us
UNION ALL
SELECT country, total FROM sales_apac;

58. Источники клиентов: формы, импорт, api

SELECT user_id, 'form' src FROM lead_forms
UNION ALL
SELECT user_id, 'import' FROM lead_import
UNION ALL
SELECT user_id, 'api' FROM lead_api;

59. Собрать события audit + app

SELECT at, actor, details FROM audit_log
UNION ALL
SELECT created_at, user_id, payload FROM app_events;

60. Очереди задач из разных таблиц

SELECT id, 'high' pr FROM queue_high
UNION ALL
SELECT id, 'low' FROM queue_low;

61. Объединить активных пользователей и пробных (вариант 2)

SELECT id, 'active' AS segment FROM users WHERE status='active'
UNION ALL
SELECT id, 'trial' FROM users WHERE status='trial';

62. Склеить продажи за два периода (вариант 2)

SELECT * FROM sales WHERE d BETWEEN '2025-01-01' AND '2025-03-31'
UNION ALL
SELECT * FROM sales WHERE d BETWEEN '2025-04-01' AND '2025-06-30';

63. Собрать логины из web и mobile (вариант 2)

SELECT user_id, login_time, 'web' src FROM logins_web
UNION ALL
SELECT user_id, login_time, 'mobile' FROM logins_mobile;

64. Слить склад A и B (вариант 2)

SELECT sku, qty, 'A' wh FROM stock_a
UNION ALL
SELECT sku, qty, 'B' FROM stock_b;

65. Лидеры: товары и категории (вариант 2)

SELECT product_id id, total, 'product' kind FROM product_rank
UNION ALL
SELECT category_id, total, 'category' FROM category_rank;

66. Расходы + доходы в одном потоке (вариант 2)

SELECT dt, amount, 'expense' kind FROM expenses
UNION ALL
SELECT dt, amount, 'income' FROM incomes;

67. Мульти‑региональная отчётность (вариант 2)

SELECT country, total FROM sales_eu
UNION ALL
SELECT country, total FROM sales_us
UNION ALL
SELECT country, total FROM sales_apac;

68. Источники клиентов: формы, импорт, api (вариант 2)

SELECT user_id, 'form' src FROM lead_forms
UNION ALL
SELECT user_id, 'import' FROM lead_import
UNION ALL
SELECT user_id, 'api' FROM lead_api;

69. Собрать события audit + app (вариант 2)

SELECT at, actor, details FROM audit_log
UNION ALL
SELECT created_at, user_id, payload FROM app_events;

70. Очереди задач из разных таблиц (вариант 2)

SELECT id, 'high' pr FROM queue_high
UNION ALL
SELECT id, 'low' FROM queue_low;

71. Объединить активных пользователей и пробных (вариант 3)

SELECT id, 'active' AS segment FROM users WHERE status='active'
UNION ALL
SELECT id, 'trial' FROM users WHERE status='trial';

72. Склеить продажи за два периода (вариант 3)

SELECT * FROM sales WHERE d BETWEEN '2025-01-01' AND '2025-03-31'
UNION ALL
SELECT * FROM sales WHERE d BETWEEN '2025-04-01' AND '2025-06-30';

73. Собрать логины из web и mobile (вариант 3)

SELECT user_id, login_time, 'web' src FROM logins_web
UNION ALL
SELECT user_id, login_time, 'mobile' FROM logins_mobile;

74. Слить склад A и B (вариант 3)

SELECT sku, qty, 'A' wh FROM stock_a
UNION ALL
SELECT sku, qty, 'B' FROM stock_b;

75. Лидеры: товары и категории (вариант 3)

SELECT product_id id, total, 'product' kind FROM product_rank
UNION ALL
SELECT category_id, total, 'category' FROM category_rank;

76. Расходы + доходы в одном потоке (вариант 3)

SELECT dt, amount, 'expense' kind FROM expenses
UNION ALL
SELECT dt, amount, 'income' FROM incomes;

77. Мульти‑региональная отчётность (вариант 3)

SELECT country, total FROM sales_eu
UNION ALL
SELECT country, total FROM sales_us
UNION ALL
SELECT country, total FROM sales_apac;

78. Источники клиентов: формы, импорт, api (вариант 3)

SELECT user_id, 'form' src FROM lead_forms
UNION ALL
SELECT user_id, 'import' FROM lead_import
UNION ALL
SELECT user_id, 'api' FROM lead_api;

79. Собрать события audit + app (вариант 3)

SELECT at, actor, details FROM audit_log
UNION ALL
SELECT created_at, user_id, payload FROM app_events;

80. Очереди задач из разных таблиц (вариант 3)

SELECT id, 'high' pr FROM queue_high
UNION ALL
SELECT id, 'low' FROM queue_low;

81. E-commerce: продажи + возвраты

SELECT order_id, total, 'sale' kind FROM sales
UNION ALL
SELECT order_id, -total, 'refund' FROM refunds;

82. Аналитика: топ-страницы + топ-запросы

SELECT url, visits, 'page' kind FROM top_pages
UNION ALL
SELECT query, visits, 'query' FROM top_queries;

83. Финансы: платежи и переводы

SELECT dt, amount, 'payment' kind FROM payments
UNION ALL
SELECT dt, amount, 'transfer' FROM transfers;

84. Логистика: отправки и доставки

SELECT ship_id id, depart_at tm, 'ship' kind FROM shipments
UNION ALL
SELECT delivery_id, arrive_at, 'delivery' FROM deliveries;

85. Маркетинг: каналы трафика

SELECT source, sessions FROM web_traffic
UNION ALL
SELECT source, sessions FROM app_traffic;

Ещё примеры

86. HR: кандидаты из вакансий и реферальных

SELECT candidate_id, vacancy_id FROM applicants
UNION ALL
SELECT candidate_id, ref_id FROM referrals;

87. Безопасность: инциденты и предупреждения

SELECT at, severity, 'incident' k FROM sec_incidents
UNION ALL
SELECT at, severity, 'warn' FROM sec_warnings;

88. DataOps: задачи ETL + CDC

SELECT job_id id, started_at, 'etl' kind FROM etl_jobs
UNION ALL
SELECT task_id, started_at, 'cdc' FROM cdc_runs;

89. Поддержка: тикеты и чаты

SELECT id, created_at, 'ticket' kind FROM tickets
UNION ALL
SELECT id, created_at, 'chat' FROM chats;

90. IoT: показания разных сенсоров

SELECT at, device_id, reading FROM sensor_a
UNION ALL
SELECT at, device_id, reading FROM sensor_b;

91. Data Lake: сырые + очищенные события

SELECT * FROM raw_events
UNION ALL
SELECT * FROM clean_events;

92. Education: экзамены + пересдачи

SELECT student_id, exam_id, score FROM exams
UNION ALL
SELECT student_id, exam_id, score FROM retakes;

93. Media: статьи + видео

SELECT id, published_at, 'article' kind FROM articles
UNION ALL
SELECT id, published_at, 'video' FROM videos;

94. Geo: точки + полигоны

SELECT id, ST_AsText(geom) g, 'point' kind FROM points
UNION ALL
SELECT id, ST_AsText(area), 'poly' FROM polygons;

95. Monitoring: алерты + восстановления

SELECT at, 'alert' k FROM alerts
UNION ALL
SELECT at, 'recovery' FROM recoveries;

96. A/B-тест: трафик контроль + эксперимент

SELECT user_id, 'control' grp FROM ab_control
UNION ALL
SELECT user_id, 'experiment' FROM ab_experiment;

97. Журнал: системные и прикладные события

SELECT ts, msg, 'system' src FROM sys_log
UNION ALL
SELECT ts, msg, 'app' FROM app_log;

98. Ритейл: онлайн + офлайн продажи

SELECT dt, store_id, revenue FROM sales_online
UNION ALL
SELECT dt, store_id, revenue FROM sales_offline;

99. Фитнес: шаги с браслета и телефона

SELECT day, steps FROM tracker_band
UNION ALL
SELECT day, steps FROM tracker_phone;

100. Игры: очки матчей и турниров

SELECT player_id, score, 'match' kind FROM match_scores
UNION ALL
SELECT player_id, score, 'tournament' FROM tournament_scores;

Заключение

ALL удобен для строгих сравнений с множеством значений из подзапросов и для конкатенации наборов через UNION ALL без удаления дублей. Выше — 100 кейсов, применимых в аналитике, e‑commerce, логистике, безопасности, HR и других областях.

Подробности — в официальной документации MySQL.


 

Понравилась статья? Поделиться с друзьями: