Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में NULLs से निपटना

न्यूल क्या है? NULL या NULL मार्कर वह तरीका है जिससे हम SQL में किसी अज्ञात मान का प्रतिनिधित्व करते हैं, SQL द्वारा मैं मानक संरचित क्वेरी भाषा की बात कर रहा हूँ, MS SQL सर्वर की नहीं। अंतिम वाक्य हमें 1969 में थोड़ा पीछे ले जाता है जब मानक को पहली बार डॉ. ई.एफ. कोड द्वारा परिभाषित किया गया था। NULL आवश्यक हो जाता है क्योंकि हमें तीन-मूल्यवान विधेय तर्क के संदर्भ में सोचने की आवश्यकता होती है। एक विधेय एक अभिव्यक्ति की संपत्ति है जो या तो धारण करती है या नहीं रखती है। अंकित मूल्य पर, कोई दो संभावनाओं के बारे में सोचेगा:TRUE या FALSE। हालांकि, एक तीसरी संभावना है:अज्ञात।

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

  1. व्यवसाय स्वामी के पास एक टिन है और वह अद्यतित है।
  2. व्यवसाय स्वामी के पास टिन नहीं है और (जाहिर है) अप टू डेट नहीं है।

उपरोक्त वर्णन करता है कि डॉ। कोडड ने चार-मूल्यवान विधेय तर्क को क्या कहा है। हालाँकि, SQL मानक इन दो अतिरिक्त शर्तों को अज्ञात यानी NULL के रूप में परिभाषित करके सरल करता है। हम व्यवसाय के स्वामी का टिन नहीं जानते हैं और प्रभावित व्यवसाय स्वामी की विशेषता से कोई अन्य मूल्य निर्धारित नहीं कर सकते हैं। तो, NULL UNKNOWN है और मानक तीन-मूल्यवान विधेय तर्क में तीसरा मान है।

NULL विशेष है

NULL की परिभाषा को वास्तविक मूल्यों से भिन्न तरीके से मार्कर के उपचार की आवश्यकता होती है। निम्नलिखित उदाहरण हैं:

  1. फ़िल्टर "WHERE =NULL;" जैसी कोई चीज़ नहीं होती है। सही व्यंजक "WHERE IS NULL;" होगा। वही विपरीत अभिव्यक्ति के लिए जाता है।
  2. एसक्यूएल को आरोही क्रम में छांटते समय आप एनयूएलएल को पहले या आखिरी सूची में रखना चुन सकते हैं। डिफ़ॉल्ट पहले NULLs को सूचीबद्ध करना है।
  3. आप NULL मानों की तुलना नहीं कर सकते। यह स्पष्ट होना चाहिए क्योंकि हमने कहा है कि NULL UNKNOWN है।
  4. जब एक संयोजन प्रयास में एक NULL कॉलम शामिल होता है, तो परिणाम NULL होता है।

सामान्य NULL-संबंधित कार्य

SQL सर्वर में तीन सामान्य NULL संबंधित कार्य निम्नलिखित हैं

ISNULL

ISNULL - NULL को एक निर्दिष्ट प्रतिस्थापन मान से बदल देता है। सूची 1 और चित्र 1 ISNULL के सरल उदाहरण दिखाते हैं।

-- Listing 1: Simple Example of ISSNULL
SELECT ISNULL (NULL, 3) NULLREPLACEMENT;
SELECT ISNULL (NULL,'GREEN') NULLREPLACEMENT;
SELECT ISNULL (NULL,'2018-12-25') NULLREPLACEMENT;

चित्र 1:ISNULL का सरल उदाहरण

नलिफ़

NULLIF रिटर्न NULL दो तर्कों का मान बराबर है।

-- Listing 2: Simple Example of NULLIF
SELECT NULLIF(3,3) AS NULLIFF;
SELECT NULLIF(3,5) AS NULLIFF;
SELECT NULLIF('RED','RED') AS NULLIFF;
SELECT NULLIF('GREEN','RED') AS NULLIFF;

चित्र 2:NULLIF का सरल उदाहरण

COALESCE

COALESCE प्रदान की गई सूची से पहला गैर-शून्य मान देता है। लिस्टिंग 1 इसके उदाहरण दिखाता है और चित्र 1 प्रश्नों का आउटपुट दिखाता है।

-- Listing 3: Simple Example of COALESCE
SELECT COALESCE (NULL,'','GREEN','','') AS NULLRESPONSE;
SELECT COALESCE (NULL,'GREEN','HOPE','') AS NULLRESPONSE;
SELECT COALESCE (1,'','GREEN','','') AS NULLRESPONSE;

चित्र 3:कोलेस का सरल उदाहरण

ध्यान दें कि ये सरल उदाहरण NULL की प्रकृति का उपयोग करने का खुलासा करते हैं। शून्य और रिक्त स्थान समान नहीं है। पहले कथन में, COALESCE एक रिक्त स्थान देता है जो हमें दिखाता है कि एक रिक्त स्थान सूची में पहला गैर-शून्य मान है।

ISNULL और COALESCE के बीच अंतर

ISNULL और COALESCE के बीच अंतर कई ऑनलाइन लेखों के साथ-साथ संदर्भ अनुभाग में सूचीबद्ध पुस्तकों का विषय रहा है। इन अंतरों को संक्षेप में निम्नानुसार किया गया है:

  1. ISNULL SQL सर्वर का स्वामित्व है जबकि COALESCE एक ANSI मानक फ़ंक्शन है। इसका मतलब है कि पोर्टेबिलिटी के लिए, COALESCE को प्राथमिकता दी जाती है।
  2. ISNULL केवल दो तर्क लेता है जबकि COALESCE दो से अधिक तर्क ले सकता है।
  3. ISNULL द्वारा लौटाए गए मान का डेटा प्रकार पहले तर्क के डेटा प्रकार द्वारा निर्धारित किया जाता है, जबकि COALESCE द्वारा लौटाए गए मान का डेटा प्रकार उच्चतम प्राथमिकता के साथ सूची में डेटा प्रकार द्वारा निर्धारित किया जाता है।
  4. जब सबक्वेरी के साथ दोनों फ़ंक्शन का उपयोग किया जाता है, तो ISNULL बेहतर प्रदर्शन करता है क्योंकि COALESCE का आंतरिक रूप से CASE एक्सप्रेशन में अनुवाद किया जाता है, जिससे यह स्कैन को दोहराता है।

