मुख्य सामग्री पर जाएँ

SQL DECODE() फ़ंक्शन को समझना

Oracle में डेटा रूपांतरण में सशर्त लॉजिक के लिए DECODE() का उपयोग करना सीखें। प्रदर्शन और व्यवहार में DECODE() की तुलना CASE WHEN स्टेटमेंट से करें।
· 11 मि॰ पढ़ें

AI के साथ खोजें

SQL क्वेरीज के भीतर सीधे सशर्त लॉजिक लागू करना डेटा साइंटिस्ट्स और डेटा इंजीनियर्स के लिए एक आवश्यक कौशल है। यह ट्यूटोरियल Oracle में SQL DECODE() फ़ंक्शन का उपयोग करने पर एक व्यापक मार्गदर्शिका प्रदान करता है। मैं Oracle में DECODE() की तुलना CASE WHEN से भी करूँगा और आपको समझने में मदद करूँगा कि कब किसका उपयोग करना चाहिए। अंत में, मैं SQL Server, PostgreSQL, और MySQL में समकक्ष रूपांतरणों के लिए कोड भी प्रदान करूँगा। 

व्यावहारिक उदाहरण देखने से पहले, मैं DataCamp के Introduction to Oracle SQL कोर्स को लेने की सलाह देता हूँ ताकि आप PL/SQL डायलेक्ट के उपयोग में अपनी कौशल ताज़ा कर सकें। साथ ही, हमारा Intermediate SQL कोर्स आपको उन उन्नत SQL कौशलों से लैस करेगा जो DECODE() फ़ंक्शन वाली क्वेरीज सँभालते समय आवश्यक होते हैं, क्योंकि, जैसा कि हम देखेंगे, DECODE() का अक्सर सबक्वेरीज जैसी अधिक उन्नत सिंटैक्स के साथ उपयोग किया जाता है।

SQL DECODE() फ़ंक्शन का उपयोग कैसे करें

SQL DECODE() फ़ंक्शन Oracle डेटाबेस में नैटिव रूप से समर्थित है और PL/SQL डायलेक्ट में उपलब्ध है। DECODE() फ़ंक्शन क्वेरी के भीतर सशर्त लॉजिक लागू करने की अनुमति देता है। यह तकनीक महत्वपूर्ण है क्योंकि यह डेटाबेस से रिकॉर्ड प्राप्त करते समय डेटा रूपांतरण में मदद करती है।

नीचे दिए गए employees टेबल पर विचार करें, जहाँ department_id में संख्यात्मक मान हैं। इसके बजाय, हम चाहते हैं कि department_id को department_name कहा जाए और उसमें अधिक समझने योग्य श्रेणियाँ हों।

SQL DECODE() फ़ंक्शन का उपयोग करके बदलने के लिए उदाहरण तालिका

SQL DECODE() फ़ंक्शन का उपयोग करके रूपांतरित करने के लिए उदाहरण तालिका। चित्र: लेखक द्वारा।

नीचे दिए गए उदाहरण में दिखाया गया है कि DECODE() फ़ंक्शन का उपयोग करके department_id को वास्तविक नामों में कैसे बदला जाए।

-- Using DECODE to transform department_id to department_name
SELECT 
    employee_id,
    first_name,
    last_name,
    DECODE(department_id, 
        1, 'IT', 
        2, 'HR', 
        3, 'Finance', 
        4, 'Marketing', 
        5, 'Sales', 
        'Unknown') AS department_name,
    salary,
    hire_date,
    city
FROM employees;

SQL DECODE() फ़ंक्शन का उपयोग करके रूपांतरित तालिका का उदाहरण आउटपुट

SQL DECODE() फ़ंक्शन का उपयोग करने के बाद उदाहरण आउटपुट तालिका। चित्र: लेखक द्वारा।

SQL DECODE() फ़ंक्शन को समझना

DECODE() फ़ंक्शन Oracle डेटाबेस में उपलब्ध है और आपको सशर्त लॉजिक का उपयोग कर किसी कॉलम को ट्रांसफ़ॉर्म करने की अनुमति देता है। DECODE() फ़ंक्शन एक सरल क्वेरी के माध्यम से एकाधिक सशर्त रूपांतरण करने देता है।

