2015-03-09 9 views
5

मैं किसी भी और सभी ऑपरेटरों पर oracle documentation पढ़ रहा हूं। मैं एक चीज़ को छोड़कर उनके उपयोगों को बहुत समझता हूं। इसमें कहा गया है:सभी ऑपरेटर वीएस किसी भी खाली प्रश्न पर

सभी:

एक सबक्वेरी रिटर्न पंक्तियों शून्य हैं, तो हालत सही पर मूल्यांकन करता है।

किसी भी:

एक सबक्वेरी रिटर्न पंक्तियों शून्य हैं, तो हालत गलत का आकलन।

यह मेरे लिए बहुत तार्किक प्रतीत नहीं होता है। खाली खाली सबकुछ क्यों सही होगा, लेकिन कोई भी झूठा रिटर्न देगा?

मैं अपेक्षाकृत एसक्यूएल के लिए नया हूँ, इसलिए मुझे लगता है यह इस व्यवहार जो मेरे लिए वास्तव में जवाबी सहज है के लिए एक यूज़-केस होगा।

किसी भी और सभी एक खाली सेट एक ही मूल्य नहीं लौटना चाहिए पर?

उत्तर

4

क्योंकि ANY को EXIST (यदि कोई है, तो इसका अर्थ है कि वे मौजूद हैं) के रूप में व्याख्या किया जाना है। इसलिए, यदि कोई पंक्ति नहीं मिलती है तो यह झूठी वापसी होती है।

All प्रमाणित नहीं करता कि कोई भी मान मौजूद हैं, यह सिर्फ प्रमाणित करता है कि यह सब संभव मूल्यों का प्रतिनिधित्व करता है। इसलिए, यदि कोई पंक्ति नहीं मिलती है तो भी यह सच हो जाती है।

+2

यह एक उदाहरण का उल्लेख करने लायक है: यदि आपके पास' empSalary> ALL (वेतन का चयन करें) कुछ योग्य से) 'यदि कुछ योग्य' से 'वेतन का चयन' पर कोई पंक्ति नहीं है तो यह सत्य पर मूल्यांकन करता है क्योंकि आप जो मूल्य जांच रहे हैं वह बड़ा है तो 'मूल्यों को मानें (भले ही वे मौजूद न हों)' :) –

5

कि कड़ी में EMP तालिका के उदाहरण पर विचार करें।

विशेष रूप से इस क्वेरी -

SELECT e1.empno, e1.sal 
FROM emp e1 
WHERE e1.sal > ANY (SELECT e2.sal 
        FROM emp e2 
        WHERE e2.deptno = 20); 

किसी के मामले में, सवाल पूछ रहे है "मेरे वेतन विभाग 20 (कम से कम 1 व्यक्ति) में किसी को भी, इससे अधिक है"। इसका मतलब है कि आप उम्मीद कर रहे हैं कम से कम एक व्यक्ति के पास आपके से कम वेतन है। जब कोई पंक्ति नहीं होती है, तो यह FALSE लौटाती है क्योंकि कोई भी व्यक्ति जिसका वेतन आपके से कम नहीं है, आप कम से कम एक की उम्मीद कर रहे थे।

सभी के मामले में, स्पष्ट सवाल आप पूछ किया जाएगा "मेरे वेतन हर किसी की तुलना में अधिक है?" है। इस बात को दोहराते हुए कि "क्या कोई ऐसा नहीं है जिसके पास वेतन मुझसे बड़ा है?" जब कोई पंक्ति वापस नहीं आती है, तो आपका उत्तर TRUE है, क्योंकि "वास्तव में कोई भी नहीं है जिसका वेतन मेरे से बड़ा है।

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