MySQL NULL समझाया गया: अर्थ, क्वेरीज़, फ़ंक्शन, इंडेक्सिंग, सॉर्टिंग, और सर्वोत्तम प्रथाएँ

目次

1. परिचय

MySQL एक डेटाबेस प्रबंधन प्रणाली है जो कई अनुप्रयोगों और सिस्टमों में उपयोग की जाती है। MySQL के भीतर, NULL की अवधारणा शुरुआती लोगों के लिए समझना कठिन हो सकता है। NULL क्या है और इसे कैसे संभालना है, इसे सटीक रूप से समझना MySQL के साथ काम करते समय अत्यंत महत्वपूर्ण है।

इस लेख में, हम एक व्यापक स्पष्टीकरण प्रदान करते हैं—MySQL में NULL की मूल परिभाषा से लेकर इसे कैसे हेरफेर किया जाए, इसे कैसे खोजा जाए, NULL से संबंधित उपयोगी फ़ंक्शन, और ध्यान देने योग्य महत्वपूर्ण बिंदु। हम एक FAQ अनुभाग भी शामिल करते हैं जो NULL के बारे में सामान्य प्रश्नों के उत्तर देता है।

यह लेख निम्नलिखित पाठकों के लिए है:

  • पहली बार MySQL का उपयोग करने वाले शुरुआती
  • बुनियादी SQL को समझते हैं और अधिक गहराई से सीखना चाहते हैं, मध्यवर्ती शिक्षार्थी
  • डेटाबेस डिज़ाइन और संचालन में शामिल इंजीनियर

इस लेख के अंत तक, आप सक्षम होंगे:

  • सही ढंग से समझना कि NULL क्या है
  • NULL शामिल डेटा को हेरफेर और खोजना
  • NULL‑संबंधी समस्याओं से बचने के लिए सर्वोत्तम प्रथाएँ सीखना

अब, चलिए क्रमशः NULL की बुनियादी बातों को समझते हैं।

2. NULL मूल बातें

डेटाबेस के साथ काम करते समय, NULL की अवधारणा अत्यंत महत्वपूर्ण है। हालांकि, NULL सबसे अधिक गलत समझी जाने वाली चीज़ों में से एक भी है। इस अनुभाग में, हम NULL की मूल परिभाषा और गुणों को विस्तार से समझाते हैं।

NULL की परिभाषा

NULL एक विशेष स्थिति को दर्शाता है जिसका अर्थ है “कोई मान मौजूद नहीं है” या “एक अज्ञात मान”। यह खाली स्ट्रिंग (“”) या शून्य (0) से अलग है। यहाँ अंतर दिखाने वाला एक उदाहरण है:

  • NULL : कोई मान मौजूद नहीं (एक अपरिभाषित स्थिति)
  • खाली स्ट्रिंग (“”) : एक मान मौजूद है, लेकिन उसकी सामग्री खाली है
  • शून्य (0) : एक मान मौजूद है, और वह मान 0 है

NULL के गुण

  1. तुलनाओं में NULL का व्यवहार SQL में, NULL को विशेष नियमों के साथ संभाला जाता है। उदाहरण के लिए, इन तुलनाओं के परिणाम देखें:
    SELECT NULL = NULL; -- Result: NULL
    SELECT NULL <> NULL; -- Result: NULL
    SELECT NULL IS NULL; -- Result: TRUE
    
  • सामान्य तुलना ऑपरेटर (=, <, >, आदि) के साथ NULL की तुलना करने पर परिणाम NULL आता है।
  • NULL का सही मूल्यांकन करने के लिए आपको IS NULL या IS NOT NULL का उपयोग करना चाहिए।
  1. अंकगणितीय संचालन में NULL कोई भी अंकगणितीय संचालन जिसमें NULL शामिल हो, हमेशा NULL लौटाता है। उदाहरण:
    SELECT 10 + NULL; -- Result: NULL
    SELECT NULL * 5; -- Result: NULL
    
  1. तार्किक संचालन में NULL जब किसी शर्त में NULL शामिल होता है, तो परिणाम भी NULL हो सकता है। नीचे उदाहरण देखें:
    SELECT NULL AND TRUE; -- Result: NULL
    SELECT NULL OR FALSE; -- Result: NULL
    

क्यों NULL समस्याएँ पैदा करता है

यदि आप NULL को सही ढंग से नहीं संभालते हैं, तो आपको निम्नलिखित समस्याओं का सामना करना पड़ सकता है:

  • अप्रत्याशित खोज परिणाम उदाहरण के लिए, निम्नलिखित क्वेरी उन पंक्तियों को बाहर कर देती है जहाँ age NULL है।
    SELECT * FROM users WHERE age > 20;
    

समाधान के रूप में, आपको शर्त में NULL को शामिल करना होगा:

SELECT * FROM users WHERE age > 20 OR age IS NULL;
  • गणना में त्रुटियाँ और खाली डेटा की गलत समझ समेकित फ़ंक्शन (SUM, AVG, आदि) गणना करते समय NULL को अनदेखा कर देते हैं। परिणामस्वरूप, कई NULL मानों वाले डेटासेट अनपेक्षित परिणाम दे सकते हैं।

बुनियादी NULL नियमों का सारांश

  • NULL वह स्थिति दर्शाता है जहाँ “कोई मान मौजूद नहीं है”।
  • चूँकि सामान्य तुलना ऑपरेटर NULL को सही ढंग से नहीं संभालते, IS NULL या IS NOT NULL का उपयोग करें।
  • यदि NULL को अंकगणितीय या तार्किक संचालन में शामिल किया जाता है, तो परिणाम भी NULL हो जाता है।

