एसक्यूएल भाषा के डिजाइनर ठीक ही महसूस किया है कि सही पूर्वता के लिए छोड़ दिया लागू करने के मिलती भाषा (दुर्भाग्य से, वे स्तंभ आदेश के बारे में एक ही महसूस नहीं किया था!) पर एक अनावश्यक बाधा होगा
वहाँ करता है लगता है यहां LEFT OUTER
के लिए स्टैक ओवरफ्लो पर एक मजबूत वरीयता होने के लिए, जिस हद तक लोक पूरी तरह से बदल जाएगा, केवल LEFT
(हमारे पास कल here था) का उपयोग करने में सक्षम होने के लिए।
कहें कि आपने मूल रूप से अपनी क्वेरी Table_2 INNER JOIN Table_1
में लिखा था इससे पहले कि आपको एहसास हुआ कि आपको वास्तव में Table_1
से सभी पंक्तियों को संरक्षित करने में बाहरी शामिल होना चाहिए। LEFT OUTER
का उपयोग करने में सक्षम होने के लिए पूरे जुड़ने को बदलने के बजाय INNER
से RIGHT OUTER
को बदलने के लिए यह बहुत आसान होगा। सरल यहां अच्छा है क्योंकि यह कम आक्रामक है और इसलिए अनजाने में क्वेरी के इरादे को बदलने का कम जोखिम है।
एक और समान उदाहरण का उपयोग करने के लिए, संबंधपरक ऑपरेटर semi join पर विचार करें; संबंधपरक बीजगणित का हिस्सा होने के नाते, एक प्रौद्योगिकी को इसके बिना संबंधपरक रूप से पूर्ण नहीं माना जा सकता है। हालांकि मानक एसक्यूएल में सेमीफाइनल MATCH
का अनुमान लगाता है, लेकिन यह व्यापक रूप से लागू नहीं होता है। हालांकि, अधिकांश एसक्यूएल उत्पाद विभिन्न कामकाज का समर्थन करते हैं। SELECT
खंड में DISTINCT
के साथ INNER JOIN
के साथ INNER JOIN
का उपयोग करने का सबसे आम दृष्टिकोण प्रतीत होता है और शामिल तालिका से विशेषताओं को छोड़ देता है। WHERE table_1.ID IN (SELECT ID FROM Table_2)
का उपयोग करके इसका बारीकी से पालन किया जाता है। अगला सबसे लोकप्रिय WHERE EXISTS (SELECT * FROM Table_2 WHERE table_1.ID = table_1.ID)
है।
बिंदु यह है कि उपर्युक्त सभी अर्ध जुड़ने वाले हैं जो जंगली में पाए जाते हैं। यद्यपि मेरी निजी वरीयता EXISTS
का उपयोग करना है (हालांकि उत्सुकता से यह संबंधपरक गणक के करीब है), मुझे अभी भी दूसरों को अर्ध जुड़ने के रूप में पहचानने में सक्षम होना चाहिए; दिलचस्प बात यह है कि सबसे लोकप्रिय दृष्टिकोण (INNER JOIN
प्लस DISTINCT
प्लस गैर प्रक्षेपण) पहचानने के लिए सबसे कठिन हो सकता है!
किसी की व्यक्तिगत शैली को फिट करने के एकमात्र उद्देश्य के लिए कोड को रिफैक्टरिंग करना सही है: अनावश्यक प्रयासों की लागत, जोखिम में वृद्धि, स्रोत नियंत्रण के लिए निहितार्थ इत्यादि। अन्य प्राथमिकताओं को पहचानना और सम्मान करना सीखना एक महत्वपूर्ण कौशल है: यदि आपको लगता है खुद को समझने में सक्षम होने के बाद खुद को दोबारा प्रतिक्रिया देना आप खुद को नुकसान पहुंचाएंगे।
बेशक, तर्कसंगत रूप से, 'सही' उत्तर बाहरी जोड़ों से पूरी तरह से बचने के लिए है। रिलेशनल मॉडल में नल जैसी कोई चीज नहीं है और बाहरी जॉइन स्पष्ट रूप से नल का उत्पादन करने के लिए डिज़ाइन किए गए हैं।
'ए' और' बी' के योग के लिए, आप 'ए + बी' या' बी + ए 'कर सकते हैं। इनमे से कौन बेहतर है? –
मुझे लगता है कि एक आधुनिक आरडीबीएमएस एक दूसरे को बदल सकता है और जो बेहतर प्रदर्शन करता है उसे चुन सकता है, इससे कोई फर्क नहीं पड़ता। –