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

SQL में COALESCE() फ़ंक्शन का उपयोग कैसे करें (उदाहरण सहित)

जानें कि SQL COALESCE() फ़ंक्शन का उपयोग null मानों को सँभालने, कॉलम मिलाने और वास्तविक दुनिया के उदाहरणों व सुझावों के साथ अपने डेटा को साफ़ करने के लिए कैसे करें।
· 5 मि॰ पढ़ें

AI के साथ खोजें

वास्तविक-जीवन के डेटा के साथ काम करते समय, missing मान लगभग अपरिहार्य होते हैं। चाहे आप datasets साफ़ कर रहे हों या कॉलम मिला रहे हों, SQL एक सरल पर शक्तिशाली समाधान देता है: COALESCE() फ़ंक्शन। इस ट्यूटोरियल में आप देखेंगे कि COALESCE() कैसे काम करता है, इसे कब उपयोग करना चाहिए, और कुछ व्यावहारिक उदाहरणों के माध्यम से इसे कैसे लागू करें—वह भी कुछ ही पंक्तियों के SQL में।

SQL में COALESCE() क्या है?

SQL में COALESCE() फ़ंक्शन अभिव्यक्तियों की सूची से पहला non-null मान लौटाता है। यदि सभी मान null हैं, तो यह null लौटाता है। यह प्रायः missing मानों को सँभालने या एक fallback आउटपुट के रूप में कई कॉलमों को एक में संयोजित करने के लिए उपयोग किया जाता है।

आपको COALESCE() कब उपयोग करना चाहिए?

जब कई कॉलमों के मानों को एक में समेटना हो, तब यह फ़ंक्शन उपयोगी है।

उदाहरण के लिए, users नाम की एक तालिका में उपयोगकर्ताओं के work_email और personal_email के मान हैं।

COALESCE() फ़ंक्शन का उपयोग करके, हम email नाम का एक कॉलम बना सकते हैं, जो उपयोगकर्ता का work_email दिखाता है यदि वह null नहीं है। अन्यथा, यह personal_email दिखाता है।

user_id

work_email

personal_email

COALESCE() of

work_email and

personal_email

1

[email protected]

null

[email protected]

2

null

[email protected]

[email protected]

3

[email protected]

[email protected]

[email protected]

COALESCE() का सिंटैक्स

COALESCE(value_1, value_2, ...., value_n)

COALESCE() फ़ंक्शन कम-से-कम एक मान (value_1) लेता है। यह सूची में बाएँ से दाएँ चलते हुए पहला non-null मान लौटाता है।

उदाहरण के लिए, यह पहले जाँचता है कि value_1 null है या नहीं। यदि नहीं, तो यह value_1 लौटाता है। अन्यथा, यह जाँचता है कि value_2 null है या नहीं। यह प्रक्रिया सूची के अंत तक चलती है। 

COALESCE() को कॉलम, अभिव्यक्तियों, या कॉन्स्टेंट्स के साथ उपयोग किया जा सकता है।

COALESCE() के व्यावहारिक उदाहरण

इस ट्यूटोरियल का कोड ऑनलाइन चलाएं और संपादित करें

कोड चलाएं

उदाहरण 1: null को किसी स्थिर मान से बदलना

countries तालिका पर विचार करें, जिसमें देशों और उनके राष्ट्रीय दिवसों की सूची है। कुछ national day मान null हैं। COALESCE() national_day में missing मानों को स्थिर स्ट्रिंग 'Unknown' से भर देता है।

SELECT
   country_id,
   name, 
   national_day,
   COALESCE(national_day, 'Unknown') AS national_day_coalesced
FROM countries
ORDER BY country_id

परिणाम इस प्रकार हैं:

country_id

name

national_day

national_day_coalesced

1

Aruba

null

Unknown

2

Afghanistan

1919-08-19T00:00:00.000Z

1919-08-19

3

Angola

1975-11-11T00:00:00.000Z

1975-11-11

4

Anguilla

1967-05-30T00:00:00.000Z

1967-05-30

ध्यान दें कि national_day में null मान को स्थिर Unknown से बदल दिया गया है। 

उदाहरण 2: दो कॉलमों के बीच चयन करना

हमारे पास products नाम की एक तालिका है। इसमें उत्पाद का नाम और उसका विवरण है। कुछ विवरण बहुत लंबे हैं (60 वर्णों से अधिक)। ऐसे में हम विवरण को उत्पाद के नाम से बदल देते हैं।

नीचे दी गई क्वेरी CASE का उपयोग लंबे विवरणों को NULL में बदलने के लिए करती है, फिर COALESCE() का उपयोग उत्पाद नाम पर fallback करने के लिए करती है।

SELECT DISTINCT
   product_name,
   description,
   COALESCE(
      CASE WHEN 
         LENGTH(description) >= 60 
         THEN NULL 
         ELSE description 
         END, 
      product_name) product_name_or_description
FROM products

परिणाम इस प्रकार हैं:

product_name

description

product_name_or_description

G.Skill Ripjaws V Series

"Speed:DDR4-3200,Type:288-pin DIMM,CAS:14Module:4x16GBSize:64GB"

G.Skill Ripjaws V Series

G.Skill Ripjaws V Series

"Speed:DDR4-3200,Type:288-pin DIMM,CAS:15Module:4x16GBSize:64GB"

G.Skill Ripjaws V Series

Asus X99-E-10G WS

"CPU:LGA2011-3,Form Factor:SSI CEB,RAM Slots:8,Max RAM:128GB"