3. NULL को कैसे हेरफेर करें

MySQL में NULL के साथ काम करते समय, आपको इसे सही तरीके से संभालने के तरीके समझने चाहिए। इस अनुभाग में, हम INSERT, UPDATE, और DELETE में NULL को कैसे उपयोग किया जाए, इसके विशिष्ट तरीकों को विस्तार से समझाते हैं।

डेटा डालते समय NULL कैसे सेट करें

डेटाबेस में नया रिकॉर्ड डालते समय, आप किसी कॉलम को NULL सेट कर सकते हैं। नीचे कुछ ठोस उदाहरण दिए गए हैं।

  • स्पष्ट रूप से NULL निर्दिष्ट करें
    INSERT INTO users (name, age) VALUES ('Taro', NULL);
    

इस क्वेरी में, age कॉलम को कोई मान नहीं दिया गया है, और NULL डाला जाता है।

  • डिफ़ॉल्ट मान के रूप में NULL यदि NULL को डिफ़ॉल्ट मान के रूप में कॉन्फ़िगर किया गया है, तो मान को छोड़ने से स्वचालित रूप से NULL डाला जाएगा।
    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(50),
        age INT DEFAULT NULL
    );
    
    INSERT INTO users (name) VALUES ('Hanako');
    

इस उदाहरण में, क्योंकि age कॉलम के लिए कोई स्पष्ट मान प्रदान नहीं किया गया है, डिफ़ॉल्ट NULL डाला जाता है।

डेटा अपडेट करते समय NULL सेट कैसे करें

आप मौजूदा डेटा को भी अपडेट करके किसी कॉलम का मान NULL सेट कर सकते हैं। यहाँ कुछ उदाहरण हैं।

  • मान को NULL में अपडेट करें
    UPDATE users SET age = NULL WHERE name = 'Taro';
    

यह क्वेरी age कॉलम को NULL सेट करती है उस रिकॉर्ड के लिए जिसका नाम “Taro” है।

  • शर्तीय अपडेट आप विशिष्ट स्थितियों में NULL सेट करने के लिए शर्तें जोड़ सकते हैं।
    UPDATE users SET age = NULL WHERE age < 18;
    

यहाँ, age कॉलम को सभी रिकॉर्ड्स के लिए NULL सेट किया जाता है जहाँ आयु 18 से कम है।

डेटा डिलीट करते समय शर्त के रूप में NULL का उपयोग कैसे करें

जब आप NULL वाले डेटा को डिलीट कर रहे हों, तो आपको शर्त में NULL शामिल करना होगा। तुलना ऑपरेटर के बजाय IS NULL का उपयोग करें।

  • कॉलम NULL होने वाली पंक्तियों को डिलीट करें
    DELETE FROM users WHERE age IS NULL;
    

यह क्वेरी उन रिकॉर्ड्स को डिलीट करती है जहाँ age कॉलम NULL है।

  • कई शर्तों के साथ NULL पंक्तियों को डिलीट करें
    DELETE FROM users WHERE age IS NULL AND name = 'Taro';
    

इस उदाहरण में, केवल उन रिकॉर्ड्स को डिलीट किया जाता है जहाँ age NULL है और name “Taro” है।

NULL को संभालते समय महत्वपूर्ण नोट्स

  1. IS NULL का सही उपयोग करें शर्त में NULL का उपयोग करते समय हमेशा IS NULL या IS NOT NULL का उपयोग करें, = ऑपरेटर नहीं।
    SELECT * FROM users WHERE age = NULL; -- Incorrect
    SELECT * FROM users WHERE age IS NULL; -- Correct
    
  1. NULL हैंडलिंग को ध्यान में रखकर अपने एप्लिकेशन को डिज़ाइन करें एप्लिकेशन से डेटा को संभालते समय, NULL को कैसे संभालते हैं, इस पर सावधानी बरतने से अनपेक्षित व्यवहार से बचा जा सकता है।

  2. ट्रांज़ैक्शन का उपयोग करें NULL से जुड़े डेटा ऑपरेशन्स के लिए, अनपेक्षित डेटा परिवर्तन से बचने के लिए ट्रांज़ैक्शन का उपयोग करने पर विचार करें।

4. NULL शामिल डेटा की खोज

MySQL में डेटा खोजते समय, NULL को सही ढंग से संभालना अत्यंत महत्वपूर्ण है। क्योंकि NULL सामान्य मानों से अलग व्यवहार करता है, इसे विशेष देखभाल की आवश्यकता होती है। इस सेक्शन में, हम समझाते हैं कि जब NULL शामिल हो तो प्रभावी ढंग से कैसे खोजें।

NULL की खोज के बुनियादी तरीके

NULL की खोज के लिए, सामान्य तुलना ऑपरेटर (=, <, >) के बजाय IS NULL और IS NOT NULL का उपयोग करें।

  • NULL की खोज
    SELECT * FROM users WHERE age IS NULL;
    

यह क्वेरी सभी रिकॉर्ड्स को प्राप्त करती है जहाँ age कॉलम NULL है।

  • गैर-NULL मानों की खोज
    SELECT * FROM users WHERE age IS NOT NULL;
    

यह क्वेरी सभी रिकॉर्ड्स को प्राप्त करती है जहाँ age कॉलम NULL नहीं है।

जटिल शर्तों के साथ NULL की खोज

