TL;DR
यह NULL
सुरक्षित बराबर
ऑपरेटर।
नियमित =
की तरह ऑपरेटर, दो मानों की तुलना की जाती है और परिणाम 0
. है (बराबर नहीं) या 1
(बराबर); दूसरे शब्दों में:'a' <=> 'b'
पैदावार 0
और 'ए' <=> 'ए'
पैदावार 1
।
नियमित =
. के विपरीत ऑपरेटर, NULL
. के मान इसका कोई विशेष अर्थ नहीं है और इसलिए यह कभी भी NULL
उत्पन्न नहीं करता है संभावित परिणाम के रूप में; तो:'ए' <=> नल
पैदावार 0
और नल <=> शून्य
पैदावार 1
।
उपयोगिता
यह तब उपयोगी हो सकता है जब दोनों ऑपरेंड में NULL
हो सकता है और आपको दो स्तंभों के बीच एक सुसंगत तुलना परिणाम की आवश्यकता है।
एक अन्य उपयोग-मामला तैयार कथनों के साथ है, उदाहरण के लिए:
... WHERE col_a <=> ? ...
यहां, प्लेसहोल्डर या तो एक अदिश मान हो सकता है या NULL
क्वेरी के बारे में कुछ भी बदले बिना।
संबंधित ऑपरेटर
इसके अलावा <=>
दो अन्य ऑपरेटर भी हैं जिनका उपयोग NULL
. से तुलना करने के लिए किया जा सकता है , अर्थात् IS NULL
और शून्य नहीं है
; वे एएनएसआई मानक का हिस्सा हैं और इसलिए <=>
. के विपरीत, अन्य डेटाबेस पर समर्थित हैं , जो MySQL-विशिष्ट है।
आप उन्हें MySQL के <=>
. की विशेषज्ञता के रूप में सोच सकते हैं :
'a' IS NULL ==> 'a' <=> NULL
'a' IS NOT NULL ==> NOT('a' <=> NULL)
इसके आधार पर, आपकी विशेष क्वेरी (टुकड़ा) को अधिक पोर्टेबल में बदला जा सकता है:
WHERE p.name IS NULL
सहायता
SQL:2003 मानक ने इसके लिए एक विधेय की शुरुआत की, जो बिल्कुल MySQL के <=>
की तरह काम करता है। ऑपरेटर, निम्न रूप में:
IS [NOT] DISTINCT FROM
निम्नलिखित सार्वभौमिक रूप से समर्थित है, लेकिन सापेक्ष जटिल है:
CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
THEN 1
ELSE 0
END = 1