तीन-मूल्यीय तर्क और UNKNOWN
जानें कि NULL = NULL true क्यों नहीं होता और शर्तों में UNKNOWN कैसे आगे बढ़ता है
तीन-मूल्यीय तर्क और UNKNOWN, CoddyKit पर SQL साक्षात्कार की तैयारी का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह SQL साक्षात्कार की तैयारी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। SQL साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
NULL उम्मीदवारों को क्यों उलझा देता है
NULL एसक्यूएल इंटरव्यू में गलत उत्तरों का सबसे बड़ा कारण है। समस्या यह है कि इसे सामान्य मान की तरह समझ लिया जाता है, जबकि वास्तव में NULL का अर्थ 'अज्ञात' या 'अनुपस्थित' है—यह शून्य या खाली स्ट्रिंग नहीं है।
इंटरव्यू लेने वालों को यह इसलिए पसंद है क्योंकि वाक्य-विन्यास सही दिखता है, लेकिन परिणाम चुपचाप गलत होता है। वे आपको ऐसा फ़िल्टर दिखा सकते हैं जिसे एक पंक्ति लौटानी चाहिए और पूछ सकते हैं कि यह कुछ भी क्यों नहीं लौटाता।
इस पाठ में आप वह मानसिक समझ बनाएँगे जो NULL से जुड़े हर प्रश्न को आसान बना देती है: तीन-मूल्य तर्क। जब आप समझ लेते हैं कि तुलनाएँ TRUE, FALSE या UNKNOWN दे सकती हैं, तो आगे की बात स्पष्ट हो जाती है।
NULL कोई मान नहीं है
इंटरव्यू में कहने योग्य सबसे महत्वपूर्ण वाक्य है: NULL किसी मान की अनुपस्थिति है, स्वयं कोई मान नहीं।
इसका मतलब है कि आप इसकी तुलना संख्याओं की तरह = से नहीं कर सकते। डेटाबेस यह नहीं जानता कि दो अज्ञात मान बराबर हैं या नहीं, इसलिए वह TRUE या FALSE में से किसी एक का निर्णय नहीं करता।
NULL = 5नहीं FALSE है, बल्कि UNKNOWN हैNULL = NULLनहीं TRUE है, बल्कि UNKNOWN हैNULL <> NULLभी UNKNOWN है
इसी कारण NULL स्वीकार करने वाले स्तंभ पर लगाया गया सीधा समानता फ़िल्टर पंक्तियों को चुपचाप हटा देता है।
दो-मूल्य बनाम तीन-मूल्य तर्क
अधिकांश प्रोग्रामिंग भाषाएँ दो-मूल्य तर्क का इस्तेमाल करती हैं: कोई अभिव्यक्ति या तो TRUE होती है या FALSE। NULL किसी तुलना में शामिल होने पर एसक्यूएल एक तीसरा परिणाम, UNKNOWN, जोड़ता है।
इसलिए एसक्यूएल में कोई भी शर्त तीन परिणामों में से एक दे सकती है: TRUE, FALSE या UNKNOWN। WHERE खंड किसी पंक्ति को तभी रखता है जब उसकी शर्त ठीक TRUE हो। फ़िल्टर करने के लिए UNKNOWN, FALSE जैसा व्यवहार करता है, लेकिन तार्किक रूप से दोनों एक जैसे नहीं हैं।
इंटरव्यू लेने वाले यह जाँचते हैं कि आप इस अंतर को जानते हैं या नहीं, क्योंकि NOT के साथ UNKNOWN का व्यवहार FALSE से अलग होता है।
चुपचाप पंक्तियाँ हटाने वाला फ़िल्टर
यह इसका प्रसिद्ध उदाहरण है। मान लीजिए bonus कभी-कभी NULL होता है। भर्तीकर्ता पूछता है: 'इस क्वेरी को उन सभी लोगों को लौटाना चाहिए जिनका बोनस 1000 नहीं है। यह बिना बोनस वाले कर्मचारियों को क्यों छोड़ देती है?'
जिस पंक्ति में bonus NULL है, वहाँ bonus <> 1000 का परिणाम TRUE नहीं, बल्कि UNKNOWN होता है। WHERE केवल TRUE पंक्तियों को रखता है, इसलिए वे कर्मचारी परिणाम से गायब हो जाते हैं।
इसका समाधान NULL को स्पष्ट रूप से संभालना है, जिसके बारे में हम अगले पाठ में जानेंगे। अभी इतना समझें कि गायब पंक्तियाँ तर्क का परिणाम हैं, कोई बग नहीं।
SELECT name, bonus
FROM employees
WHERE bonus <> 1000;
-- Rows where bonus IS NULL are excluded:
-- NULL <> 1000 evaluates to UNKNOWN, not TRUEAND अभिव्यक्तियों में NULL
तीन-मूल्य तर्क से AND का व्यवहार बदल जाता है। इस नियम को याद कर लें और आप सत्य-सारणी से जुड़े किसी भी प्रश्न का तुरंत उत्तर दे सकेंगे।
- TRUE AND UNKNOWN = UNKNOWN
- FALSE AND UNKNOWN = FALSE
- UNKNOWN AND UNKNOWN = UNKNOWN
अंतर्ज्ञान यह है: AND के परिणाम को निश्चित रूप से FALSE बनाने के लिए केवल एक FALSE पर्याप्त है। इसलिए FALSE AND कुछ भी हमेशा FALSE रहता है। लेकिन TRUE AND अज्ञात अभी भी अज्ञात होता है, क्योंकि अज्ञात पक्ष का परिणाम किसी भी दिशा में जा सकता है।
-- If status = 'active' is TRUE but bonus = 100 is UNKNOWN:
SELECT *
FROM employees
WHERE status = 'active' AND bonus = 100;
-- Combined result is UNKNOWN, so the row is NOT returnedOR अभिव्यक्तियों में NULL
OR का नियम AND के उलट है। परिणाम को निश्चित रूप से TRUE बनाने के लिए केवल एक TRUE पर्याप्त है, इसलिए TRUE, UNKNOWN के प्रभाव को समाप्त कर देता है।
- TRUE OR UNKNOWN = TRUE
- FALSE OR UNKNOWN = UNKNOWN
- UNKNOWN OR UNKNOWN = UNKNOWN
इसलिए किसी OR वाली शर्त की एक शाखा अज्ञात होने पर भी पंक्ति उससे मेल खा सकती है, यदि दूसरी शाखा वास्तव में TRUE हो। AND वाले प्रश्न के बाद यह अक्सर पूछा जाने वाला अगला सवाल है।
SELECT *
FROM employees
WHERE department = 'Sales' OR bonus = 100;
-- A Sales employee with NULL bonus:
-- TRUE OR UNKNOWN = TRUE, so the row IS returnedNOT TRUE/FALSE को पलटता है, UNKNOWN को नहीं
यह वह बारीक सवाल है जिसे इंटरव्यू लेने वाले अक्सर अंत के लिए बचाकर रखते हैं। NOT, TRUE को FALSE और FALSE को TRUE में बदलता है, लेकिन NOT UNKNOWN अभी भी UNKNOWN रहता है।
इसीलिए परिणाम पलटने के लिए विफल शर्त को केवल NOT में लपेट देना पर्याप्त नहीं है। यदि NULL वाली पंक्ति के लिए bonus = 1000 का परिणाम UNKNOWN है, तो NOT (bonus = 1000) का परिणाम भी UNKNOWN होगा और वह पंक्ति फिर भी बाहर रह जाएगी।
निषेध NULL वाली पंक्तियों को वापस नहीं लाता। इसके लिए केवल स्पष्ट IS NULL जाँच काम आती है।
-- For a row where bonus IS NULL:
-- bonus = 1000 -> UNKNOWN
-- NOT (bonus = 1000) -> UNKNOWN (still excluded)
SELECT * FROM employees WHERE NOT (bonus = 1000);उदाहरण: NOT IN का जाल
यह NULL से जुड़ी सबसे अधिक पूछी जाने वाली पहेलियों में से एक है। NULL वाली सूची के साथ NOT IN इस्तेमाल करने पर एक भी पंक्ति नहीं लौटती। इससे वे उम्मीदवार चौंक जाते हैं जो उम्मीद करते हैं कि NULL को बस छोड़ दिया जाएगा।
अंदरूनी रूप से, x NOT IN (1, 2, NULL) का विस्तार x <> 1 AND x <> 2 AND x <> NULL के रूप में होता है। आखिरी तुलना UNKNOWN होती है और TRUE AND TRUE AND UNKNOWN का परिणाम UNKNOWN हो जाता है, इसलिए कोई भी पंक्ति योग्य नहीं ठहरती।
सुरक्षित विकल्प NOT EXISTS है, जो इस समस्या से प्रभावित नहीं होता।
-- Returns ZERO rows if the subquery yields any NULL
SELECT name
FROM employees
WHERE manager_id NOT IN (SELECT manager_id FROM managers);
-- Each comparison against NULL becomes UNKNOWN,
-- and the AND-chain collapses to UNKNOWN for every row.WHERE में UNKNOWN, FALSE जैसा क्यों व्यवहार करता है
एक सामान्य अगला सवाल होता है: 'यदि UNKNOWN, FALSE नहीं है, तो पंक्ति FALSE वाली पंक्ति की तरह क्यों हट जाती है?'
सटीक उत्तर यह है: WHERE, ON और HAVING सभी केवल TRUE रखने का नियम अपनाते हैं। FALSE और UNKNOWN दोनों उस जाँच में विफल होते हैं, इसलिए फ़िल्टर करने के लिए वे एक जैसे दिखाई देते हैं।
यह अंतर केवल निषेध और CHECK प्रतिबंधों के साथ दिखाई देता है। CHECK प्रतिबंध किसी पंक्ति को तब स्वीकार करता है जब शर्त TRUE या UNKNOWN हो, इसलिए NULL उस CHECK को पार कर सकता है जिसे आप रोकने वाला समझते थे।
-- CHECK passes on TRUE or UNKNOWN, so NULL salary is allowed:
-- CONSTRAINT salary_positive CHECK (salary > 0)
-- INSERT ... salary = NULL -> NULL > 0 is UNKNOWN -> allowedगहरा उदाहरण: COUNT और सत्यता का अंतर
इसे एक वास्तविक इंटरव्यू प्रश्न से जोड़कर समझें। 'हमारे पास 100 कर्मचारी हैं। SELECT COUNT(*) WHERE bonus = 100 30 लौटाता है और WHERE bonus <> 100 50 लौटाता है। बाकी 20 कहाँ हैं?'
बाकी 20 कर्मचारियों का बोनस NULL है। उनके लिए न तो = 100 और न ही <> 100 TRUE है; दोनों का परिणाम UNKNOWN है, इसलिए वे दोनों फ़िल्टरों से पूरी तरह बाहर रह जाते हैं।
यह कहना कि 'NULL किसी भी शर्त को संतुष्ट नहीं करता, इसलिए इन वर्गों का योग कुल संख्या के बराबर नहीं है' ठीक वही उत्तर है जो इंटरव्यू लेने वाले सुनना चाहते हैं।
SELECT
COUNT(*) FILTER (WHERE bonus = 100) AS eq_100,
COUNT(*) FILTER (WHERE bonus <> 100) AS ne_100,
COUNT(*) FILTER (WHERE bonus IS NULL) AS null_bonus,
COUNT(*) AS total
FROM employees;इंटरव्यू में कहने योग्य बातें
जब NULL का तर्क सामने आए, तो वरिष्ठ स्तर की समझ दिखाने के लिए ये बातें ज़रूर कहें:
- NULL का अर्थ अज्ञात है; इसके साथ की गई तुलनाओं का परिणाम UNKNOWN होता है।
- एसक्यूएल में तीन-मूल्य तर्क होता है: TRUE, FALSE, UNKNOWN।
- WHERE, ON और HAVING केवल TRUE पंक्तियों को रखते हैं।
NOT UNKNOWNका परिणाम अभी भी UNKNOWN होता है, इसलिए निषेध NULL वाली पंक्तियों को वापस नहीं लाता।- किसी भी NULL के साथ
NOT INकोई पंक्ति नहीं लौटाता;NOT EXISTSको प्राथमिकता दें।
पहले मानसिक मॉडल बताइए, फिर सत्य-सारणी पर क्रमशः चलिए। यह क्रम दिखाता है कि आप केवल तरकीब नहीं, बल्कि उसके पीछे का कारण भी समझते हैं।
त्वरित जाँच
तीन-मूल्य तर्क की अपनी समझ जाँचिए।
सारांश
अब आपके पास NULL की मूल मानसिक समझ है:
- NULL अज्ञात है, कोई मान नहीं; इसकी तुलना कभी भी
=या<>से न करें। - एसक्यूएल में तीन-मूल्य तर्क होता है: शर्तों का परिणाम TRUE, FALSE या UNKNOWN हो सकता है।
- फ़िल्टर करने वाले खंड केवल TRUE को रखते हैं; UNKNOWN वाली पंक्तियाँ FALSE वाली पंक्तियों की तरह गायब हो जाती हैं।
NOTTRUE और FALSE को पलटता है, लेकिन UNKNOWN को अपरिवर्तित छोड़ देता है।NOT INऔर NULL वाला जाल शून्य पंक्तियाँ लौटाता है;NOT EXISTSका इस्तेमाल करें।
अगला पाठ: IS NULL, IS NOT NULL और NULL-सुरक्षित समानता संचालकों से NULL की जाँच करने का सही तरीका।
एआई शिक्षक के साथ SQL सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 30
- पाठ
- 120
अक्सर पूछे जाने वाले प्रश्न
क्या “तीन-मूल्यीय तर्क और UNKNOWN” पाठ निःशुल्क है?
हाँ—“तीन-मूल्यीय तर्क और UNKNOWN” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और SQL साक्षात्कार की तैयारी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। SQL साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“तीन-मूल्यीय तर्क और UNKNOWN” में मैं क्या सीखूँगा?
जानें कि NULL = NULL true क्यों नहीं होता और शर्तों में UNKNOWN कैसे आगे बढ़ता है आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ SQL साक्षात्कार की तैयारी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या SQL साक्षात्कार की तैयारी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर SQL साक्षात्कार की तैयारी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“तीन-मूल्यीय तर्क और UNKNOWN” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस SQL साक्षात्कार की तैयारी पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर SQL साक्षात्कार की तैयारी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- तीन-मूल्यीय तर्क और UNKNOWN
- IS NULL, IS NOT NULL और NULL-सुरक्षित समानता
- COALESCE, NULLIF और ISNULL
- समेकन, JOIN और DISTINCT में NULL