DECODE() फ़ंक्शन का सिंटैक्स नीचे दिखाया गया है:

DECODE(expression, search1, result1, search2, result2, ..., default)

जहाँ:

  • expression: वह मान जिसे तुलना करनी है।

  • search: वह मान जिसके विरुद्ध expression की तुलना की जाती है।

  • result: वह मान जो expression के search मान से मेल खाने पर लौटाया जाता है।

  • default: यदि कोई मेल न मिले तो लौटाया जाने वाला मान (वैकल्पिक)।

SQL DECODE() फ़ंक्शन के साथ उन्नत तकनीकें और विचार

कुछ उन्नत SQL ऑपरेशंस को DECODE() फ़ंक्शन का उपयोग करके किया जा सकता है। ये उन्नत तकनीकें अधिक जटिल सशर्त लॉजिक रूपांतरणों की अनुमति देती हैं। 

DECODE() के साथ एग्रीगेट फ़ंक्शंस

Oracle में DECODE() फ़ंक्शन को SELECT स्टेटमेंट में किसी वैरिएबल को पुनः श्रेणीकृत करने के लिए उपयोग किया जा सकता है, और इसे एग्रीगेट फ़ंक्शंस के साथ SELECT स्टेटमेंट में अधिक जटिल ग्रुपिंग के लिए भी उपयोग किया जा सकता है, जो परिणामों की लचीलापन और व्याख्या में और सुधार करता है। 

निम्न क्वेरी में, हम DECODE() का उपयोग department_id को department_name में बदलने के लिए करते हैं। हम DECODE() का उपयोग औसत वेतन को ‘High Paying’ या 'Low Paying' में वर्गीकृत करने के लिए भी करते हैं।

SELECT 
    department_id,
    
    -- Use DECODE to transform department_id into department_name
    DECODE(
        department_id,
        1, 'IT', 
        2, 'HR', 
        3, 'Finance', 
        4, 'Marketing', 
        5, 'Sales', 
        'Unknown'
    ) AS department_name,
    
    SUM(salary) AS total_salary, 
    
    -- Calculate the average salary for each department and round to nearest integer
    ROUND(AVG(salary), 0) AS average_salary,
    
    -- Use DECODE to categorize average salary into 'High Paying' or 'Low Paying'
    DECODE(
        SIGN(AVG(salary) - 65000), 
        1, 'High Paying', 
        0, 'High Paying', 
        -1, 'Low Paying' 
    ) AS salary_category
FROM 
    employees
GROUP BY 
    department_id; 

एकाधिक SQL DECODE() फ़ंक्शंस का उपयोग करने के बाद उदाहरण तालिका आउटपुट

एकाधिक SQL DECODE() फ़ंक्शंस का उपयोग करने के बाद उदाहरण तालिका आउटपुट। चित्र: लेखक द्वारा

नेस्टेड DECODE() स्टेटमेंट्स

DECODE() फ़ंक्शन को सबक्वेरीज के साथ लागू करने से आप डेटा पर उन्नत सशर्त लॉजिक रूपांतरण कर सकते हैं। Oracle में नेस्टेड DECODE() स्टेटमेंट तब मददगार होता है जब हम किसी तालिका में कई शर्तों का मूल्यांकन करना चाहते हैं।

नीचे दिए गए उदाहरण में, हमने कर्मचारियों को उनके विभाग और वेतन के आधार पर वर्गीकृत करने के लिए नेस्टेड DECODE() स्टेटमेंट का उपयोग किया है।

