2010-10-07 28 views
8

संभव डुप्लिकेट:
Why does NULL = NULL evaluate to false in SQL serverकॉलम = एनयूएलएल कोई पंक्ति क्यों नहीं लौटाता है?

आप स्तंभ --- उम्र, सेक्स के लिए मेज "MyTab" में डेटा सम्मिलित करने के लिए, जन्म तिथि एक प्रश्न, आईडी

INSERT INTO MyTab 
VALUES (22, '', '', 4) 
उत्पन्न करते हैं

कॉलम सेक्स & DOB में मूल्य क्या होगा? क्या यह शून्य है?

यदि मान तो शून्य है ---

SELECT * FROM MyTab 
WHERE Sex=NULL 

क्वेरी ऊपर देता है उत्पादन ---- कोई चुनी हुई पंक्तियां --- क्यों ??

यदि मान तो शून्य नहीं है ---

SELECT * FROM Mytab 
WHERE Sex IS NULL 
क्वेरी ऊपर

उत्पादन देता है ---- कैसे ??

+1

न्यूल समान रूप से कुछ भी नहीं करता है। तो = NULL हमेशा झूठी वापसी करता है। और यही कारण है कि शून्यता परीक्षण के लिए एक विशेष वाक्यविन्यास है। यह सभी एएनएसआई एसक्यूएल डेटाबेस के लिए सच है। – APC

+0

"कॉलम सेक्स और डीओबी में क्या मूल्य होगा? क्या यह शून्य है?" आरडीबीएमएस पर निर्भर करता है। ओरेकल में, हाँ यह शून्य होगा। SQL सर्वर में, नहीं, यह मान एक खाली स्ट्रिंग होगा, '' '। –

उत्तर

2

से कैसे अशक्त कार्यों के Null (SQL)

गलतफहमी SQL कोड में त्रुटियों की एक बड़ी संख्या के कारण है, दोनों आईएसओ मानक एसक्यूएल बयान वास्तविक द्वारा समर्थित बोलियों में और विशिष्ट एसक्यूएल में दुनिया डेटाबेस प्रबंधन प्रणाली। ये गलतियों आम तौर पर अशक्त और या तो 0 (शून्य) या कोई रिक्त स्ट्रिंग (शून्य की लंबाई, '' के रूप में एसक्यूएल में प्रतिनिधित्व के साथ एक स्ट्रिंग मूल्य) के बीच भ्रम की स्थिति का परिणाम है। नल आईएसओ एसक्यूएल मानक द्वारा के रूप में परिभाषित एक खाली स्ट्रिंग और संख्यात्मक मान 0 दोनों से अलग है। जबकि नल की अनुपस्थिति को इंगित करता है, खाली स्ट्रिंग और संख्यात्मक शून्य दोनों वास्तविक मानों का प्रतिनिधित्व करते हैं।

इसके अलावा SET ANSI_NULLS

जब सेट ANSI_NULLS बंद है से

, बराबर (=) और नहीं करने के लिए (<>) तुलना ऑपरेटरों SQL-92 मानक का पालन नहीं करते बराबर। का उपयोग करके एक चयन कथन जहां कॉलम_नाम = NULL कॉलम_नाम में शून्य मानों के साथ पंक्तियां देता है। WHERE कॉलम_नाम <> NULL कॉलम में nonnull मानों के साथ पंक्तियों का उपयोग करके एक चयन कथन देता है। अतिरिक्त, का उपयोग करके एक चयन कथन जहां कॉलम_नाम <> XYZ_value सभी पंक्तियां जो XYZ मान और नहीं हैं जो पूर्ण नहीं हैं।

10

NULL SQL डेटा की अभाव दर्शाने में एक विशेष मूल्य है।

SELECT fields FROM table WHERE column = NULL 

NULL कुछ भी की तुलना में नहीं किया जा सकता, NULL खुद जिनमें शामिल हैं: इस तरह के रूप में, आप तरह प्रश्नों ऐसा नहीं कर सकते हैं। इसके बजाय, आप आवश्यकता होगी:

SELECT fields FROM table WHERE column IS NULL 

हालांकि आपके मामले में आप वास्तव में एक खाली मूल्य Sex और DOB में डालने कर रहे हैं।
और खाली मान NULL नहीं है। आप के लिए क्वेरी करने के लिए होगा:

SELECT fields FROM table WHERE column = '' 
0

शून्य कोई डेटा (भी नहीं खाली या रिक्त सामान) का अर्थ है, इसलिए Column = NULL काम करने के लिए हालांकि Column IS NULL शून्य के रूप में उस स्तंभ के साथ पंक्तियों को वापस करना चाहिए नहीं जा रहा है। लेकिन आप '' मूल्य डाल रहे हैं इसलिए एनयूएलएल की तुलना में किसी भी पंक्ति को वापस नहीं किया जाएगा।

2

'' - इसका मतलब खाली स्ट्रिंग है। आप शून्य सम्मिलित करना चाहते हैं, तो आप यो

INSERT INTO MyTab 
      VALUES (22, '', NULL, 4) 
0

का उपयोग के रूप में अन्य लोगों ने कहा की जरूरत है, पहली क्वेरी कोई उत्पादन देता है क्योंकि आप शून्य के लिए जाँच नहीं कर सकते हैं ऑपरेटर के बराबर होती है के साथ। दूसरी क्वेरी अधिक परेशान है - मेरा एकमात्र अनुमान यह है कि आप ओरेकल का उपयोग कर रहे हैं जो खाली तारों को एनयूएलएल के रूप में मानता है।

लिंग और डीओबी क्षेत्रों में मूल्यों के बारे में प्रश्न का उत्तर उन क्षेत्रों और डेटाबेस इंजन के प्रकार पर निर्भर करेगा जिनके साथ आप काम कर रहे हैं।

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