2012-03-06 11 views
82

संभव डुप्लिकेट:
what is “=null” and “ IS NULL”
Is there any difference between IS NULL and =NULLएसक्यूएल बातिल और = रिक्त है

क्या

where x is null 

और

बीच का अंतर है
where x = null 

और बाद वाला काम क्यों नहीं करता?

+7

क्योंकि एनयूएलएल के साथ किसी भी अंकगणितीय तुलना का परिणाम भी नल है, आप इस तरह की तुलना से कोई सार्थक परिणाम प्राप्त नहीं कर सकते - http://dev.mysql.com/doc/refman/5.0/en/working-with-null। एचटीएमएल – scibuff

उत्तर

90

एसक्यूएल में, एक null मूल्य और किसी भी अन्य के बीच तुलना एक तुलना ऑपरेटर (उदाहरण =, !=, <, आदि) का उपयोग करके मूल्य (null सहित) का परिणाम null होगा, जिसे 01 के रूप में माना जाता हैजहां किसी खंड के प्रयोजनों के लिए (सख्ती से बोलना, यह "गलत" के बजाय "सत्य नहीं है", लेकिन प्रभाव समान है)।

तर्क यह है कि null का अर्थ "अज्ञात" है, इसलिए null पर किसी भी तुलना का परिणाम भी "अज्ञात" है। तो आपको where my_column = null कोडिंग करके पंक्तियों पर कोई हिट नहीं मिलेगी। यदि एक स्तंभ null है, is null और is not null के माध्यम से है, जो एक विशेष शर्त एक null (या नहीं एक null) के लिए परीक्षण करने के लिए है

एसक्यूएल के परीक्षण के लिए विशेष सिंटेक्स प्रदान करता है।

यहां कुछ एसक्यूएल विभिन्न स्थितियों और उपरोक्त के अनुसार उनके प्रभाव को दिखा रहा है।

create table t (x int, y int); 
insert into t values (null, null), (null, 1), (1, 1); 

select 'x = null' as test , x, y from t where x = null 
union all 
select 'x != null', x, y from t where x != null 
union all 
select 'not (x = null)', x, y from t where not (x = null) 
union all 
select 'x = y', x, y from t where x = y 
union all 
select 'not (x = y)', x, y from t where not (x = y); 

रिटर्न केवल 1 पंक्ति (अपेक्षित रूप से):

TEST X Y 
x = y 1 1 

कि शून्य के बराबर नहीं NULL करता है इस SQLFiddle

+4

और कैसे 'शून्य' काम करता है। – joshua

+1

इस उत्तर के साथ अभी भी कई समस्याएं हैं। "शून्य की तुलना हमेशा झूठी मानी जाती है" - बाधा जांच में नहीं, जैसा कि पहले से ही बताया गया है, और विशेष मामलों में नहीं। 'नूल इज़ नूल' एक तुलना है जो सत्य का मूल्यांकन करेगी। "शून्य मतलब 'अज्ञात' है - नल एक मूल्य के लिए प्लेसहोल्डर है जो उपस्थित होना चाहिए, लेकिन किसी कारण से वर्तमान में गायब है और यह एप्लिकेशन (शून्य नहीं) है जो अर्थपूर्ण अर्थ प्रदान करता है (अज्ञात, लागू नहीं होता है, गवाह उत्तरदायी नहीं था, आदि)। "अगर एक नल सूची में है ..." आपका उदाहरण तालिका में शामिल नहीं है, सूची में नहीं। – onedaywhen

+1

@onedaywhen मैंने सोचा कि मैं स्पष्ट था ... "तुलना" से मेरा मतलब है '=' या '! =' आदि, * नहीं * 'शून्य है 'या' शून्य नहीं है '। एफवाईआई एक कॉलम चयन का परिणाम, जैसे कि 'IN (SELECT ...)' में उपयोग किया जाता है, को "सूची" – Bohemian

4

पहले जाँच है कि क्या एक फ़ील्ड मान null देर बाद जिस तरह से आप यह करने की उम्मीद है काम नहीं करेगा क्योंकि null विशेष मूल्य जो बराबर कुछ भी नहीं करता है, तो आप के लिए = का उपयोग कर समानता तुलना उपयोग नहीं कर सकते है का सही तरीका है यह।

तो जब आप अगर एक क्षेत्र मूल्य null है या नहीं की जाँच करने की जरूरत है, का उपयोग करें:

where x is null 

के बजाय:

where x = null 
51

यह ध्यान देना महत्वपूर्ण है पर चल रहा है देखो,।

NULL एक मूल्य नहीं है, और इसलिए इसकी तुलना किसी अन्य मूल्य से नहीं की जा सकती है।

where x is null जांचता है कि x एक शून्य मान है या नहीं।

where x = null जाँच कर रहा है कि क्या एक्स शून्य के बराबर होती है, जो सच

+1

नल एक मान है, यह सिर्फ अज्ञात मूल्य है। प्रोग्रामिंग भाषा चर की तरह मूल्य शून्य हो सकता है। इसके अलावा आप तुलना कर सकते हैं अगर (varA! = Null)। एसक्यूएल में हालांकि यह आपके जैसा अलग-अलग व्यवहार करता है। – broadband

+0

@broadband: शून्य एक मान नहीं है, जैसे अनंतता एक संख्या नहीं है। हालांकि यह एक दार्शनिक बात है हालांकि ... हाँ, आप एक चर के लिए "शून्य" असाइन कर सकते हैं, लेकिन इसका मतलब है कि आप उस चर को अनसेट या रीसेट कर रहे हैं। 0 या "" एक मान होगा, लेकिन शून्य प्रभावी ढंग से इसका अर्थ है "इस चर के पास कोई मूल्य नहीं है"। – Sygmoral

+0

@ Sygmoral आंतरिक रूप से जब आप सी # स्ट्रिंग ए = नल में लिखते हैं, तो इसका मतलब है कि आप वैरिएबल 'ए'' मान को 'null' सेट कर रहे हैं। लेकिन प्रोग्रामर के लिए व्याख्या आप की तरह है: 'इस चर के पास कोई मूल्य नहीं है'। एसक्यूएल नल में और भी कई व्याख्याएं या तीन मूल्यवान तर्क हो सकते हैं। – broadband

3

मैं लगता है कि समानता कुछ है कि पूरी तरह से निर्धारित किया जा सकता है कभी नहीं होगा। शून्य के साथ परेशानी यह है कि यह स्वाभाविक रूप से अज्ञात है। किसी भी अन्य मूल्य के साथ संयुक्त शून्य शून्य है - अज्ञात। एसक्यूएल से पूछना "क्या मेरा मान शून्य के बराबर है?" इनपुट हर समय अज्ञात होगा, भले ही इनपुट शून्य हो। मुझे लगता है कि आईएस न्यूल के कार्यान्वयन से यह स्पष्ट हो जाता है।

संबंधित मुद्दे