खोज…


परिचय

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

टिप्पणियों

SQL सर्वर nulls को संभालने के लिए अन्य तरीके प्रदान करता है, जैसे IS NULL , IS NOT NULL , ISNULL() , COALESCE() और अन्य।

पूर्ण तुलना

जब तुलना की बात आती है तो NULL एक विशेष मामला है।

निम्न डेटा मान लें।

id someVal
 ----
 0 NULL
 1 1
 2 2

एक प्रश्न के साथ:

 SELECT id
 FROM table
 WHERE someVal = 1

वापसी करना id 1

 SELECT id
 FROM table
 WHERE someVal <> 1

आईडी 2 लौटाएगा

 SELECT id
 FROM table
 WHERE someVal IS NULL

आईडी 0 लौटाएगा

 SELECT id
 FROM table
 WHERE someVal IS NOT NULL

1 और 2 दोनों आईडी लौटाएगा।

यदि आप एक में मूल्यों के रूप में "गिना" किया जाना है NULLs चाहते हों तो = , <> तुलना, यह पहली एक गणनीय डेटा प्रकार परिवर्तित किया जाना चाहिए:

 SELECT id
 FROM table
 WHERE ISNULL(someVal, -1) <> 1

या

 SELECT id
 FROM table
 WHERE someVal IS NULL OR someVal <> 1

0 और 2

या आप अपना ANSI नल सेटिंग बदल सकते हैं।

एएनएसआई नल

MSDN से

SQL सर्वर के भविष्य के संस्करण में, ANSI_NULLS हमेशा चालू रहेगा और बंद करने का विकल्प स्पष्ट रूप से सेट करने वाला कोई भी एप्लिकेशन त्रुटि उत्पन्न करेगा। नए विकास कार्यों में इस सुविधा का उपयोग करने से बचें, और वर्तमान में इस सुविधा का उपयोग करने वाले अनुप्रयोगों को संशोधित करने की योजना बनाएं।

ANSI NULLS को बंद करने के लिए सेट किया जा रहा है = / <> अशक्त मूल्यों की तुलना।

निम्नलिखित आंकड़ों को देखते हुए:

id someVal
 ----
 0 NULL
 1 1
 2 2

और इस प्रश्न पर ANSI NULLS के साथ:

 SELECT id
 FROM table
 WHERE someVal = NULL

कोई परिणाम नहीं होगा। हालांकि एएनएसआई NULLS से समान क्वेरी:

 set ansi_nulls off

 SELECT id
 FROM table
 WHERE someVal = NULL

आईडी 0 लौटाएगा।

शून्य है()

IsNull() फ़ंक्शन दो मापदंडों को स्वीकार करता है, और पहला पैरामीटर null दूसरा पैरामीटर लौटाता है।

पैरामीटर:

  1. अभिव्यक्ति की जाँच करें। किसी भी डेटा प्रकार की कोई भी अभिव्यक्ति।
  2. प्रतिस्थापन मूल्य। यह वह मान है जो चेक अभिव्यक्ति के शून्य होने पर लौटा दिया जाएगा। प्रतिस्थापन मूल्य एक डेटा प्रकार का होना चाहिए जिसे चेक अभिव्यक्ति के डेटा प्रकार में अंतर्निहित रूप से परिवर्तित किया जा सकता है।

IsNull() फ़ंक्शन चेक अभिव्यक्ति के समान डेटा प्रकार लौटाता है।

DECLARE @MyInt int -- All variables are null until they are set with values.

SELECT ISNULL(@MyInt, 3) -- Returns 3.

ऊपर भी COALESCE देखें

अशक्त है / अशक्त नहीं है

चूँकि नल एक मूल्य नहीं है, आप नल के साथ तुलना ऑपरेटरों का उपयोग नहीं कर सकते।
यह जाँचने के लिए कि कोई स्तंभ या चर शून्य है या नहीं, आपको उपयोग करने की आवश्यकता is null :

DECLARE @Date date = '2016-08-03'

निम्न कथन मान 6 चयन करेगा, क्योंकि शून्य मान के साथ सभी तुलना झूठी या अज्ञात का मूल्यांकन करती है:

SELECT CASE WHEN @Date = NULL THEN 1
            WHEN @Date <> NULL THEN 2
            WHEN @Date > NULL THEN 3
            WHEN @Date < NULL THEN 4
            WHEN @Date IS NULL THEN 5
            WHEN @Date IS NOT NULL THEN 6

@Date वैरिएबल की सामग्री को null सेट करने और फिर से प्रयास करने के लिए, निम्न कथन 5 वापस आएगा:

SET @Date = NULL -- Note that the '=' here is an assignment operator!

SELECT CASE WHEN @Date = NULL THEN 1
            WHEN @Date <> NULL THEN 2
            WHEN @Date > NULL THEN 3
            WHEN @Date < NULL THEN 4
            WHEN @Date IS NULL THEN 5
            WHEN @Date IS NOT NULL THEN 6

COALESCE ()

COALESCE () क्रम में तर्कों का मूल्यांकन करता है और पहली अभिव्यक्ति के वर्तमान मूल्य को लौटाता है जो शुरू में NULL मूल्यांकन नहीं करता NULL

DECLARE @MyInt int -- variable is null until it is set with value.
DECLARE @MyInt2 int -- variable is null until it is set with value.
DECLARE @MyInt3 int -- variable is null until it is set with value.

SET @MyInt3  = 3

SELECT COALESCE (@MyInt, @MyInt2 ,@MyInt3 ,5) -- Returns 3 : value of @MyInt3.

हालाँकि ISNULL () COALESCE () के समान कार्य करता है, ISNULL () फ़ंक्शन केवल दो मापदंडों को स्वीकार करता है - एक को जाँचने के लिए, और एक को उपयोग करने के लिए यदि पहला पैरामीटर NULL है। नीचे ISNULL भी देखें

उप के साथ नहीं उप में

उप-क्वेरी में शून्य से उप-क्वेरी में हैंडलिंग नहीं करते हुए हमें आपके अपेक्षित परिणाम प्राप्त करने के लिए NULLS को समाप्त करना होगा

create table #outertable (i int)
create table #innertable (i int)

insert into #outertable (i) values (1), (2),(3),(4), (5)
insert into #innertable (i) values (2), (3), (null)

select * from #outertable where i in (select i from #innertable)
--2
--3
--So far so good

select * from #outertable where i not in (select i from #innertable)
--Expectation here is to get 1,4,5 but it is not. It will get empty results because of the NULL it executes as {select * from #outertable where i not in (null)}

--To fix this 
select * from #outertable where i not in (select i from #innertable where i is not null)
--you will get expected results
--1
--4
--5

अशक्त के साथ उप-क्वेरी में काम नहीं करते हुए अपने अपेक्षित आउटपुट से सावधान रहें



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow