खैर ANSI092 मानक में कुछ सुंदर जघन्य वाक्यविन्यास शामिल हैं। नेचुरल जॉइन एक हैं और USING क्लॉज एक और। IMHO, एक तालिका के लिए एक स्तंभ के अलावा कोड को नहीं तोड़ना चाहिए लेकिन एक प्राकृतिक रूप से सबसे अधिक आकर्षक फैशन में टूट जाता है। ब्रेक करने का "सबसे अच्छा" तरीका संकलन त्रुटि से है। उदाहरण के लिए यदि आप * कहीं का चयन करते हैं, तो एक कॉलम जोड़ सकते हैंसंकलन करने में विफल। असफल होने का अगला सबसे अच्छा तरीका रन टाइम एरर होगा। यह बदतर है क्योंकि आपके उपयोगकर्ता इसे देख सकते हैं, लेकिन यह अभी भी आपको एक अच्छी चेतावनी देता है कि आपने कुछ तोड़ दिया है। यदि आप ANSI92 का उपयोग करते हैं और NATURAL के साथ प्रश्न लिखते हैं, तो यह संकलन समय पर नहीं टूटेगा और यह रन टाइम पर नहीं टूटेगा, क्वेरी बस अचानक गलत परिणाम उत्पन्न करना शुरू कर देगी। इस प्रकार के कीड़े कपटी होते हैं। रिपोर्टें गलत हैं, संभावित वित्तीय प्रकटीकरण गलत हैं।
प्राकृतिक जोड़ों के साथ अपरिचित लोगों के लिए। वे हर स्तंभ के नाम पर दो तालिकाओं से जुड़ते हैं जो दोनों तालिकाओं में मौजूद हैं। जब आपके पास 4 कॉलम कुंजी है और आप इसे टाइप करने से बीमार हैं तो यह वास्तव में अच्छा है। समस्या तब आती है जब Table1 में DESCRIPTION नाम का एक पूर्व-मौजूदा कॉलम होता है और आप Table2 नाम से एक नया कॉलम जोड़ते हैं, ओह, मुझे नहीं पता, कुछ सहज जैसा, mmm, DESCRIPTION और अब आप एक VARCHAR2 पर दो तालिकाओं में शामिल हो रहे हैं (१०००) क्षेत्र जो मुक्त रूप है।
ऊपर वर्णित समस्या के अलावा USING क्लॉज कुल अस्पष्टता का कारण बन सकता है। एक अन्य SO पोस्ट में , किसी ने यह ANSI-92 SQL दिखाया और इसे पढ़ने में मदद मांगी।
SELECT c.*
FROM companies AS c
JOIN users AS u USING(companyid)
JOIN jobs AS j USING(userid)
JOIN useraccounts AS us USING(userid)
WHERE j.jobid = 123
यह पूरी तरह से अस्पष्ट है। मैंने दोनों कंपनियों और उपयोगकर्ता तालिकाओं में एक उपयोगकर्ता नाम कॉलम रखा है और कोई शिकायत नहीं है। क्या होगा यदि कंपनियों में यूजरआईडी कॉलम उस पंक्ति को संशोधित करने के लिए अंतिम व्यक्ति की आईडी है?
मैं गंभीर हूं, क्या कोई समझा सकता है कि इस तरह की अस्पष्टता क्यों जरूरी थी? इसे सीधे मानक में क्यों बनाया गया है?
मुझे लगता है कि बिल सही है कि डेवलपर का एक बड़ा आधार है जो कोडिंग के माध्यम से वहां कॉपी / पेस्ट करते हैं। वास्तव में, मैं स्वीकार कर सकता हूं कि जब मैं एएनएसआई -92 की बात करता हूं तो मैं एक तरह का हूं। हर उदाहरण मैंने कभी देखा कि कई जोड़ियाँ कोष्ठकों में निहित हैं। ईमानदारी, कि सबसे अच्छा में कठिन वर्ग में तालिकाओं को बाहर निकालना। लेकिन तब एक SQL92 evangilist ने समझाया कि वास्तव में शामिल होने के आदेश को मजबूर करेगा। यीशु ... उन सभी कॉपी पेस्टर्स को मैंने देखा है जो अब वास्तव में एक ज्वाइनिंग ऑर्डर के लिए मजबूर कर रहे हैं - एक काम जो 95% समय बेहतर होता है, जो कि ऑप्टिमाइज़र के लिए विशेष रूप से कॉपी / पेस्टर है।
उनके कहने पर तोमलक ने ठीक कहा,
लोग नए सिंटैक्स पर स्विच नहीं करते हैं क्योंकि यह वहां है
यह मुझे कुछ देना है और मैं एक उल्टा नहीं देखता हूं। और अगर कोई उल्टा है, तो नकारात्मक को नजरअंदाज किया जा सकता है।