SQL सर्वर में CASE स्टेटमेंट और नेस्टेड केस: T-SQL उदाहरण
वास्तविक जीवन में मामले का अवलोकन!
पुनः, वास्तविक जीवन में, हम विभिन्न परिस्थितियों के परिणाम के आधार पर अलग-अलग कार्य करते हैं।
अधिक विस्तार से समझने के लिए नीचे दिए गए उदाहरण पर विचार करें:
- अगर हवाई जहाज का टिकट 100 डॉलर से कम का हो तो मैं लॉस एंजिल्स की यात्रा करूंगा।
- अगर फ्लाइट टिकट 100 से 200 डॉलर के बीच हो तो मैं न्यूयॉर्क जरूर जाऊंगा
- अगर फ्लाइट टिकट 200 से 400 डॉलर के बीच हो तो मैं यूरोप की यात्रा करूंगा
- अन्यथा, मैं किसी नजदीकी पर्यटन स्थल पर जाना पसंद करूंगा।
आइए नीचे दिए गए उदाहरण से शर्त और कार्रवाई को अलग-अलग वर्गीकृत करने पर विचार करें:
स्थितियाँ - उड़ान की टिकटें | निष्पादित कार्य, केवल तभी जब शर्त हो जब सही है |
Less $100 . से अधिक | लॉस एंजिल्स की यात्रा करें |
$ 100 से $ 200 के बीच | न्यूयॉर्क जाएँ |
$ 200 से $ 400 के बीच | यूरोप की यात्रा करें |
उपरोक्त में से कोई भी शर्त पूरी नहीं हुई | निकटवर्ती पर्यटन स्थल |
उपरोक्त उदाहरण में, हम देख सकते हैं कि अलग-अलग परिस्थितियों का परिणाम अलग-अलग कार्रवाई को नियंत्रित कर रहा है। उदाहरण के लिए, आगंतुक न्यूयॉर्क जाने का कार्य केवल तभी करेगा जब फ्लाइट टिकट $100 से $200 के बीच हो।
इसी प्रकार, MS SQL CASE कथन भी विभिन्न स्थितियों के परिणाम के आधार पर विभिन्न T-SQL कथनों को निष्पादित करने की क्षमता प्रदान करता है।
SQL सर्वर में CASE स्टेटमेंट क्या है?
SQL सर्वर में CASE कथन IF…ELSE कथन का विस्तार है। IF…ELSE के विपरीत, जहाँ अधिकतम एक शर्त की ही अनुमति है, CASE उपयोगकर्ता को MS SQL में विभिन्न क्रियाओं को निष्पादित करने के लिए कई शर्तें लागू करने की अनुमति देता है। यह उपयोगकर्ता द्वारा परिभाषित शर्त से संबंधित एक संगत मान लौटाता है।
आइए निम्नलिखित अनुभागों में SQL में केस का उपयोग और इसकी अवधारणा सीखें।
In MS SQL, CASE दो प्रकार के होते हैं।
- सरल मामला
- खोजा गया मामला
सरल मामला
सरल केस के लिए वाक्यविन्यास
CASE <Case_Expression> WHEN Value_1 THEN Statement_1 WHEN Value_2 THEN Statement_2 . . WHEN Value_N THEN Statement_N [ELSE Statement_Else] END AS [ALIAS_NAME]
यहाँ,
- पैरामीटर केस_एक्सप्रेशन उस अभिव्यक्ति को दर्शाता है जिससे अंततः हमारी तुलना की जाएगी मान_1, मान_2, ...
- मापदंडों कथन_1, कथन_2… उन कथनों को इंगित करें जो Case_Expression होने पर निष्पादित किए जाएंगे = मान_1, केस_एक्सप्रेशन = Value_2, ... इत्यादि.
- संक्षेप में, शर्त क्या Case_Expression = Value_N और ACTION कथन_N का निष्पादन है यदि उपरोक्त परिणाम सत्य है.
- उपनाम_नाम वैकल्पिक है और SQL सर्वर CASE स्टेटमेंट परिणाम को दिया गया उपनाम नाम है। इसका उपयोग अधिकतर तब किया जाता है जब हम SQL सर्वर सेलेक्ट क्लॉज में Case का उपयोग करते हैं।
सरल मामले के लिए नियम
- सरल केस केवल Value_1 से Value_N तक Case_Expression की समानता जांच की अनुमति देता है।
- Case_Expression की तुलना Value से की जाती है, क्रम में पहले मान से शुरू करते हुए, यानी Value_1. नीचे निष्पादन दृष्टिकोण दिया गया है:
- यदि Case_Expression, Value_1 के समतुल्य है, तो आगे के WHEN…THEN कथनों को छोड़ दिया जाएगा, तथा CASE निष्पादन तुरंत समाप्त हो जाएगा।
- यदि Case_Expression, Value_1 से मेल नहीं खाता है, तो Case_Expression की तुलना Value_2 से की जाती है। Case_Expression की तुलना Value से करने की यह प्रक्रिया तब तक जारी रहेगी जब तक Case_Expression, Value_1, Value_2,… के सेट से मेल खाता समतुल्य मान नहीं पा लेता।
- यदि कुछ भी मेल नहीं खाता, तो नियंत्रण ELSE कथन पर चला जाता है, और Statement_Else निष्पादित हो जाएगा।
- ELSE वैकल्पिक है.
- यदि ELSE मौजूद नहीं है और Case_Expression किसी भी मान से मेल नहीं खाता है, तो शून्य प्रदर्शित किया जाएगा.
नीचे दिया गया चित्र सरल केस के निष्पादन प्रवाह को दर्शाता है।
उदाहरण
कल्पना: मान लें कि हमारे पास तालिका इस प्रकार है 'गुरु99' दो कॉलम और चार पंक्तियों के साथ जैसा कि नीचे प्रदर्शित है:
हम इस्तेमाल करेंगे 'गुरु99' आगे के उदाहरणों में तालिका
प्रश्न 1: NO ELSE विकल्प के साथ सरल मामला
SELECT Tutorial_ID, Tutorial_name, CASE Tutorial_name WHEN 'SQL' THEN 'SQL is developed by IBM' WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' END AS Description FROM Guru99
रिजल्ट: नीचे दिया गया चित्र, बिना किसी अन्य कारण के सरल केस के निष्पादन प्रवाह को समझाता है।
प्रश्न 2: ELSE विकल्प के साथ सरल मामला।
SELECT Tutorial_ID, Tutorial_name, CASE Tutorial_name WHEN 'SQL' THEN 'SQL is developed by IBM' WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' ELSE 'This is NO SQL language.' END AS Description FROM Guru99
रिजल्ट: नीचे दिया गया चित्र ELSE के साथ SIMPLE CASE के निष्पादन प्रवाह को समझाता है।
खोजा गया मामला
खोजे गए मामले के लिए वाक्यविन्यास
CASE WHEN <Boolean_Expression_1> THEN Statement_1 WHEN <Boolean_Expression_2> THEN Statement_2 . . WHEN <Boolean_Expression_N> THEN Statement_N [ELSE Statement_Else] END AS [ALIAS_NAME]
यहाँ,
- पैरामीटर Boolean_Expression_1, …उस अभिव्यक्ति को दर्शाता है जिसका मूल्यांकन TRUE या FALSE के लिए किया जाएगा।
- पैरामीटर स्टेटमेंट_1, स्टेटमेंट_2… उन स्टेटमेंट्स को दर्शाते हैं जो तब निष्पादित होंगे जब इसके संगत Boolean_Expression_1, Boolean_Expression_2 परिणाम सत्य होंगे।
- संक्षेप में, शर्त Boolean_Expression_1 है, ... और ACTION कथन_N का निष्पादन है यदि उपरोक्त boolean_Expression_1 सत्य है।
- ALIAS_NAME वैकल्पिक है और CASE स्टेटमेंट परिणाम को दिया गया उपनाम नाम है। इसका उपयोग अधिकतर तब किया जाता है जब हम सेलेक्ट क्लॉज़ में CASE का उपयोग करते हैं।
खोजे गए मामले के लिए नियम
- साधारण केस के विपरीत, खोजा गया केस केवल समानता जांच तक ही सीमित नहीं है, बल्कि बूलियन अभिव्यक्ति की भी अनुमति देता है।
- बूलियन अभिव्यक्ति का मूल्यांकन, पहले बूलियन अभिव्यक्ति से शुरू करके, अर्थात, Boolean_expression_1 के क्रम में किया जाता है। नीचे निष्पादन दृष्टिकोण दिया गया है:
- यदि Boolean_expression_1 सत्य है, तो आगे के WHEN…THEN कथनों को छोड़ दिया जाएगा, और CASE निष्पादन तुरंत समाप्त हो जाएगा।
- यदि Boolean_expression_1 FALSE है, तो Boolean_expression_2 का मूल्यांकन TRUE स्थिति के लिए किया जाता है। Boolean_expression का मूल्यांकन करने की यह प्रक्रिया तब तक जारी रहेगी जब तक Boolean_expression में से कोई एक TRUE नहीं लौटाता।
- यदि कुछ भी मेल नहीं खाता, तो नियंत्रण ELSE कथन पर चला जाता है, और Statement_Else निष्पादित हो जाएगा।
- सरल केस की तरह सर्च केस में भी ELSE वैकल्पिक है।
- यदि ELSE मौजूद नहीं है और कोई भी Boolean_expression TRUE नहीं लौटाता है, तो Null प्रदर्शित किया जाएगा।
नीचे आरेख के निष्पादन प्रवाह को चित्रित करें खोजा गया मामला.
उदाहरण
प्रश्न 1: NO ELSE विकल्प के साथ खोजा गया मामला
SELECT Tutorial_ID, Tutorial_name, CASE WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM' WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' END AS Description FROM Guru99
रिजल्ट: नीचे दिया गया आरेख निष्पादन प्रवाह की व्याख्या करता है का खोजा गया मामला साथ में दूसरा नहीं।
प्रश्न 2: खोजा गया मामला साथ और विकल्प.
SELECT Tutorial_ID, Tutorial_name, CASE WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM' WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' ELSE 'This is NO SQL language.' END AS Description FROM Guru99
रिजल्ट: नीचे दिया गया आरेख निष्पादन प्रवाह की व्याख्या करता है of खोजा गया मामला साथ में अन्यथा।
निष्पादन दृष्टिकोण के बीच अंतर: सरल और खोज मामला।
आइए नजर डालते हैं सरल मामला नीचे उदाहरण:
SELECT Tutorial_ID, Tutorial_name, CASE Tutorial_name WHEN 'SQL' THEN 'SQL is developed by IBM' WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' ELSE 'This is NO SQL language.' END AS Description FROM Guru99
यहाँ, 'ट्यूटोरियल_नाम' SQL में CASE अभिव्यक्ति का एक भाग है। फिर 'ट्यूटोरियल_नाम' मूल्य की तुलना प्रत्येक के साथ की जाती है जब मान, यानी 'SQL'... जब तक 'Tutorial_name' WHEN मानों से मेल नहीं खाता।
पर इसके विपरीत, खोज मामला उदाहरण नहीं है केस अभिव्यक्ति:
SELECT Tutorial_ID, Tutorial_name, CASE WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM' WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' END AS Description FROM Guru99
यहाँ, प्रत्येक जब कथन इसके सशर्त बूलियन अभिव्यक्ति. से प्रत्येक बूलियन अभिव्यक्ति यानी ट्यूटोरियल_नाम = 'एसक्यूएल',… का मूल्यांकन किया जाता है सत्य/असत्य जब तक पहला बूलियन अभिव्यक्ति जो मूल्यांकन करती है जब सही है.
सरल और खोजे गए मामले के बीच अंतर
सरल मामला | खोजा गया मामला |
---|---|
CASE कीवर्ड CASE_Expression के तुरंत बाद और WHEN कथन से पहले आता है।
उदाहरण के लिए: |
केस कीवर्ड के बाद WHEN कथन आता है, तथा CASE और WHEN के बीच कोई अभिव्यक्ति नहीं होती है।
उदाहरण के लिए: |
सरल मामले में, प्रत्येक WHEN कथन के लिए VALUE मौजूद होता है। यह मान: Value_1, Value_2… एकल CASE_Expression के साथ क्रमिक रूप से तुलना की जाती है। परिणाम प्रत्येक WHEN कथन के लिए TRUE/FALSE स्थिति के लिए मूल्यांकन किया जाता है।
उदाहरण के लिए: |
खोजे गए मामले में, प्रत्येक WHEN कथन के लिए Boolean_Expression मौजूद है। यह Boolean_Expressions: Boolean_Expression_1, Boolean_Expression_2,… प्रत्येक WHEN कथन के लिए TRUE/FALSE स्थिति का मूल्यांकन करता है।
उदाहरण के लिए: |
सरल केस केवल समानता जाँच का समर्थन करता है। यानी क्या CASE_Expression = VALUE_1, VALUE_2…
उदाहरण के लिए: |
Boolean_Expression_N के साथ, सर्च केस किसी भी ऑपरेशन का समर्थन करता है जिसके परिणामस्वरूप बूलियन मान प्राप्त होता है। इसमें बराबर और बराबर नहीं ऑपरेटर शामिल हैं।
उदाहरण के लिए: |
नेस्टेड CASE: IF ELSE में CASE
हम प्रयोग कर सकते हैं IF ELSE के अंदर CASEनीचे MS-SQL कोड का उदाहरण दिया गया है
DECLARE @Flight_Ticket int; SET @Flight_Ticket = 190; IF @Flight_Ticket > 400 PRINT 'Visit Nearby Tourist Location'; ELSE BEGIN SELECT CASE WHEN @Flight_Ticket BETWEEN 0 AND 100 THEN 'Visit Los Angeles' WHEN @Flight_Ticket BETWEEN 101 AND 200 THEN 'Visit New York' WHEN @Flight_Ticket BETWEEN 201 AND 400 THEN 'Visit Europe' END AS Location END
उपरोक्त उदाहरण में CASE को IF…ELSE कथन के अंदर नेस्ट किया गया है:
सबसे पहले, IF स्टेटमेंट निष्पादित होगा और यदि केस कंडीशन एस क्यू एल सर्वर यदि गलत है तो ELSE कथन निष्पादित होगा।
अन्यथा इसमें SQL में नेस्टेड CASE स्टेटमेंट शामिल है। फ्लाइट टिकट मूल्य के आधार पर, निम्न में से एक परिणाम प्रदर्शित किया जाएगा:
- यदि फ्लाइट टिकट की कीमत $400 से अधिक है तो सिस्टम 'निकटवर्ती पर्यटक स्थल पर जाएँ' प्रिंट करेगा
- यदि फ्लाइट टिकट की कीमत $0 से $100 के बीच है तो सिस्टम 'विजिट लॉस एंजिल्स' प्रिंट करेगा
- यदि फ्लाइट टिकट की कीमत 101 डॉलर से 200 डॉलर के बीच है तो सिस्टम 'विजिट न्यूयॉर्क' प्रिंट करेगा
- यदि फ्लाइट टिकट की कीमत 201 डॉलर से 400 डॉलर के बीच है तो सिस्टम 'विजिट यूरोप' प्रिंट करेगा
नेस्टेड CASE: CASE के अंदर CASE
हम SQL में CASE के अंदर CASE का उपयोग कर सकते हैं। नीचे MS-SQL कोड का उदाहरण दिया गया है
DECLARE @Flight_Ticket int; SET @Flight_Ticket = 250; SELECT CASE WHEN @Flight_Ticket >= 400 THEN 'Visit Nearby Tourist Location.' WHEN @Flight_Ticket < 400 THEN CASE WHEN @Flight_Ticket BETWEEN 0 AND 100 THEN 'Visit Los Angeles' WHEN @Flight_Ticket BETWEEN 101 AND 200 THEN 'Visit New York' WHEN @Flight_Ticket BETWEEN 201 AND 400 THEN 'Visit Europe' END END AS Location
उपरोक्त उदाहरण में CASE को दूसरे CASE कथन के अंदर नेस्ट किया गया है:
सिस्टम बाहरी CASE को निष्पादित करने से शुरू होता है। अगर Flight_Ticket < $400 है तो आंतरिक CASE निष्पादित होगा।
फ्लाइट टिकट के मूल्य के आधार पर, निम्नलिखित में से एक परिणाम प्रदर्शित किया जाएगा:
- यदि फ्लाइट टिकट की कीमत $400 से अधिक है तो सिस्टम 'निकटवर्ती पर्यटक स्थल पर जाएँ' प्रिंट करेगा
- यदि फ्लाइट टिकट की कीमत $0 से $100 के बीच है तो सिस्टम 'विजिट लॉस एंजिल्स' प्रिंट करेगा
- यदि फ्लाइट टिकट की कीमत 101 डॉलर से 200 डॉलर के बीच है तो सिस्टम 'विजिट न्यूयॉर्क' प्रिंट करेगा
- यदि फ्लाइट टिकट की कीमत 201 डॉलर से 400 डॉलर के बीच है तो सिस्टम 'विजिट यूरोप' प्रिंट करेगा
मामला अपडेट सहित
धारणा: मान लें कि हमारे पास 'गुरु99' नामक तालिका है जिसमें दो कॉलम और चार पंक्तियाँ हैं जैसा कि नीचे दिखाया गया है:
हम आगे के उदाहरणों में 'Guru99' तालिका का उपयोग करेंगे
हम CASE को UPDATE के साथ इस्तेमाल कर सकते हैं। नीचे MS-SQL कोड का उदाहरण दिया गया है:
UPDATE Guru99 SET Tutorial_Name = ( CASE WHEN Tutorial_Name = 'SQL' THEN 'Structured Query language.' WHEN Tutorial_Name = 'PL/SQL' THEN 'Oracle PL/SQL' WHEN Tutorial_Name = 'MSSQL' THEN 'Microsoft SQL.' WHEN Tutorial_Name = 'Hadoop' THEN 'Apache Hadoop.' END )
उपरोक्त उदाहरण में CASE का प्रयोग UPDATE कथन में किया गया है।
ट्यूटोरियल_नाम मान के आधार पर, ट्यूटोरियल_नाम कॉलम को THEN कथन मान के साथ अद्यतन प्राप्त होगा।
- यदि Tutorial_Name = 'SQL' तो Tutorial_Name को 'संरचित क्वेरी भाषा' में अपडेट करें
- यदि Tutorial_Name = 'PL/SQL' तो Tutorial_Name को ' पर अपडेट करेंOracle पीएल/एसक्यूएल'
- यदि Tutorial_Name = 'MSSQL' तो Tutorial_Name को ' पर अपडेट करेंMicrosoft एसक्यूएल'
- यदि Tutorial_Name = 'Hadoop' तो Tutorial_Name को 'Apache Hadoop' में अपडेट करें
आइए अद्यतन मूल्य की जांच करने के लिए गुरु99 तालिका को क्वेरी करें:
आदेश के साथ मामला
हम CASE का उपयोग Order By के साथ कर सकते हैं। नीचे MS-SQL कोड का उदाहरण दिया गया है:
Declare @Order Int; Set @Order = 1 Select * from Guru99 order by CASE WHEN @Order = 1 THEN Tutorial_ID WHEN @Order = 2 THEN Tutorial_Name END DESC
यहां CASE का प्रयोग Order By के साथ किया गया है।
@Order को 1 पर सेट किया जाता है और प्रथम WHEN बूलियन अभिव्यक्ति का मूल्यांकन TRUE के रूप में किया जाता है, Tutorial_ID को शर्त के अनुसार ऑर्डर के लिए चुना जाता है
रोचक तथ्य!
- CASE को किसी अन्य CASE के साथ-साथ किसी अन्य IF…ELSE कथन में भी नेस्ट किया जा सकता है।
- SELECT के अतिरिक्त, CASE का उपयोग किसी अन्य के साथ भी किया जा सकता है एसक्यूएल अपडेट, ऑर्डर बाय जैसे खंड.
सारांश
- MS SQL में दो प्रकार के CASE होते हैं: सरल CASE और खोजा गया CASE
- CASE कथन में ELSE वैकल्पिक है।