Microsoft SQL Server
NULLs
खोज…
परिचय
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 नल सेटिंग बदल सकते हैं।
एएनएसआई नल
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
दूसरा पैरामीटर लौटाता है।
पैरामीटर:
- अभिव्यक्ति की जाँच करें। किसी भी डेटा प्रकार की कोई भी अभिव्यक्ति।
- प्रतिस्थापन मूल्य। यह वह मान है जो चेक अभिव्यक्ति के शून्य होने पर लौटा दिया जाएगा। प्रतिस्थापन मूल्य एक डेटा प्रकार का होना चाहिए जिसे चेक अभिव्यक्ति के डेटा प्रकार में अंतर्निहित रूप से परिवर्तित किया जा सकता है।
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
अशक्त के साथ उप-क्वेरी में काम नहीं करते हुए अपने अपेक्षित आउटपुट से सावधान रहें