SQL Academy · पाठ

CASE एक्सप्रेशन

क्वेरी के भीतर IF/THEN तर्क।

पाठ 1, कुल 4 में से13 चरण

CASE एक्सप्रेशन, CoddyKit पर SQL Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह SQL Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। SQL Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

SQL में शाखागत तर्क

कभी-कभी आपको ऐसी क्वेरी चाहिए होती है जो निर्णय ले: यदि यह हो, तो वह करें; अन्यथा कुछ और करें। SQL इसके लिए CASE अभिव्यक्ति देता है।

CASE आपको शर्तों के आधार पर अलग-अलग मान लौटाने देता है, सीधे SELECT के भीतर। इसे SQL की if/else श्रृंखला का रूप समझिए।

SELECT name,
       CASE WHEN price > 100 THEN 'expensive'
            ELSE 'affordable'
       END AS price_band
FROM products;

CASE की संरचना

CASE अभिव्यक्ति के कुछ भाग होते हैं:

  • WHEN condition THEN value — एक या अधिक शाखाएँ
  • ELSE value — एक वैकल्पिक मान
  • END — अभिव्यक्ति को बंद करता है (अनिवार्य!)

SQL WHEN शाखाओं का ऊपर से नीचे तक मूल्यांकन करता है और जो शाखा सबसे पहले सत्य होती है, उसका मान लौटाता है।

CASE WHEN condition1 THEN result1
     WHEN condition2 THEN result2
     ELSE default_result
END

CASE एक मान लौटाता है

मुख्य बात यह है: CASE अभिव्यक्ति हर पंक्ति के लिए एक ही मान देती है। चूँकि यह एक मान बनाती है, इसलिए आप इसका उपयोग वहाँ कर सकते हैं जहाँ भी मान की अनुमति हो — SELECT सूची में, WHERE में, ORDER BY में, यहाँ तक कि फ़ंक्शन के भीतर भी।

यहाँ यह हर ऑर्डर को एक सरल स्थिति देता है।

SELECT order_id,
       CASE WHEN shipped_at IS NOT NULL THEN 'shipped'
            WHEN paid_at IS NOT NULL THEN 'paid'
            ELSE 'pending'
       END AS status
FROM orders;

पहला मिलान जीतता है

क्रम महत्वपूर्ण है। SQL हर WHEN की क्रम से जाँच करता है और पहली सत्य शाखा पर रुक जाता है। बाद की शाखाओं को अनदेखा कर दिया जाता है, भले ही वे भी मेल खाती हों।

नीचे, 1000 से अधिक का ऑर्डर 'बड़ा' होता है, कभी 'मध्यम' नहीं, क्योंकि पहला मेल खाने वाला शाखा-नियम लागू होता है।

SELECT order_id, total,
       CASE WHEN total >= 1000 THEN 'large'
            WHEN total >= 100  THEN 'medium'
            ELSE 'small'
       END AS size_band
FROM orders;

ELSE शाखा

ELSE शाखा बाकी सभी स्थितियों के लिए होती है। यदि कोई भी WHEN शर्त सत्य नहीं होती, तो CASE ELSE का मान लौटाता है।

यदि आप ELSE छोड़ देते हैं और कुछ भी मेल नहीं खाता, तो CASE NULL लौटाता है। यह अनपेक्षित NULL मानों का एक सामान्य कारण है, इसलिए जब आपको निश्चित वैकल्पिक मान चाहिए, तो स्पष्ट ELSE जोड़ें।

SELECT name,
       CASE WHEN stock = 0 THEN 'out of stock' END AS note
FROM products;
-- rows with stock > 0 get NULL in note (no ELSE)

शर्तें कुछ भी हो सकती हैं

WHEN की शर्त केवल एक बूलियन अभिव्यक्ति होती है — उसी प्रकार की, जैसी आप WHERE क्लॉज़ में लिखते हैं। आप तुलनाओं, AND, OR, BETWEEN, IN, LIKE और अन्य का उपयोग कर सकते हैं।

SELECT email,
       CASE WHEN country IN ('US','CA') AND age >= 18 THEN 'eligible'
            WHEN email LIKE '%@test.com'             THEN 'test account'
            ELSE 'review'
       END AS segment
FROM users;

परिणामों के प्रकार संगत होने चाहिए

CASE की हर शाखा को संगत प्रकार वाले मान लौटाने चाहिए, क्योंकि कॉलम का एक ही प्रकार होना चाहिए। पाठ और संख्याओं को मिलाने से त्रुटि या अनपेक्षित प्रकार-रूपांतरण हो सकता है।

यदि आपको एक शाखा में संख्याएँ और दूसरी में पाठ चाहिए, तो प्रकारों को एकरूप करने के लिए स्पष्ट रूप से रूपांतरण करें।

SELECT product_id,
       CASE WHEN on_sale THEN price * 0.9
            ELSE price
       END AS effective_price   -- all branches numeric: good