क्योंकि NULL को तुलना ऑपरेटरों से सही ढंग से नहीं संभाला जा सकता, जटिल शर्तों में इसका उपयोग करते समय सावधानी बरतें।

  • शर्त में NULL शामिल करना
    SELECT * FROM users WHERE age > 20 OR age IS NULL;
    

यह क्वेरी उन रिकॉर्ड्स को प्राप्त करती है जहाँ age 20 से अधिक है या NULL है।

  • NOT ऑपरेटर और NULL
    SELECT * FROM users WHERE NOT (age > 20 OR age IS NULL);
    

यह क्वेरी उन रिकॉर्ड्स को प्राप्त करती है जहाँ age 20 या उससे कम है और NULL नहीं है।

LIKE ऑपरेटर के साथ NULL का उपयोग

LIKE ऑपरेटर को NULL के खिलाफ उपयोग नहीं किया जा सकता। क्योंकि NULL का अर्थ है कोई मान नहीं है, निम्न क्वेरी NULL पंक्तियों को वापस नहीं करती:

SELECT * FROM users WHERE name LIKE '%a%';
-- NULL values are not matched by this condition

इसके बजाय, आपको एक NULL जांच जोड़नी होगी:

SELECT * FROM users WHERE name LIKE '%a%' OR name IS NULL;

एग्रीगेट फ़ंक्शन और NULL के साथ खोज

NULL कई एग्रीगेट फ़ंक्शनों (SUM, AVG, आदि) द्वारा अनदेखा किया जाता है। सही परिणाम पाने के लिए, आपको NULL को ध्यान में रखना होगा।

  • COUNT फ़ंक्शन
    SELECT COUNT(*) AS total_records, COUNT(age) AS non_null_ages FROM users;
    
  • COUNT(*) : सभी रिकॉर्ड गिनता है, जिसमें NULL वाले भी शामिल हैं
  • COUNT(column) : NULL को छोड़कर रिकॉर्ड गिनता है
  • अन्य एग्रीगेट फ़ंक्शन
    SELECT AVG(age) AS average_age FROM users WHERE age IS NOT NULL;
    

यह NULL मानों को छोड़कर औसत की गणना करता है।

NULL की खोज के दौरान नोट्स

  1. IS NULL और = के बीच अंतर क्योंकि NULL को सामान्य तुलना द्वारा संभाला नहीं जा सकता, हमेशा IS NULL या IS NOT NULL का उपयोग करें।
    SELECT * FROM users WHERE age = NULL; -- Incorrect
    SELECT * FROM users WHERE age IS NULL; -- Correct
    
  1. एकाधिक शर्तों का संभालना यदि NULL मौजूद हो सकता है, तो अनपेक्षित परिणामों से बचने के लिए आपको शर्त में इसे स्पष्ट रूप से शामिल करना चाहिए।
    SELECT * FROM users WHERE age > 20; -- NULL is excluded
    SELECT * FROM users WHERE age > 20 OR age IS NULL; -- Includes NULL
    
  1. प्रदर्शन प्रभाव शर्तों में NULL को शामिल करने पर कुछ मामलों में इंडेक्स उपयोग सीमित हो सकता है। हम इंडेक्स की प्रभावशीलता की जाँच करने की सलाह देते हैं।
    EXPLAIN SELECT * FROM users WHERE age IS NULL;
    

सारांश

NULL की सही खोज इच्छित परिणाम प्राप्त करने के लिए आवश्यक है। जब आप NULL शामिल डेटा की खोज कर रहे हों, तो IS NULL और IS NOT NULL का उचित उपयोग करें, और प्रदर्शन तथा इंडेक्सिंग प्रभावों पर विचार करें।

5. NULL, इंडेक्स, और प्रदर्शन

डेटाबेस प्रदर्शन को अनुकूलित करने के लिए, इंडेक्स का सही उपयोग आवश्यक है। हालांकि, NULL वाले कॉलम पर किए जाने वाले ऑपरेशन इंडेक्स की दक्षता को प्रभावित कर सकते हैं। इस अनुभाग में, हम NULL और इंडेक्स के बीच संबंध, उनके प्रदर्शन प्रभाव, और अनुकूलन रणनीतियों को समझाते हैं।

NULL शामिल करने वाले कॉलम पर इंडेक्स बनाना

MySQL में, आप उन कॉलम पर इंडेक्स बना सकते हैं जिनमें NULL हो सकता है। उदाहरण के लिए:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    age INT,
    INDEX (age)
);

इस मामले में, age कॉलम पर इंडेक्स वैध है, भले ही कॉलम में NULL मान हों।

IS NULL और IS NOT NULL के साथ इंडेक्स का उपयोग

जब आप शर्तों में NULL शामिल करके खोज करते हैं, तो क्वेरी के आधार पर इंडेक्स का उपयोग हो भी सकता है और नहीं भी।

  • जब इंडेक्स उपयोग किया जाता है
    SELECT * FROM users WHERE age IS NULL;
    

इस क्वेरी में, इंडेक्स का उपयोग किया जा सकता है, जिससे प्रभावी खोज संभव होती है।

  • जब इंडेक्स उपयोग नहीं किया जाता यदि आप नीचे दी गई जटिल शर्तों का उपयोग करते हैं, तो इंडेक्स लागू नहीं हो सकता।
    SELECT * FROM users WHERE age + 1 IS NULL;
    

इंडेक्स का उपयोग किया गया या नहीं, यह क्वेरी शर्त की संरचना पर निर्भर करता है।