इट्ज़िक बेन-गण ने अपने लेख में COALESCE को केस एक्सप्रेशन में बदलने के अन्य निहितार्थों की भी पड़ताल की, जिसका लिंक इस लेख के अंत में दिया गया है।

नमूना उपयोग के मामले

हम लिस्टिंग 4 में बनाई जा रही तालिका से कुछ मानदंडों के आधार पर ग्राहकों की सूची एक वेब पोर्टल पर प्रदर्शित करना चाहते हैं। कार्य 1 और 2 संभावित आवश्यकताओं को देते हैं और हम आवश्यकताओं को पूरा करने के लिए ISNULL और COALESCE का उपयोग करते हैं।

--Listing 4: Table Creation Script
CREATE TABLE CUSTOMER 
(ID INT IDENTITY (1,1)
,FIRSTNAME VARCHAR(50)
,LASTNAME VARCHAR(50)
,SEX CHAR(1)
,ADDRESS VARCHAR(300)
,FIRSTTRANDATE DATETIME
,PHONENUMBER1 BIGINT
,PHONENUMBER2 BIGINT
,PHONENUMBER3 BIGINT);
GO

INSERT INTO CUSTOMER VALUES ('KENNETH','IGIRI','M','ACCRA, GHANA',GETDATE(),'0245335678','0555335678',NULL);
INSERT INTO CUSTOMER VALUES ('RICHARD','HANO','M','BUDAPEST, HUNGARY',GETDATE(),'889189400122',NULL,NULL);
INSERT INTO CUSTOMER VALUES ('GEORGINA','APPIAH','F','ACCRA, GHANA','09-16-2018','02456665678','0275339678',NULL);
INSERT INTO CUSTOMER VALUES ('HOWARD','KLEVIA',NULL,'HAGUE, SWITZERLAND','02-16-2017','3499285782',NULL,NULL);
INSERT INTO CUSTOMER VALUES ('ZEN','GREGOR',NULL,'SHANGHAI, CHINA','06-23-2018','0245335678','0555335678',NULL);
INSERT INTO CUSTOMER VALUES ('IHEOMA','AWA','F','LAGOS, NIGERIA',GETDATE(),'0245335678','0555335678',NULL);

अंजीर। 4 नमूना तालिका

कार्य 1 :उन सभी ग्राहकों की सूची लौटाएं जिन्होंने वैकल्पिक फ़ोन नंबर प्रदान नहीं किया।

--Listing 5: Table List of Customers with no Secondary Phones
--A: The Simple Answer
SELECT * FROM CUSTOMER WHERE PHONENUMBER2 IS NULL ;

--B: Presenting the Result Set Better
SELECT 
FIRSTNAME
,LASTNAME
,ADDRESS
,FIRSTTRANDATE
,PHONENUMBER1 AS [PRIMARY PHONE NUMBER]
,ISNULL(CAST(PHONENUMBER2 AS VARCHAR), 'NO SECONDARY PHONE') AS [SECONDARY PHONE NUMBER]
FROM CUSTOMER WHERE PHONENUMBER2 IS NULL ;

COALESCE (या ISNULL) का उपयोग करके, हम 'नो सेकेंडरी फोन' कहने वाले टेक्स्ट का उपयोग करके आवश्यक जानकारी को बेहतर तरीके से प्रस्तुत कर सकते हैं।

चित्र 5 लिस्टिंग 5 के लिए परिणाम सेट

कार्य 2 :सभी ग्राहकों की सूची, उनका प्राथमिक फ़ोन नंबर, . लौटाएं और कोई अन्य वैकल्पिक फ़ोन नंबर।

--Listing 6: Table List of Customers with an Other Alternate Number
SELECT 
FIRSTNAME
,LASTNAME
,ADDRESS
,FIRSTTRANDATE
,PHONENUMBER1 AS [PRIMARY PHONE NUMBER]
,COALESCE(CAST(PHONENUMBER2 AS VARCHAR),CAST(PHONENUMBER3 AS VARCHAR), 'NO OTHER PHONE') AS [OTHER PHONE NUMBER]
FROM CUSTOMER  ;

चित्र 6 सूची 6 के लिए परिणाम सेट

इस मामले में, ISNULL एक विकल्प नहीं है क्योंकि हम तीन तर्क दे रहे हैं।

निष्कर्ष

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

संदर्भ

  • NULLIF (ट्रांजैक्ट-एसक्यूएल)
  • COALESCE (लेनदेन-एसक्यूएल)
  • इत्ज़िक बेन-गण का लेख

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर के लिए Intel Optane संग्रहण का उपयोग करना

  2. SQL सर्वर डेटाबेस में पहचान कॉलम सूचीबद्ध करते समय टेबल और स्कीमा शामिल करना

  3. SQL सर्वर के लिए कनेक्शन टाइमआउट

  4. SQL सर्वर पूर्ण-पाठ खोज के साथ उत्पाद विश्लेषण करना सीखें। भाग 2

  5. एक चुनिंदा कॉलम के मूल्य को स्टोर करना और अगले के लिए इसका इस्तेमाल करना संभव है?