-- Select the columns
SELECT 
    employee_id,
    first_name, 
    last_name, 
    department_id,
    salary, 
    
    -- Use DECODE to categorize salary based on department and salary thresholds
    DECODE(department_id,
        
        1, DECODE( -- If department_id is 1 (IT)
            CASE 
                WHEN salary > 65000 THEN 'High' 
                ELSE 'Low' 
            END, 
            'High', 'IT High Salary', 
            'Low', 'IT Low Salary' 
        ),
        
        2, DECODE( -- If department_id is 2 (HR)
            CASE 
                WHEN salary > 55000 THEN 'High'
                ELSE 'Low' 
            END, 
            'High', 'HR High Salary', 
            'Low', 'HR Low Salary' 
        ),
        
        3, DECODE( -- If department_id is 3 (Finance)
            CASE 
                WHEN salary > 70000 THEN 'High' 
                ELSE 'Low' 
            END, 
            'High', 'Finance High Salary', 
            'Low', 'Finance Low Salary' 
        ),
        
        4, DECODE( -- If department_id is 4 (Marketing)
            CASE 
                WHEN salary > 68000 THEN 'High'
                ELSE 'Low' 
            END, 
            'High', 'Marketing High Salary', 
            'Low', 'Marketing Low Salary' 
        ),
        
        5, DECODE( -- If department_id is 5 (Sales)
            CASE 
                WHEN salary > 60000 THEN 'High' 
                ELSE 'Low'  
            END, 
            'High', 'Sales High Salary', 
            'Low', 'Sales Low Salary'
        ),
        
        'Unknown Department' -- Default value if department_id does not match any case
    ) AS salary_category
FROM 
    employees;

Oracle में SQL नेस्टेड DECODE() स्टेटमेंट का उपयोग करते हुए उदाहरण तालिका आउटपुट

नेस्टेड DECODE() फ़ंक्शन का उपयोग करने के बाद उदाहरण तालिका आउटपुट। चित्र: लेखक द्वारा

DECODE() NULL मानों को कैसे हैंडल करता है

DECODE() फ़ंक्शन NULL मानों को दो तरीकों से अलग ढंग से हैंडल करता है। एक तो, DECODE() ऐसा व्यवहार करता है मानो दो NULL मान समतुल्य हों। इसका अर्थ है कि जब कॉलम मानों की तुलना NULL से की जाती है, तो NULL मानों को मेल माना जाता है। फिर भी, आपको उन अप्रत्याशित परिणामों से सावधान रहना चाहिए जहाँ NULL को स्पष्ट रूप से ध्यान में नहीं रखा गया है, क्योंकि यह रूपांतरण के दौरान NULL मानों को छिपा सकता है।

इसके अलावा, आपको यह भी पता होना चाहिए कि, ठीक CASE WHEN स्टेटमेंट की तरह, यदि कोई मेल नहीं मिलता है तो DECODE() फ़ंक्शन NULL मान लौटाता है।

नीचे दिया गया उदाहरण दिखाता है कि जहाँ department_id और salary अनुपलब्ध हैं, वहाँ DECODE() फ़ंक्शन कैसे null मान लौटाता है।

-- Select columns
SELECT 
    employee_id,
    first_name,
    last_name, 
    department_id, 
    salary, 
    -- Determine the salary category based on the salary value
    DECODE(salary, 
        NULL, 'No Salary Information',
        60000, 'Standard Salary',
        'Other Salary') AS salary_category, 
    -- Determine the department name based on the department ID
    DECODE(department_id, 
        1, 'IT',
        2, 'HR',
        3, 'Finance',
        4, 'Marketing',
        5, 'Sales') AS department_name 
        -- If department_id does not match any of the above, return NULL
FROM 
    employees;

SQL DECODE() फ़ंक्शन का उपयोग करके NULL मानों को संभालने का उदाहरण तालिका आउटपुट।

NULL मानों को संभालने के लिए DECODE() का उपयोग करने के बाद उदाहरण तालिका आउटपुट। चित्र: लेखक द्वारा

Oracle में DECODE बनाम CASE WHEN

DECODE() फ़ंक्शन पहले पेश किया गया था, और भले ही बाद में उसे CASE WHEN स्टेटमेंट ने पीछे छोड़ दिया हो, फिर भी कुछ संदर्भों में इसे प्राथमिकता दी जाती है। उदाहरण के लिए, DECODE() फ़ंक्शन का सिंटैक्स सरल है, इसलिए यदि लॉजिक काफी सरल है, तो उसे पढ़ना और समझना आसान होता है। 