NULL और संयोजन इंडेक्स

संयोजन इंडेक्स का उपयोग करते समय भी, NULL वाले कॉलम को विशेष रूप से संभाला जाता है।

  • संयोजन इंडेक्स का उदाहरण
    CREATE TABLE employees (
        id INT AUTO_INCREMENT PRIMARY KEY,
        department_id INT,
        salary INT,
        INDEX (department_id, salary)
    );
    

यदि department_id NULL है, तो संयोजन इंडेक्स (department_id, salary) का कुछ हिस्सा पूरी तरह से उपयोग नहीं हो सकता।

NULL का प्रदर्शन प्रभाव

  1. इंडेक्स की प्रभावशीलता
  • NULL शर्तों को शामिल करने वाले खोज अक्सर अभी भी इंडेक्स से लाभान्वित होते हैं। हालांकि, यदि शर्त जटिल हो जाती है, तो इंडेक्स उपयोग सीमित हो सकता है।
  1. डेटा की बड़ी मात्रा
  • यदि इंडेक्स किए गए कॉलम में कई NULL मान हैं, तो इंडेक्स का आकार बढ़ सकता है और संभावित रूप से क्वेरी प्रदर्शन घट सकता है।
  1. अत्यधिक NULL से बचने की डिज़ाइन रणनीतियाँ
  • उन कॉलम के लिए जो अक्सर NULL रखते हैं, डिफ़ॉल्ट मान निर्धारित करके NULL उपयोग को कम किया जा सकता है, जिससे कुछ मामलों में प्रदर्शन में सुधार हो सकता है।

प्रदर्शन अनुकूलन टिप्स

  • इंडेक्स उपयोग की जाँच करें यह जांचने के लिए EXPLAIN का उपयोग करें कि क्या इंडेक्स लागू हो रहा है:
    EXPLAIN SELECT * FROM users WHERE age IS NULL;
    
  • NULL को न्यूनतम करने के लिए डिज़ाइन करें अपने स्कीमा में NULL से बचने के लिए NOT NULL प्रतिबंध और डिफ़ॉल्ट मान लागू करें:
    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        age INT NOT NULL DEFAULT 0
    );
    
  • इंडेक्स को पुनः मूल्यांकन करें डेटा की मात्रा और क्वेरी पैटर्न के आधार पर, प्रदर्शन को अनुकूलित करने के लिए इंडेक्स जोड़ने या हटाने पर विचार करें।

सारांश

NULL इंडेक्स के साथ सह-अस्तित्व रख सकता है, लेकिन कुछ स्थितियों में यह प्रदर्शन को प्रभावित कर सकता है। उपयुक्त इंडेक्सिंग रणनीतियों को डिजाइन करके और NULL उपयोग के लिए स्पष्ट नीति निर्धारित करके, आप कुशल डेटाबेस संचालन प्राप्त कर सकते हैं।

6. NULL और सॉर्टिंग

MySQL में डेटा को सॉर्ट करते समय, यह समझना महत्वपूर्ण है कि NULL कैसे संभाला जाता है। चूँकि NULL सामान्य मानों से अलग व्यवहार करता है, डिफ़ॉल्ट सॉर्ट क्रम और इसे कैसे कस्टमाइज़ किया जाए, यह जानना आपको इच्छित परिणाम प्राप्त करने में मदद करता है। इस अनुभाग में, हम NULL के साथ सॉर्टिंग के बुनियादी नियम और उन्नत तकनीकों की व्याख्या करेंगे।

NULL का डिफ़ॉल्ट सॉर्ट क्रम

MySQL में, NULL को इस प्रकार संभाला जाता है:

  • आरोही (ASC) : NULL मान पहले दिखाई देते हैं।
  • अवरोही (DESC) : NULL मान अंत में दिखाई देते हैं।

उदाहरण:

SELECT * FROM users ORDER BY age ASC;
-- NULL appears first

SELECT * FROM users ORDER BY age DESC;
-- NULL appears last

स्पष्ट रूप से NULL की स्थिति नियंत्रित करना

आप डिफ़ॉल्ट सॉर्ट व्यवहार को ओवरराइड करके NULL मानों को पहले या अंत में दिखाने के लिए मजबूर कर सकते हैं।

  • NULL मानों को पहले रखें
    SELECT * FROM users ORDER BY age IS NULL DESC, age ASC;
    

इस क्वेरी में, जहाँ age NULL है ऐसी पंक्तियाँ पहले आती हैं, उसके बाद गैर-NULL पंक्तियाँ आरोही क्रम में सॉर्ट की जाती हैं।

  • NULL मानों को अंत में रखें
    SELECT * FROM users ORDER BY age IS NULL ASC, age ASC;
    

यहाँ, गैर-NULL मान पहले दिखाई देते हैं, और NULL मान अंत में रखे जाते हैं।

कई कॉलमों के साथ NULL द्वारा सॉर्टिंग

जब कई कॉलमों द्वारा सॉर्ट किया जाता है, तो आप प्रत्येक कॉलम के लिए NULL हैंडलिंग निर्दिष्ट कर सकते हैं।

  • कई शर्तों के साथ उदाहरण
    SELECT * FROM users ORDER BY department_id ASC, age IS NULL DESC, age ASC;
    

यह क्वेरी डेटा को निम्न क्रम में सॉर्ट करती है:

  1. department_id आरोही क्रम में
  2. जहाँ age NULL है ऐसी पंक्तियाँ
  3. गैर-NULL age मान आरोही क्रम में

