मैं ansi-92 SQL मानक सीखने की कोशिश कर रहा हूं, लेकिन मुझे इसे पूरी तरह से समझ में नहीं आता है (मैं ansi-89 मानक के साथ-साथ डेटाबेस में सामान्य रूप से नया हूं)।क्या मैं जॉइन को गलत समझता हूं?
मेरे उदाहरण में, मेरे पास तीन टेबल साम्राज्य हैं - < परिवार - < प्रजातियां (जीवविज्ञान वर्गीकरण)।
- प्रजातियों और न ही परिवारों के बिना साम्राज्य हो सकते हैं।
- प्रजातियों के बिना परिवार और न ही दयालु हो सकते हैं।
- राज्य या परिवार के बिना प्रजातियां हो सकती हैं।
ऐसा क्यों होता है?
एक जीवविज्ञानी, एक नई प्रजाति पाता है लेकिन वह एक राज्य या परिवार में इस वर्गीकृत नहीं किया गया है, एक नए परिवार कोई प्रजातियां पायी जाती हैं और क्या राज्य यह संबंधित होना चाहिए के बारे में निश्चित नहीं है कि बनाता है, आदि
यहाँकहो एक बेवकूफ है (अंतिम प्रश्न देखें): http://sqlfiddle.com/#!4/015d1/3
मैं एक प्रश्न बनाना चाहता हूं जो मुझे हर राज्य, हर प्रजाति को वापस लाए, लेकिन उन परिवारों में नहीं, जिनके पास कोई प्रजाति नहीं है, इसलिए मैं इसे बना देता हूं।
select *
from reino r
left join (
familia f
right join especie e
on f.fnombre = e.efamilia
and f.freino = e.ereino
) on r.rnombre = f.freino
and r.rnombre = e.ereino;
मैं क्या लगता है कि यह करना होगा है:
एक अधिकार के रूप में परिवार और प्रजातियों में शामिल होने के शामिल हो, तो यह हर प्रजाति लाता है, लेकिन नहीं उन परिवारों कोई प्रजाति है। इसलिए, यदि एक प्रजाति को किसी परिवार में वर्गीकृत नहीं किया गया है, तो यह परिवार पर शून्य के साथ दिखाई देगा।
फिर, बाएं शामिल होने के परिणामस्वरूप राज्य में शामिल हों, इसलिए यह हर राज्य को लाता है, भले ही उस राज्य पर कोई परिवार या प्रजातियां वर्गीकृत न हों।
क्या मैं गलत हूँ? क्या यह मुझे उन प्रजातियों को नहीं दिखाया जाना चाहिए जिन्हें वर्गीकृत नहीं किया गया है? अगर मैं आंतरिक पूछताछ करता हूं तो यह मुझे जो चाहिए वह लाता है। क्या कोई समस्या है जहां मैं चीजों को समूहीकृत कर रहा हूं?
इस क्वेरी अनुकूलन कि ओरेकल करता है ?, अपनी क्वेरी में गड़बड़ी न करता, कोष्ठक अनावश्यक हैं? क्या मुझे एक ही परिणाम मिल रहा है? आदेश ऑरैकल निर्देश क्या है? – Roger
@outis मुझे सम्मान से असहमत होना है कि वाक्यविन्यास में शामिल होना घोंसला नहीं है। [मेरा मानना है कि यह आलेख इस विषय पर चर्चा करता है] (http://tonyhasler.wordpress.com/2009/02/22/parentheses-in-ansi-join-syntax/) और निष्कर्ष निकाला है कि आदेश के स्पष्टीकरण के लिए ब्रांड्स का उपयोग किया जा सकता है कई तालिकाओं में शामिल होने पर संचालन। –
@ माइकलफ्रेड्रिकसन: मैं सही खड़ा हूं। वहां है, एसक्यूएल/फाउंडेशन § 7.6। – outis