MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

SQL COALESCE () समझाया गया

अधिकांश प्रमुख RDBMS COALESCE() . का समर्थन करते हैं ऑपरेटर, जो अपने तर्कों की सूची से पहला गैर-शून्य मान देता है।

COALESCE() एक SQL-मानक विशेषता है (यह ISO/IEC 9075 विनिर्देश में शामिल है)।

सिंटैक्स

वाक्य रचना इस प्रकार है:

COALESCE (V1, V2, ..., Vn)

इसलिए, कम से कम एक तर्क की आवश्यकता है, लेकिन कई तर्क दिए जा सकते हैं (और आमतौर पर हैं)।

COALESCE() एक n . माना जाता है -एडिक ऑपरेटर। दूसरे शब्दों में, यह एक ऑपरेटर है जिसमें ऑपरेंड की एक चर संख्या होती है (यानी n ऑपरेंड)।

उदाहरण

प्रदर्शित करने के लिए यहां एक सरल उदाहरण दिया गया है:

SELECT COALESCE(null, 'Papaya', 'Salad');

परिणाम:

Papaya

ऐसे में Papaya पहला गैर-शून्य मान था, और इसलिए COALESCE() वह मान लौटा दिया।

Salad एक गैर-शून्य मान भी था, लेकिन यह Papaya . के बाद आया और इसलिए इसे वापस नहीं किया गया।

COALESCE() बनाम CASE

COALESCE() आमतौर पर CASE . के लिए एक वाक्यात्मक शॉर्टकट माना जाता है अभिव्यक्ति।

इस प्रकार, निम्नलिखित कथन:

COALESCE (V1, V2) 

के बराबर है:

CASE WHEN V1 IS NOT NULL THEN V1 ELSE V2 END

और निम्नलिखित कथन:

COALESCE (V1, V2, ..., Vn)

(एन 3 के लिए) के बराबर है:

CASE WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE (V2, ..., Vn) END

जब सभी मान शून्य हों

यदि सभी मान null हैं , COALESCE() रिटर्न null :

SELECT COALESCE( null, null );

परिणाम:

null

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

SQL सर्वर में, यदि सभी तर्क null हैं , तो कम से कम एक शून्य मान टाइप किया हुआ null . होना चाहिए . इसलिए, उपरोक्त उदाहरण वास्तव में एक त्रुटि का परिणाम है (क्योंकि सभी शून्य तर्क null हैं स्थिरांक)।

अभिव्यक्ति

COALESCE() पहले एक्सप्रेशन का वर्तमान मान लौटाता है जो प्रारंभ में null . पर मूल्यांकन नहीं करता है . इसलिए, अगर हम इस तरह से एक व्यंजक पास करते हैं:

SELECT COALESCE( null, 3 * 5 );

हमें यह मिलता है:

15

डेटाबेस उदाहरण

मान लीजिए कि हम निम्नलिखित क्वेरी चलाते हैं:

SELECT
  name,
  salary
FROM employee;

और हमें निम्नलिखित परिणाम मिलते हैं:

 name  | salary 
-------+--------
 Elise | 100000
 Rohit |  50000
 Homer |   null

हम देख सकते हैं कि DOB . में अंतिम पंक्ति का शून्य मान है कॉलम।

यदि हम शून्य मान को किसी अन्य मान से बदलना चाहते हैं, तो हम COALESCE() . का उपयोग कर सकते हैं इस प्रकार है:

SELECT
  name,
  COALESCE(salary, 0) AS salary
FROM employee;

परिणाम:

 name  | salary 
-------+--------
 Elise | 100000
 Rohit |  50000
 Homer |      0

इस मामले में हमने सभी शून्य मानों को पूर्णांक 0 . से बदल दिया है ।

आरडीबीएमएस के बीच अंतर

सामान्य तौर पर, COALESCE() आरडीबीएमएस में काफी समान काम करता है।

लेकिन कुछ अंतर हैं।

डेटा प्रकार

हम MySQL, MariaDB और SQLite में निम्न कार्य कर सकते हैं:

SELECT
  name,
  COALESCE(salary, 'None') AS salary
FROM employee;

परिणाम:

name	salary
-----   ------
Elise	100000
Rohit	50000
Homer	None

ऐसे में जब भी salary कॉलम में एक शून्य मान होता है, आउटपुट None है ।

लेकिन वह क्वेरी SQL सर्वर, PostgreSQL, या Oracle डेटाबेस में समस्याएँ पैदा कर सकती है।

जब मैं SQL सर्वर, PostgreSQL, और Oracle डेटाबेस में उस क्वेरी को चलाता हूं, तो मुझे गलत डेटा प्रकार के विकल्प मान के कारण त्रुटि मिलती है।

जब मैं उपरोक्त क्वेरी चलाता हूं तो SQL सर्वर क्या लौटाता है:

Msg 245, Level 16, State 1, Line 15
Conversion failed when converting the varchar value 'None' to data type int.

यहां बताया गया है कि PostgreSQL क्या लौटाता है:

ERROR:  invalid input syntax for type integer: "None"
LINE 3:   COALESCE(salary, 'None') AS salary
                           ^

और यहाँ Oracle डेटाबेस क्या लौटाता है:

ORA-00932: inconsistent datatypes: expected NUMBER got CHAR

लेकिन अगर मैं संख्यात्मक मान का उपयोग करता हूं, तो मुझे त्रुटि नहीं मिलती:

SELECT
  name,
  COALESCE(salary, 0) AS salary
FROM employee;

परिणाम:

 name  | salary 
-------+--------
 Elise | 100000
 Rohit |  50000
 Homer |      0

तो यह अंतिम उदाहरण उपरोक्त सभी छह RDBMS में काम करता है।

अशक्त तर्क

RDBMS कैसे प्रोसेस करते हैं COALESCE() . के बीच एक और अंतर यह है कि वे अशक्त तर्कों से कैसे निपटते हैं।

जैसा कि उल्लेख किया गया है, SQL सर्वर में, यदि सभी तर्क null हैं , तो कम से कम एक शून्य मान टाइप किया हुआ होना चाहिए null . दूसरे शब्दों में, यदि COALESCE() . के सभी तर्क शून्य स्थिरांक हैं, तो हमें एक त्रुटि मिलती है। यह अन्य RDBMS के मामले में नहीं है, जहां सभी तर्क शून्य स्थिरांक हो सकते हैं, और आउटपुट null होगा त्रुटि के बजाय।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. वे मान खोजें जिनमें SQL में संख्याएँ नहीं हैं

  2. $nin के साथ $expr

  3. MongoDB में CSV को संग्रह कैसे निर्यात करें?

  4. MongoDB से विश्वसनीय रूप से पुनः कनेक्ट करें

  5. एक बड़े वितरित सिस्टम में ObjectId बनाम UUID की टक्कर की संभावना