सॉर्टिंग प्रदर्शन और NULL

जब किसी कॉलम पर सॉर्ट किया जाता है जिसमें NULL है, तो इंडेक्स का उपयोग किया गया है या नहीं, यह क्वेरी संरचना पर निर्भर करता है। यदि इंडेक्स उपयोग नहीं किया जाता, तो सॉर्टिंग में अधिक समय लग सकता है।

  • इंडेक्स उपयोग की जाँच करें
    EXPLAIN SELECT * FROM users ORDER BY age ASC;
    

EXPLAIN का उपयोग करके सत्यापित करें कि क्या इंडेक्स लागू किया गया है।

सॉर्टिंग के समय महत्वपूर्ण नोट्स

  1. कॉलम डेटा प्रकारों पर विचार करें
  • यदि NULL वाले कॉलम का डेटा प्रकार अनुचित है, तो अप्रत्याशित परिणाम हो सकते हैं। संख्यात्मक और स्ट्रिंग प्रकारों के बीच अंतर पर विशेष ध्यान दें।
  1. सॉर्टिंग शर्तों को स्पष्ट करें
  • क्वेरी परिणामों को स्पष्ट करने के लिए, जब इरादतन NULL को संभालें, तो IS NULL या IS NOT NULL का उपयोग करें।
    SELECT * FROM users WHERE age IS NULL ORDER BY age DESC;
    

सारांश

डिफ़ॉल्ट रूप से, NULL आरोही क्रम में पहले और अवरोही क्रम में अंत में दिखाई देता है। हालांकि, आप क्वेरी को कस्टमाइज़ करके NULL मानों की स्थिति को नियंत्रित कर सकते हैं। उपयुक्त शर्तें निर्दिष्ट करके, आप इच्छित सॉर्ट क्रम प्राप्त कर सकते हैं।

7. NULL को संभालने के उपयोगी फ़ंक्शन

MySQL कई सुविधाजनक फ़ंक्शन प्रदान करता है जो NULL को कुशलतापूर्वक संभालते हैं। इन फ़ंक्शनों का उपयोग करके, आप अधिक साफ़ क्वेरी लिख सकते हैं और जब NULL मान शामिल हों तो डेटा को अधिक प्रभावी ढंग से प्रोसेस कर सकते हैं। इस अनुभाग में, हम सबसे अधिक उपयोग किए जाने वाले फ़ंक्शन और उनका उपयोग कैसे करें, समझाते हैं।

COALESCE फ़ंक्शन

COALESCE निर्दिष्ट तर्कों में से पहला गैर-NULL मान लौटाता है। यह तब उपयोगी होता है जब आप NULL को डिफ़ॉल्ट मान से बदलना चाहते हैं।

  • मूल सिंटैक्स
    COALESCE(value1, value2, ..., valueN)
    
  • उदाहरण
    SELECT COALESCE(age, 0) AS adjusted_age FROM users;
    

इस क्वेरी में, यदि age NULL है, तो यह 0 लौटाता है; अन्यथा, यह age का मान लौटाता है।

  • कई तर्कों के साथ उदाहरण
    SELECT COALESCE(NULL, NULL, 'Default Value', 'Other Value') AS result;
    

परिणाम “Default Value” होगा।

IFNULL फ़ंक्शन

IFNULL एक निर्दिष्ट मान लौटाता है यदि अभिव्यक्ति NULL हो। यह COALESCE के समान है लेकिन दो तर्कों तक सीमित है।

  • मूल सिंटैक्स
    IFNULL(expression, alternate_value)
    
  • उदाहरण
    SELECT IFNULL(age, 0) AS adjusted_age FROM users;
    

यदि age NULL है, तो यह 0 लौटाता है।

  • COALESCE से अंतर
  • IFNULL केवल दो तर्क स्वीकार करता है, जबकि COALESCE कई तर्क स्वीकार कर सकता है।

NULL-सुरक्षित समानता ऑपरेटर (<=>)

<=> ऑपरेटर NULL मानों की सुरक्षित तुलना की अनुमति देता है। इस ऑपरेटर का उपयोग करके NULL मानों की सीधे तुलना संभव हो जाती है।

  • उदाहरण
    SELECT * FROM users WHERE age <=> NULL;
    

यह क्वेरी सही ढंग से उन रिकॉर्ड्स को प्राप्त करती है जहाँ age NULL है।

  • सामान्य समानता ऑपरेटर (=) से अंतर
  • = ऑपरेटर के साथ, NULL = NULL NULL लौटाता है, लेकिन <=> के साथ यह TRUE लौटाता है।

ISNULL फ़ंक्शन

ISNULL जांचता है कि कोई मान NULL है या नहीं। यद्यपि IS NULL और IS NOT NULL आमतौर पर पर्याप्त होते हैं, जब आपको फ़ंक्शन-आधारित जांच की आवश्यकता होती है तो ISNULL उपयोगी है।

  • मूल सिंटैक्स
    ISNULL(expression)
    
  • उदाहरण
    SELECT ISNULL(age) AS is_null FROM users;
    

यदि age NULL है, तो यह 1 लौटाता है; अन्यथा यह 0 लौटाता है।

NULLIF फ़ंक्शन

NULLIF दो तर्क समान होने पर NULL लौटाता है; अन्यथा यह पहला तर्क लौटाता है।

  • मूल सिंटैक्स
    NULLIF(expression1, expression2)
    
  • उदाहरण
    SELECT NULLIF(salary, 0) AS adjusted_salary FROM employees;
    

