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
परिणाम इस प्रकार हैं:
|
|
|
|
|
|
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 |
|
|
|
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
परिणाम इस प्रकार हैं:
|
|
|
|
|
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() कुशल है। हालाँकि, यदि आप इसे जटिल अभिव्यक्तियों या बहुत बड़ी क्वेरियों में उपयोग करते हैं, तो डेटाबेस, लिखने के तरीके पर निर्भर करते हुए, आवश्यक से अधिक अभिव्यक्तियों का मूल्यांकन कर सकता है।
क्या COALESCE() विभिन्न डेटा प्रकारों के साथ काम करता है?
हाँ, लेकिन सभी आर्गुमेंट ऐसे होने चाहिए जिन्हें एक सामान्य डेटा प्रकार में निहित रूप से बदला जा सके। अन्यथा, आपके SQL इंजन के अनुसार type conversion त्रुटि आ सकती है।
वास्तविक-जीवन के डेटा के साथ काम करते समय, 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_idwork_emailpersonal_emailCOALESCE()ofwork_emailandpersonal_email1
[email protected]
null
[email protected]
2
null
[email protected]
[email protected]
3
[email protected]
[email protected]
[email protected]