FROM products;

WHERE में CASE का उपयोग करना

क्योंकि CASE एक मान बनाता है, आप WHERE क्लॉज़ के भीतर उसके परिणाम की तुलना कर सकते हैं। यह बदलते फ़िल्टर नियमों के लिए उपयोगी है।

हालाँकि, अक्सर WHERE में सीधा बूलियन तर्क अधिक स्पष्ट होता है — CASE का उपयोग WHERE में तभी करें जब शाखागत तर्क सचमुच शर्त को सरल बनाता हो।

SELECT *
FROM orders
WHERE CASE WHEN priority = 'high' THEN total > 0
           ELSE total > 500
      END;

CASE को अंदर रखना

परतदार तर्क व्यक्त करने के लिए आप एक CASE को दूसरी CASE शाखा के भीतर रख सकते हैं। यह काम करता है, लेकिन बहुत अधिक अंदर रखी गई अभिव्यक्तियों को पढ़ना कठिन हो जाता है।

अंदर रखने की गहराई कम रखें; यदि यह बढ़ने लगे, तो अलग कॉलम या खोज तालिका आमतौर पर अधिक साफ़ विकल्प होती है।

SELECT order_id,
       CASE WHEN region = 'EU' THEN
              CASE WHEN total > 100 THEN 'EU big'
                   ELSE 'EU small' END
            ELSE 'other'
       END AS bucket
FROM orders;

समुच्चय फ़ंक्शन के साथ CASE

एक शक्तिशाली तरीका यह है कि CASE को SUM या COUNT जैसे समुच्चय फ़ंक्शन के भीतर रखा जाए। इससे एक ही चरण में पंक्तियों की सशर्त गिनती या योग किया जा सकता है — इसे कभी-कभी सशर्त समुच्चयन या सारणी-रूपांतरण भी कहा जाता है।

SELECT
  COUNT(*) AS total_orders,
  SUM(CASE WHEN status = 'shipped' THEN 1 ELSE 0 END) AS shipped,
  SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) AS pending
FROM orders;

CASE से जान-बूझकर NULL लौटाना

किसी शाखा से NULL लौटाना कभी-कभी ठीक वही होता है जो आप चाहते हैं — जैसे किसी ऐसे मान को खाली दिखाने के लिए जिसे आप प्रदर्शित नहीं करना चाहते, या उसे बाद के ऐसे समुच्चय फ़ंक्शन को देने के लिए जो NULL को अनदेखा करता है।

यहाँ केवल बड़े ऑर्डर अपना कुल योग रखते हैं; बाकी NULL बन जाते हैं, इसलिए AVG उन्हें छोड़ देगा।

SELECT order_id,
       CASE WHEN total >= 1000 THEN total
            ELSE NULL
       END AS large_order_total
FROM orders;

त्वरित जाँच

उस पंक्ति के लिए इस अभिव्यक्ति पर विचार कीजिए जहाँ total = 1500 है:

CASE WHEN total >= 100 THEN 'medium' WHEN total >= 1000 THEN 'large' ELSE 'small' END

यह कौन-सा मान लौटाती है?

पुनरावृत्ति: CASE अभिव्यक्ति

आपने एसक्यूएल में सशर्त तर्क की मूल बातें सीखीं:

  • CASE WHEN ... THEN ... ELSE ... END हर पंक्ति के लिए एक मान लौटाता है
  • शाखाओं की जाँच ऊपर से नीचे की ओर होती है; पहली मेल खाने वाली शाखा प्रभावी होती है
  • ELSE छोड़ने पर, कुछ भी मेल न खाने की स्थिति में NULL मिलता है
  • सभी शाखाओं को संगत प्रकार लौटाने चाहिए
  • CASE का उपयोग SELECT, WHERE और समेकित फ़ंक्शनों के भीतर किया जा सकता है

अब हम CASE के दोनों वाक्य-विन्यास रूपों की तुलना करेंगे।

SELECT name,
       CASE WHEN price > 100 THEN 'expensive'
            WHEN price > 20  THEN 'mid'
            ELSE 'cheap'
       END AS tier
FROM products;
शुरुआत निःशुल्क

एआई शिक्षक के साथ SQL सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
46
पाठ
183

अक्सर पूछे जाने वाले प्रश्न

क्या “CASE एक्सप्रेशन” पाठ निःशुल्क है?

हाँ—“CASE एक्सप्रेशन” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और SQL Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। SQL Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“CASE एक्सप्रेशन” में मैं क्या सीखूँगा?

क्वेरी के भीतर IF/THEN तर्क। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ SQL Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या SQL Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर SQL Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“CASE एक्सप्रेशन” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस SQL Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर SQL Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. CASE एक्सप्रेशन
  2. सर्च्ड बनाम सिंपल CASE
  3. डेटा को श्रेणियों में बाँटना और लेबल देना
  4. ORDER BY और एग्रीगेट में CASE
← SQL Academy पर वापस जाएँ