यदि salary 0 है, तो यह NULL लौटाता है; अन्यथा यह salary का मान लौटाता है।

सही NULL फ़ंक्शन कैसे चुनें

  • डिफ़ॉल्ट मान सेट करने के लिए : COALESCE या IFNULL का उपयोग करें
  • NULL को सुरक्षित रूप से तुलना करने के लिए : <=> ऑपरेटर का उपयोग करें
  • NULL की स्पष्ट जाँच करने के लिए : ISNULL या IS NULL का उपयोग करें
  • विशिष्ट परिस्थितियों में NULL लौटाने के लिए : NULLIF का उपयोग करें

सारांश

MySQL NULL को संभालने के लिए फ़ंक्शनों का एक समृद्ध सेट प्रदान करता है। उपयुक्त फ़ंक्शन चुनकर आप सरल और अधिक कुशल क्वेरी लिख सकते हैं। इन फ़ंक्शनों का उपयोग करके आप अपने एप्लिकेशन में NULL मानों को संभालने के तरीके को अनुकूलित कर सकते हैं।

8. NULL को संभालने के सर्वोत्तम अभ्यास

डेटाबेस संचालन में NULL एक महत्वपूर्ण भूमिका निभाता है, लेकिन इसकी विशिष्ट विशेषताओं के कारण यह भ्रम और समस्याएँ भी पैदा कर सकता है। NULL को सही ढंग से संभालकर आप डेटा की अखंडता बनाए रख सकते हैं और कुशल संचालन सुनिश्चित कर सकते हैं। इस भाग में हम NULL के साथ काम करने के सर्वोत्तम अभ्यासों को समझाते हैं।

डेटाबेस डिजाइन में NULL को संभालना

  1. NULL की अनुमति देने का निर्णय
  • NULL का अर्थ है “कोई मान मौजूद नहीं है,” लेकिन हर कॉलम को NULL की अनुमति नहीं देनी चाहिए।
  • उदाहरण: wp:list /wp:list

    • आवश्यक फ़ील्ड (जैसे, उपयोगकर्ता नाम, ईमेल पता) में NOT NULL प्रतिबंध होना चाहिए।
    • ऐसे फ़ील्ड जिनका वैध रूप से कोई मान नहीं हो सकता (जैसे, मध्यवर्ती स्कोर, वैकल्पिक सेटिंग्स) NULL की अनुमति दे सकते हैं।
      CREATE TABLE users (
          id INT AUTO_INCREMENT PRIMARY KEY,
          name VARCHAR(50) NOT NULL,
          email VARCHAR(100) NOT NULL,
          age INT NULL
      );
      
  1. डिफ़ॉल्ट मान सेट करना
  • NULL के उपयोग को कम करने के लिए, जहाँ संभव हो उपयुक्त डिफ़ॉल्ट मान निर्धारित करें।
    CREATE TABLE orders (
        id INT AUTO_INCREMENT PRIMARY KEY,
        status VARCHAR(20) NOT NULL DEFAULT 'pending'
    );
    

एप्लिकेशन लेयर में NULL को प्रबंधित करना

  1. इनपुट डेटा को मान्य करें
  • जब उपयोगकर्ता फ़ॉर्म के माध्यम से डेटा सबमिट करते हैं, तो सुनिश्चित करें कि आवश्यक फ़ील्ड भरे गए हैं।
  • डेटाबेस में अनपेक्षित NULL मानों के प्रवेश को रोकने के लिए सर्वर-साइड वैधता जोड़ें।
  1. NULL हैंडलिंग को मानकीकृत करें
  • एप्लिकेशन कोडबेस में पूरे NULL को संभालने में निरंतरता सुनिश्चित करें।
  • उदाहरण: NULL को डिफ़ॉल्ट मान में बदलने के लिए एक हेल्पर फ़ंक्शन प्रदान करें।
    def handle_null(value, default):
        return value if value is not None else default
    

क्वेरी लिखते समय महत्वपूर्ण विचार

  1. सुरक्षित NULL तुलना
  • NULL की तुलना करते समय हमेशा IS NULL या IS NOT NULL का उपयोग करें।
    SELECT * FROM users WHERE age IS NULL;
    
  1. जटिल शर्तों में NULL को संभालना
  • कई शर्तों वाली क्वेरी लिखते समय, स्पष्ट रूप से NULL का ध्यान रखें।
    SELECT * FROM users WHERE age > 20 OR age IS NULL;
    
  1. एग्रीगेट परिणामों में NULL पर विचार करना
  • एग्रीगेट फंक्शन्स (SUM, AVG, आदि) NULL मानों को अनदेखा करते हैं। यदि आपको यह जांचना है कि कितने NULL मान मौजूद हैं, तो स्पष्ट शर्तें जोड़ें।
    SELECT COUNT(*) AS total_records, COUNT(age) AS non_null_records FROM users;
    

प्रदर्शन और पठनीयता में सुधार

  1. इंडेक्स और NULL
  • यदि आप उन कॉलम्स पर इंडेक्स का उपयोग कर रहे हैं जिनमें कई NULL मान हैं, तो इंडेक्स की दक्षता की जांच करें।
  • आवश्यक होने पर इंडेक्स को पुनर्निर्मित या समायोजित करें।
  1. NULL को न्यूनतम करना
  • डिज़ाइन चरण के दौरान अनावश्यक NULL उपयोग को कम करना डेटाबेस की पठनीयता और प्रदर्शन को सुधारता है।
  • NULL पर अत्यधिक निर्भरता के बजाय डिफ़ॉल्ट मान या फ्लैग्स का उपयोग करें।
    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        age INT NOT NULL DEFAULT 0
    );
    