"CPU:LGA2011-3,Form Factor:SSI CEB,RAM Slots:8,Max RAM:128GB"

Supermicro X9SRH-7TF

"CPU:LGA2011,Form Factor:ATX,RAM Slots:8,Max RAM:64GB"

"CPU:LGA2011,Form Factor:ATX,RAM Slots:8,Max RAM:64GB"

ध्यान दें कि यदि description लंबा है तो product_name_or_description कॉलम product_name दिखाता है। अन्यथा, यह description दिखाता है।

उदाहरण 3: एकाधिक कॉलमों के साथ फॉलबैक लॉजिक

हम उदाहरण 2 को एक कदम आगे ले सकते हैं। मान लें कि वर्तमान में दो आवश्यकताएँ हैं:

  • यदि description की लंबाई 60 से कम है, तो description दिखाएँ।
  • अन्यथा, जाँचें कि product_name की लंबाई 20 से कम है या नहीं। यदि है, तो हम product_name दिखाएँगे।
  • अन्यथा, product दिखाएँ।
SELECT DISTINCT
   product_name,
   description,
   COALESCE(
      CASE 
         WHEN LENGTH(description) > 50
         THEN NULL
         ELSE description
      END,
   CASE 
      WHEN LENGTH(product_name) > 14
      THEN NULL
      ELSE product_name
   END,
'product') AS product_name_or_description
FROM products
ORDER BY product_name

परिणाम इस प्रकार हैं:

product_name

description

product_name_or_description

ADATA ASU800SS-128GT-C

Series:Ultimate SU800,Type:SSD,Capacity:128GB,Cache:N/A

product

ADATA ASU800SS-512GT-C

Series:Ultimate SU800,Type:SSD,Capacity:512GB,Cache:N/A

product

AMD 100-5056062

Chipset:Vega Frontier Edition Liquid,Memory:16GBCore Clock:1.5GHz

product

AMD 100-505989

Chipset:FirePro W9100,Memory:32GBCore Clock:930MHz

Chipset:FirePro W9100,Memory:32GBCore Clock:930MHz

ध्यान दें कि product_name_or_description कॉलम, product_name और description की लंबाइयों के आधार पर या तो product_name या description दिखाता है।

समर्थित SQL इंजन

COALESCE() SQL Server (2008 से), Azure SQL Database, Azure SQL Data Warehouse, Parallel Data Warehouse, BigQuery, और Amazon RedShift में काम करता है।

संबंधित SQL फ़ंक्शंस

अंतिम विचार

COALESCE() फ़ंक्शन null मानों को सँभालने और आपकी SQL क्वेरियों को सरल बनाने के लिए एक बहुउपयोगी टूल है। चाहे आप missing डेटा को डिफ़ॉल्ट्स से बदल रहे हों या कई कॉलमों को एक में मिला रहे हों, COALESCE() आपकी लॉजिक को साफ़ और पठनीय बनाए रखने में मदद करता है।

क्या आप अपनी SQL कौशल को और गहरा करना चाहते हैं? DataCamp पर ये शुरुआती-अनुकूल और करियर-वर्धक पाठ्यक्रम देखें:

FAQs

अगर COALESCE() में सभी मान NULL हों तो क्या होता है?

यदि COALESCE() फ़ंक्शन को दिए गए हर आर्गुमेंट का मान NULL है, तो फ़ंक्शन NULL लौटाएगा।

COALESCE() ISNULL() या IFNULL() से अलग कैसे है?
  • ISNULL() (SQL Server) और IFNULL() (MySQL, SQLite) केवल दो आर्गुमेंट स्वीकार करते हैं।
  • COALESCE() एकाधिक आर्गुमेंट स्वीकार कर सकता है और विभिन्न SQL डायलेक्ट्स में अधिक मानक है।

  • COALESCE() ANSI SQL मानक का हिस्सा है, जबकि ISNULL() और IFNULL() डेटाबेस-विशिष्ट हैं।

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

हाँ, आप COALESCE() के अंदर कॉलम नाम, लिटरल, फ़ंक्शंस, या अभिव्यक्तियाँ उपयोग कर सकते हैं।

COALESCE(LOWER(name), 'unknown')
COALESCE() का उपयोग करने पर प्रदर्शन-लागत होती है क्या?

आम तौर पर नहीं—COALESCE() कुशल है। हालाँकि, यदि आप इसे जटिल अभिव्यक्तियों या बहुत बड़ी क्वेरियों में उपयोग करते हैं, तो डेटाबेस, लिखने के तरीके पर निर्भर करते हुए, आवश्यक से अधिक अभिव्यक्तियों का मूल्यांकन कर सकता है।

क्या COALESCE() विभिन्न डेटा प्रकारों के साथ काम करता है?

हाँ, लेकिन सभी आर्गुमेंट ऐसे होने चाहिए जिन्हें एक सामान्य डेटा प्रकार में निहित रूप से बदला जा सके। अन्यथा, आपके SQL इंजन के अनुसार type conversion त्रुटि आ सकती है।

क्या मैं COALESCE() फ़ंक्शंस को nest कर सकता/सकती हूँ?

हाँ। आप इन्हें nest कर सकते हैं, यद्यपि इसकी शायद ही आवश्यकता पड़ती है क्योंकि COALESCE() पहले से ही अनेक आर्गुमेंट सँभालता है:

COALESCE(col1, COALESCE(col2, 'default'))

यह इसके समकक्ष है:

COALESCE(col1, col2, 'default')

विषय