ANY और ALL Operators
ANY = कम-से-कम One; ALL = Every
ANY और ALL one scalar expression को one-column subquery से compare करते हैं। SOME, ANY का synonym है।
| Expression | Question |
|---|---|
| x > ANY(set) | क्या x कम-से-कम one value से बड़ा है? |
| x > ALL(set) | क्या x हर value से बड़ा है? |
| x = ANY(set) | क्या x member है? IN के equivalent |
| x <> ALL(set) | क्या x हर value से different है? NOT IN से related |
Verified Comparison Set
Shared sq_students table में X-A के known marks 86.50 और 91.00 हैं। X-B में 74.00, 88.50 और NULL है। Known marks की requirement में examples NULL explicitly filter करते हैं।
SELECT marks
FROM sq_students
WHERE class_name = 'X-A'
AND marks IS NOT NULL;किसी भी X-A Mark से Greater
SELECT student_name, marks
FROM sq_students
WHERE marks > ANY (
SELECT marks
FROM sq_students
WHERE class_name = 'X-A'
AND marks IS NOT NULL
)
ORDER BY marks DESC;Meera 86.50 से greater है; Sana भी 86.50 से greater है। Aarav lower member के equal है, exceed नहीं करता। Kabir दोनों से lower और Vihaan की outer comparison UNKNOWN है।
हर X-B Known Mark से Greater
SELECT student_name, marks
FROM sq_students
WHERE marks > ALL (
SELECT marks
FROM sq_students
WHERE class_name = 'X-B'
AND marks IS NOT NULL
)
ORDER BY student_id;Known X-B maximum 88.50 है। Meera 74.00 और 88.50 दोनों से अधिक है। Sana 88.50 के equal है, इसलिए strict greater-than fail है।
IN, MIN और MAX से Relation
-- Equivalent membership forms:
WHERE class_name = ANY (
SELECT class_name FROM allowed_classes
)
WHERE class_name IN (
SELECT class_name FROM allowed_classes
)Non-empty, NULL-free numeric set पर x > ANY(set), x > MIN(set) जैसा और x > ALL(set), x > MAX(set) जैसा behave करता है। Empty या NULL-containing sets पर automatically equivalent नहीं; slogan नहीं, business rule encode करें।
Empty Sets और NULL Values
- Ordinary non-NULL comparison में empty result पर ANY FALSE है।
- Empty result पर ALL TRUE है—कोई row condition disprove नहीं करती।
- Comparisons में NULL हो और कोई TRUE/FALSE result predicate settle न करे तो outcome UNKNOWN हो सकता है।
- WHERE केवल TRUE रखता है, FALSE या UNKNOWN नहीं।
-- केवल known marks:
WHERE marks > ALL (
SELECT marks
FROM sq_students
WHERE class_name = 'X-B'
AND marks IS NOT NULL
)Restrictions, Debugging और अभ्यास
expr op {ANY|ALL|SOME} subquery में MySQL scalar expression और one-column subquery expect करता है। Multi-column row comparison इन operators में वैसे supported नहीं जैसे IN के साथ row constructors हैं।
- Subquery चलाकर min, max, NULL count और row count लिखें।
- Quantifier को plain language में translate करें।
- Boundary equality test करें, केवल above/below नहीं।
- Empty और NULL-containing sets test करें।
- Correctness के बाद EXPLAIN लें।
अभ्यास: ANY X-A mark से lower scores; ALL X-A marks से lower scores; = ANY को IN में rewrite; inner class missing होने पर result explain करें।
Official संदर्भ
Syntax और behavior official MySQL 8.4 manual से जाँचे गए हैं। Production से पहले हर query disposable copy पर test करें।