साथ ही, DECODE() फ़ंक्शन आमतौर पर तेज़ होता है क्योंकि इसका प्रदर्शन एक बिल्ट-इन फ़ंक्शन के रूप में अनुकूलित किया गया है, हालाँकि यह अंतर नगण्य हो सकता है। अंततः, पुराने Oracle सिस्टम्स में, आपको बिल्ट-इन फ़ंक्शन के रूप में DECODE() का उपयोग करना पड़ सकता है। 

अन्य डेटाबेस में DECODE() के विकल्प

DECODE() फ़ंक्शन केवल Oracle डेटाबेस में समर्थित है। हालाँकि, SQL Server, PostgreSQL, और MySQL सशर्त डेटा रूपांतरण लॉजिक लागू करने के वैकल्पिक तरीके प्रदान करते हैं।

DECODE() फ़ंक्शन डेटा रूपांतरण में उपयोगी है क्योंकि यह IF ELSE या CASE स्टेटमेंट्स के उपयोग को हटाकर जटिल लॉजिक को सरल बनाता है। DECODE() फ़ंक्शन क्वेरी की पठनीयता में भी सुधार करता है, जिससे प्रभावी डेटा हेरफेर संभव होता है। आइए DECODE() फ़ंक्शन के विभिन्न उपयोग मामलों की जाँच करें।

SQL Server, PostgreSQL, और MySQL में CASE WHEN का उपयोग

CASE WHEN स्टेटमेंट SQL के सशर्त लॉजिक रूपांतरण करने के लिए DECODE() फ़ंक्शन का एक विकल्प प्रदान करता है। CASE WHEN का सिंटैक्स और इम्प्लीमेंटेशन SQL Server, PostgreSQL, और MySQL डेटाबेस में सुसंगत है।

नीचे दिया गया उदाहरण दिखाता है कि SELECT स्टेटमेंट के भीतर डेटा को बदलने के लिए CASE WHEN स्टेटमेंट का उपयोग कैसे करें। क्वेरी यह भी दिखाती है कि जटिल सशर्त रूपांतरण के लिए CASE WHEN स्टेटमेंट को अन्य SQL फ़ंक्शंस के साथ कैसे संयोजित किया जाए।

 -- Select department ID
SELECT 
    department_id,
    
    -- Use CASE to transform department_id into department_name
    CASE 
        WHEN department_id = 1 THEN 'IT'
        WHEN department_id = 2 THEN 'HR'
        WHEN department_id = 3 THEN 'Finance'
        WHEN department_id = 4 THEN 'Marketing'
        WHEN department_id = 5 THEN 'Sales'
        ELSE 'Unknown' 
    END AS department_name,
    
    SUM(salary) AS total_salary,
    
    -- Calculate the average salary for each department and round to the nearest whole number
    ROUND(AVG(salary), 0) AS average_salary,
    
    -- Use CASE to categorize average salary into 'High Paying' or 'Low Paying'
    CASE 
        WHEN AVG(salary) > 65000 THEN 'High Paying'
        ELSE 'Low Paying' 
    END AS salary_category
FROM 
    employees
GROUP BY 
    department_id; -- Group results by department ID   

निष्कर्ष और आगे की सीख

Oracle के DECODE() फ़ंक्शन को समझना प्रभावी ढंग से डेटा रूपांतरित करना सीखते समय महत्वपूर्ण है। DECODE() फ़ंक्शन डेटा रूपांतरण के दौरान सशर्त लॉजिक लागू करने के विभिन्न उपयोग मामले प्रदान करता है। SQL Server, PostgreSQL, और MySQL डेटाबेस में वैकल्पिक सशर्त रूपांतरण सीखना भी महत्वपूर्ण है। मैं आपको विभिन्न डेटासेट्स और उपयोग मामलों के साथ DECODE() फ़ंक्शन का अभ्यास करने के लिए प्रोत्साहित करता हूँ ताकि आप अपने डेटा रूपांतरण कौशल को निखार सकें।

