रेंज क्वेरी के लिए IN() नहीं, BETWEEN उपयोग करें
IN() केवल सूचीबद्ध सटीक मानों से मिलान करता है, बीच के मानों को नहीं। रेंज (श्रेणी) क्वेरी के लिए BETWEEN या तुलना ऑपरेटर उपयोग करें।
समस्या: IN() रेंज नहीं करता
mysql> SELECT PortalId FROM demo WHERE PortalId IN(4, 10);
+----------+ | PortalId | +----------+ | 4 | | 10 |
केवल 4 और 10 मिलते हैं, 5-9 नहीं।
समाधान 1: BETWEEN (समावेशी)
mysql> SELECT PortalId FROM demo WHERE PortalId BETWEEN 4 AND 10;
+----------+ | PortalId | +----------+ | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | +----------+
समाधान 2: तुलना ऑपरेटर (असमावेशी/मिश्रित)
+----------+ | PortalId | +----------+ | 5 | | 6 | | 7 | | 8 | | 9 | +----------+
तुलना
| ऑपरेटर | समावेशी? | उपयोग |
|---|---|---|
BETWEEN a AND b | हाँ (a और b दोनों) | सबसे पठनीय रेंज के लिए |
>= AND < | आंशिक | आधा-खुला अंतराल |
> AND < | नहीं | खुला अंतराल |
IN(val1, val2...) | केवल सूचीबद्ध | विवेकपूर्ण मान, रेंज नहीं |
दिनांक रेंज
WHERE order_date BETWEEN '2024-01-01' AND '2024-01-31' WHERE order_date >= '2024-01-01' AND order_date < '2024-02-01' -- बेहतर (इंडेक्स फ्रेंडली)
प्रदर्शन टिप
BETWEENऔर>= AND <इंडेक्स का उपयोग कर सकते हैंfunction(col) BETWEEN ...इंडेक्स उपयोग रोकता है- दिनांक रेंज के लिए
col >= start AND col < end_nextपैटर्न पसंदीदा