सामान्य वास्तविक दुनिया की समस्याएं और समाधान

  1. समस्या: NULL के कारण अप्रत्याशित खोज परिणाम
  • समाधान: क्वेरी में IS NULL या IS NOT NULL का सही उपयोग करें।
    SELECT * FROM users WHERE name = 'Taro' OR name IS NULL;
    
  1. समस्या: एग्रीगेट फंक्शन्स में अप्रत्याशित व्यवहार
  • समाधान: NULL को बाहर करने या स्पष्ट रूप से संभालने के लिए शर्तें जोड़ें।
    SELECT COUNT(age) FROM users WHERE age IS NOT NULL;
    
  1. समस्या: NULL और डेटा अखंडता
  • समाधान: डेटाबेस स्तर पर NOT NULL प्रतिबंध लागू करें और एप्लिकेशन स्तर पर इनपुट को सत्यापित करें।

सारांश

NULL एक शक्तिशाली अवधारणा है, लेकिन यदि इसे ठीक से संभाला न जाए, तो यह समस्याओं का कारण बन सकता है। डेटाबेस डिज़ाइन के दौरान एक स्पष्ट नीति परिभाषित करके और अपने एप्लिकेशन में सुसंगत संभाल बनाए रखकर, आप NULL-संबंधित मुद्दों को न्यूनतम कर सकते हैं।

9. अक्सर पूछे जाने वाले प्रश्न (FAQ)

MySQL में NULL के बारे में सीखते समय, शुरुआती और मध्यवर्ती उपयोगकर्ता अक्सर समान प्रश्न पूछते हैं। इस खंड में, हम NULL के संबंध में अक्सर पूछे जाने वाले प्रश्नों और उनके उत्तरों का सारांश प्रस्तुत करते हैं।

Q1: NULL, खाली स्ट्रिंग (“”) और शून्य (0) के बीच क्या अंतर है?

  • A1:
  • NULL: यह दर्शाता है कि कोई मान मौजूद नहीं है (अपरिभाषित)।
  • खाली स्ट्रिंग (“”): एक मान मौजूद है, लेकिन इसकी सामग्री खाली है।
  • शून्य (0): एक मान मौजूद है, और इसका संख्यात्मक मान 0 है।
  • उदाहरण: INSERT INTO users (name, age) VALUES ('Taro', NULL); -- age is NULL INSERT INTO users (name, age) VALUES ('Hanako', ''); -- age is an empty string INSERT INTO users (name, age) VALUES ('Jiro', 0); -- age is zero

Q2: NULL = NULL क्यों TRUE नहीं लौटाता?

  • A2:
  • SQL विनिर्देशों के अनुसार, NULL एक “अज्ञात मान” का प्रतिनिधित्व करता है। अज्ञात मानों की तुलना परिणाम अस्पष्ट (NULL) देती है, न कि TRUE या FALSE।
  • NULL की तुलना करते समय, आपको IS NULL या IS NOT NULL का उपयोग करना चाहिए।
  • उदाहरण: SELECT NULL = NULL; -- Result: NULL SELECT NULL IS NULL; -- Result: TRUE

Q3: NULL शामिल डेटा खोजते समय मुझे किन बातों का ध्यान रखना चाहिए?

  • A3:
  • यदि आप NULL के साथ तुलना ऑपरेटर्स (=, <, >, आदि) का उपयोग करते हैं, तो आपको अपेक्षित परिणाम नहीं मिलेंगे। इसके बजाय IS NULL या IS NOT NULL का उपयोग करें।
  • उदाहरण: SELECT * FROM users WHERE age = NULL; -- Incorrect SELECT * FROM users WHERE age IS NULL; -- Correct

Q4: NULL और इंडेक्स के संबंध में कोई विचारणीय बातें हैं?

  • A4:
  • आप NULL वाले कॉलम्स पर इंडेक्स बना सकते हैं, लेकिन इंडेक्स की दक्षता क्वेरी शर्तों पर निर्भर करती है।
  • विशेष रूप से, जटिल शर्तें (जैसे कि गणनाओं सहित) इंडेक्स उपयोग को रोक सकती हैं।
  • इंडेक्स उपयोग की जांच कैसे करें: EXPLAIN SELECT * FROM users WHERE age IS NULL;

Q5: COALESCE और IFNULL के बीच क्या अंतर है?

  • A5:
  • COALESCE : कई तर्क स्वीकार करता है और पहला गैर‑NULL मान लौटाता है।
  • IFNULL : दो तर्क स्वीकार करता है और यदि पहला NULL है तो दूसरा लौटाता है।
  • Example: SELECT COALESCE(NULL, NULL, 'Default Value', 'Other Value'); -- Result: 'Default Value' SELECT IFNULL(NULL, 'Default'); -- Result: 'Default'

Q6: मैं अपने डेटाबेस को NULL से बचाने के लिए कैसे डिज़ाइन कर सकता हूँ?

  • A6:
  • NOT NULL constraints : आवश्यक फ़ील्ड पर बाधाएँ जोड़ें ताकि NULL न आए।
  • Default values : जहाँ उपयुक्त हो, NULL के बजाय डिफ़ॉल्ट मान उपयोग करें।
  • Example: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, age INT NOT NULL DEFAULT 0 );

