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

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

अधिकांश प्रमुख RDBMS NULLIF() . का समर्थन करते हैं ऑपरेटर, जो NULL returns लौटाता है यदि इसके दोनों तर्क समकक्ष हैं। यदि तर्क समकक्ष नहीं हैं, NULLIF() पहला तर्क देता है।

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

सिंटैक्स

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

NULLIF (V1, V2)

यह निम्न CASE के बराबर है अभिव्यक्ति:

CASE WHEN V1=V2 THEN NULL ELSE V1 END

उदाहरण

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

SELECT NULLIF( 12, 12 );

परिणाम:

NULL

इस मामले में, दोनों तर्क समान हैं और इसलिए परिणाम NULL . है ।

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

जब तर्क समतुल्य न हों

यहां बताया गया है कि जब तर्क समकक्ष नहीं होते हैं तो क्या होता है:

SELECT NULLIF( 12, 13 );

परिणाम:

12

तर्क अलग हैं और इसलिए पहला तर्क दिया जाता है।

स्ट्रिंग्स

यहां एक उदाहरण दिया गया है जो स्ट्रिंग की तुलना करता है:

SELECT 
    NULLIF( 'Gym', 'Gym' ) AS "Same",
    NULLIF( 'Gym', 'Bag' ) AS "Different";

परिणाम:

+------+-----------+
| Same | Different |
+------+-----------+
| NULL | Gym       |
+------+-----------+

तिथियां

यहां एक उदाहरण दिया गया है जो तिथियों की तुलना करता है:

SELECT 
    NULLIF( DATE '2045-11-25', DATE '2045-11-25' ) AS "Same",
    NULLIF( DATE '2045-11-25', DATE '1990-08-15' ) AS "Different";

परिणाम:

+------+------------+
| Same | Different  |
+------+------------+
| NULL | 2045-11-25 |
+------+------------+

अभिव्यक्ति

NULLIF() भावों के वर्तमान मूल्य का मूल्यांकन करता है। इसलिए, अगर हम इस तरह से एक व्यंजक पास करते हैं:

SELECT NULLIF( 24, 2 * 12 );

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

NULL

2 को 12 से गुणा करने पर 24 है, और इसलिए दोनों तर्क बराबर हैं।

यदि हम दूसरा तर्क बदलते हैं तो यहां क्या होता है:

SELECT NULLIF( 24, 3 * 12 );

परिणाम:

24

पहला तर्क वापस कर दिया गया है।

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

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

SELECT 
    Name,
    LocalName
FROM country 
WHERE Region = 'South America'
ORDER BY Name;

परिणाम:

+------------------+-------------------+
| Name             | LocalName         |
+------------------+-------------------+
| Argentina        | Argentina         |
| Bolivia          | Bolivia           |
| Brazil           | Brasil            |
| Chile            | Chile             |
| Colombia         | Colombia          |
| Ecuador          | Ecuador           |
| Falkland Islands | Falkland Islands  |
| French Guiana    | Guyane française  |
| Guyana           | Guyana            |
| Paraguay         | Paraguay          |
| Peru             | Perú/Piruw        |
| Suriname         | Suriname          |
| Uruguay          | Uruguay           |
| Venezuela        | Venezuela         |
+------------------+-------------------+

यहां, हमारे पास बाएं कॉलम में देश के नाम हैं, और संबंधित देश के लिए स्थानीय नाम दाईं ओर है।

आइए जोड़ें NULLIF() हमारी क्वेरी के तीसरे कॉलम में:

SELECT
    Name,
    LocalName,
    NULLIF(LocalName, Name) AS "Local Name if Different"
FROM country 
WHERE Region = 'South America'
ORDER BY Name;

परिणाम:

+------------------+-------------------+-------------------------+
| Name             | LocalName         | Local Name if Different |
+------------------+-------------------+-------------------------+
| Argentina        | Argentina         | NULL                    |
| Bolivia          | Bolivia           | NULL                    |
| Brazil           | Brasil            | Brasil                  |
| Chile            | Chile             | NULL                    |
| Colombia         | Colombia          | NULL                    |
| Ecuador          | Ecuador           | NULL                    |
| Falkland Islands | Falkland Islands  | NULL                    |
| French Guiana    | Guyane française  | Guyane française        |
| Guyana           | Guyana            | NULL                    |
| Paraguay         | Paraguay          | NULL                    |
| Peru             | Perú/Piruw        | Perú/Piruw              |
| Suriname         | Suriname          | NULL                    |
| Uruguay          | Uruguay           | NULL                    |
| Venezuela        | Venezuela         | NULL                    |
+------------------+-------------------+-------------------------+

हम देख सकते हैं कि तीसरा कॉलम स्थानीय नाम तभी लौटाता है, जब वह Name के मान से अलग हो कॉलम। अगर ऐसा ही है, तो NULL लौटा दिया गया है।

हम NULLIF() . का भी उपयोग कर सकते हैं हमारे क्वेरी परिणामों को फ़िल्टर करने के लिए:

SELECT 
    Name,
    LocalName
FROM country 
WHERE Region = 'South America'
AND NULLIF(LocalName, Name) IS NOT NULL
ORDER BY Name;

परिणाम:

+---------------+-------------------+
| Name          | LocalName         |
+---------------+-------------------+
| Brazil        | Brasil            |
| French Guiana | Guyane française  |
| Peru          | Perú/Piruw        |
+---------------+-------------------+

इस मामले में, हमने केवल उन पंक्तियों को लौटाया है जहां स्थानीय नाम Name . से भिन्न है कॉलम।

NULLIF() बनाम CASE

जैसा कि बताया गया है, निम्नलिखित कोड:

NULLIF (V1, V2)

निम्नलिखित CASE के बराबर है अभिव्यक्ति:

CASE WHEN V1=V2 THEN NULL ELSE V1 END

इसलिए CASE . का उपयोग करना संभव है NULLIF() . के बजाय एक्सप्रेशन यदि ऐसा वांछित है। NULLIF() फ़ंक्शन मूल रूप से CASE . के लिए एक वाक्य रचनात्मक शॉर्टकट है अभिव्यक्ति।

इसलिए उदाहरण के लिए, हम पिछले उदाहरण को निम्नलिखित से बदल सकते हैं:

SELECT 
    Name,
    LocalName
FROM country 
WHERE Region = 'South America'
AND (CASE WHEN LocalName = Name THEN NULL ELSE LocalName END) IS NOT NULL
ORDER BY Name;

परिणाम:

+---------------+-------------------+
| Name          | LocalName         |
+---------------+-------------------+
| Brazil        | Brasil            |
| French Guiana | Guyane française  |
| Peru          | Perú/Piruw        |
+---------------+-------------------+

हालांकि, NULLIF() फ़ंक्शन बहुत अधिक संक्षिप्त है।

गलत पैरामीटर गणना

तर्कों की गलत संख्या पास करने से त्रुटि होती है:

SELECT NULLIF( 'One' );

MySQL में परिणाम:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'NULLIF'

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगोडीबी इंडेक्स/रैम संबंध

  2. MongoDB के साथ उत्पादन में कैसे जाएं - शीर्ष दस युक्तियाँ

  3. स्प्रिंग डेटा MongoDB - एनोटेशन @CreatedDate कस्टम आईडी फ़ील्ड के साथ उपयोग करते समय काम नहीं करता है

  4. एसएएसएल प्रमाणीकरण चरण पर सर्वर ने त्रुटि लौटा दी:प्रमाणीकरण विफल रहा

  5. स्प्रिंग डेटा के MongoTemplate और MongoRepository में क्या अंतर है?