यदि आप अपने डेटा विश्लेषण कौशल को आगे बढ़ाना चाहते हैं, तो मैं DataCamp का Reporting in SQL कोर्स लेने की सलाह देता हूँ ताकि आप अपने विश्लेषण और प्रस्तुति कौशल को और विकसित कर सकें। इसी तरह, आपको हमारा Associate Data Analyst in SQL करियर ट्रैक भी देखना चाहिए ताकि आप उस आवश्यक SQL की प्रगति बनाए रख सकें जिसकी आपको एक डेटा विश्लेषक के रूप में अपने करियर में आवश्यकता होगी। अंत में, मैं DataCamp का Data-Driven Decision Making in SQL प्रोजेक्ट लेने की अत्यधिक सिफारिश करता हूँ ताकि आप विश्लेषण और रिपोर्टिंग के लिए अलग-अलग SQL तकनीकों का उपयोग करने में अपनी महारत दिखा सकें और अन्य डेटा विश्लेषकों के बीच अलग नज़र आएँ।

Allan Ouko

लेखक

Allan Ouko

डेटा एनालिटिक्स, बिज़नेस इंटेलिजेंस और डेटा साइंस में व्यावहारिक अनुभव रखने वाला डेटा साइंस तकनीकी लेखक। मैं SQL, Python, Power BI, Databricks और डेटा इंजीनियरिंग पर व्यावहारिक, उद्योग-केंद्रित सामग्री लिखता/लिखती हूँ, जो वास्तविक दुनिया की एनालिटिक्स कार्य से जुड़ी होती है। मेरी लेखनी तकनीकी गहराई और व्यावसायिक प्रभाव के बीच पुल का काम करती है, जिससे पेशेवरों को डेटा को आत्मविश्वासपूर्ण निर्णयों में बदलने में मदद मिलती है. 

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

SQL DECODE() फ़ंक्शन क्या है?

SQL DECODE() एक फ़ंक्शन है जिसका उपयोग डेटा रूपांतरण के लिए सशर्त लॉजिक लागू करने में किया जाता है।

कौन से डेटाबेस SQL DECODE() फ़ंक्शन को सपोर्ट करते हैं?

SQL DECODE() फ़ंक्शन को नैटिव रूप से केवल Oracle डेटाबेस सपोर्ट करता है। SQL Server, PostgreSQL, और MySQL CASE WHEN स्टेटमेंट का उपयोग करके सशर्त रूपांतरण की अनुमति देते हैं।

क्या मैं DECODE() को अन्य SQL फ़ंक्शंस के साथ उपयोग कर सकता/सकती हूँ?

Oracle का DECODE() फ़ंक्शन AVG(), SUM(), और COUNT() जैसे अन्य SQL फ़ंक्शंस के साथ उपयोग किया जा सकता है ताकि उन्नत सशर्त रूपांतरण किए जा सकें।

क्या मैं नेस्टेड DECODE() स्टेटमेंट्स का उपयोग कर सकता/सकती हूँ?

Oracle डेटाबेस जटिल लॉजिक के लिए नेस्टेड DECODE() स्टेटमेंट्स को सपोर्ट करते हैं। हालाँकि, लंबे नेस्टेड DECODE() स्टेटमेंट्स का रखरखाव और पढ़ना कठिन हो सकता है।

क्या DECODE() फ़ंक्शन NULL मानों को संभाल सकता है?

DECODE() फ़ंक्शन NULL मानों को डिफ़ॉल्ट रूप से हैंडल करता है और यदि रूपांतरण के दौरान शर्त पूरी नहीं होती है, तो NULL मान लौटाएगा।

DECODE() के अलावा, Oracle के लिए और कौन से फ़ंक्शंस विशिष्ट हैं?

Oracle डेटाबेस के अन्य विशिष्ट फ़ंक्शंस में NVL() शामिल है, जो NULL मानों को निर्दिष्ट मानों से बदलता है।

विषय