Q7: क्या एग्रीगेट फ़ंक्शन NULL के साथ अलग व्यवहार करते हैं?

  • A7:
  • एग्रीगेट फ़ंक्शन (SUM, AVG, COUNT आदि) NULL मानों को अनदेखा करते हैं। हालांकि, यदि आप यह जानना चाहते हैं कि कितने NULL मान मौजूद हैं, तो आपको स्पष्ट शर्तें जोड़नी होंगी।
  • Example: SELECT COUNT(*) AS total_records, COUNT(age) AS non_null_ages FROM users;

Q8: क्या NULL JOIN ऑपरेशनों में समस्याएँ पैदा कर सकता है?

  • A8:
  • जब आप उन कॉलमों पर JOIN ऑपरेशन करते हैं जिनमें NULL होता है, तो NULL मानों को असंगत माना जाता है। परिणामस्वरूप, आपको अपेक्षित परिणाम नहीं मिल सकते।
  • Solution: ऐसे क्वेरी लिखें जो स्पष्ट रूप से NULL को ध्यान में रखें या COALESCE फ़ंक्शन का उपयोग करके NULL को डिफ़ॉल्ट मान से बदलें।
    SELECT *
    FROM table1 t1
    LEFT JOIN table2 t2 ON COALESCE(t1.key, 0) = COALESCE(t2.key, 0);
    

Summary

NULL एक ऐसा मान है जिसे MySQL डेटाबेस ऑपरेशनों में विशेष रूप से संभालने की आवश्यकता होती है। इस FAQ अनुभाग का उपयोग NULL को गहराई से समझने और प्रभावी रूप से संभालने के लिए संदर्भ के रूप में करें।

10. Conclusion

MySQL में NULL को संभालना डेटाबेस डिज़ाइन और संचालन में एक आवश्यक कौशल है। इस लेख में हमने NULL की मूल परिभाषा से लेकर हेरफेर विधियों, खोज, सॉर्टिंग, इंडेक्सिंग, उपयोगी फ़ंक्शन और सर्वोत्तम प्रथाओं तक सब कुछ कवर किया है।

Key Takeaways

  1. NULL basics and characteristics
  • NULL का अर्थ “कोई मान मौजूद नहीं” या “अज्ञात मान” है, और यह खाली स्ट्रिंग (“”) या शून्य (0) से अलग है।
  • NULL से संबंधित सुरक्षित तुलना के लिए IS NULL और IS NOT NULL का उपयोग करें।
  1. Working with and searching NULL data
  • आपने सीखा कि NULL वाले डेटा को सही तरीके से कैसे Insert, Update, Delete और Search किया जाता है।
  • IS NULL और COALESCE जैसे सिंटैक्स और फ़ंक्शन का उपयोग करके लचीले और कुशल ऑपरेशन किए जा सकते हैं।
  1. NULL and performance
  • हमने चर्चा की कि NULL वाले कॉलम पर इंडेक्स का क्या प्रभाव पड़ता है और प्रदर्शन को अनुकूलित करने की डिज़ाइन रणनीतियाँ क्या हैं।
  • जहाँ उपयुक्त हो, डिफ़ॉल्ट मान सेट करने से अत्यधिक NULL उपयोग को कम करने में मदद मिलती है।
  1. Convenient NULL functions
  • COALESCE, IFNULL, और NULLIF जैसे फ़ंक्शन सामान्य NULL‑संबंधी समस्याओं को हल करने में मदद करते हैं।
  • अनपेक्षित व्यवहार से बचने के लिए सुरक्षित तुलना हेतु <=> ऑपरेटर का उपयोग करें।
  1. Best practices
  • डेटाबेस डिज़ाइन में अनावश्यक NULL उपयोग को न्यूनतम रखें और एप्लिकेशन लेयर में उचित वैधता लागू करके डेटा अखंडता बनाए रखें।
  • SQL क्वेरी में NULL हैंडलिंग को मानकीकृत करने से कोड की पठनीयता और रखरखाव में सुधार होता है।

Benefits of Understanding NULL

  • Efficient data operations : NULL को सही ढंग से संभालने से अनावश्यक त्रुटियों से बचा जा सकता है और क्वेरी लेखन अधिक प्रभावी बनता है।
  • Improved data integrity : डेटाबेस डिज़ाइन के दौरान NULL उपयोग के लिए स्पष्ट नीति निर्धारित करने से डेटा प्रबंधन अधिक सुसंगत बनता है।
  • Increased application reliability : एप्लिकेशन लेयर में NULL को उचित रूप से संभालने से अप्रत्याशित व्यवहार और बग्स से बचा जा सकता है।

Next Steps

NULL को गहराई से समझने के लिए निम्नलिखित कदम उठाएँ:

  • अपने वर्तमान प्रोजेक्ट्स में NULL के उपयोग की समीक्षा करें और सुधार के क्षेत्रों की पहचान करें।
  • वास्तविक डेटा सेट पर IS NULL, COALESCE और IFNULL जैसे फ़ंक्शन और ऑपरेटर के साथ प्रयोग करें।
  • अपने वर्कलोड के आधार पर इंडेक्स और प्रदर्शन रणनीतियों को और अधिक ट्यून करें।

इस लेख का अध्ययन करके, आपको अब MySQL में NULL कैसे काम करता है और इसे व्यावहारिक रूप से कैसे संभालना है, की ठोस समझ हो जानी चाहिए। इस ज्ञान का उपयोग करके अपने डेटाबेस संचालन और एप्लिकेशन विकास कार्यप्रवाह को सुधारें।