यह जानना मुश्किल है कि SQL भाषा के डिजाइनर मानक, लिखते समय क्या सोच रहे थे, लेकिन मेरी राय है।
एसक्यूएल, एक सामान्य नियम के रूप में, आपको अपनी अपेक्षाओं और आपके इरादे को स्पष्ट रूप से बताने की आवश्यकता है। भाषा "अनुमान लगाने का अनुमान नहीं है", और स्वचालित रूप से रिक्त स्थान भरें। यह एक अच्छी बात है।
जब आप कोई प्रश्न लिखते हैं तो सबसे महत्वपूर्ण विचार यह है कि सही परिणाम उत्पन्न करता है। यदि आपने कोई गलती की है, तो शायद यह बेहतर है कि एसक्यूएल पार्सर आपको अपने इरादे के बारे में अनुमान लगाने और सही न होने वाले परिणामों को वापस करने के बजाय आपको सूचित करता है। एसक्यूएल की घोषणात्मक प्रकृति (जहां आप बताते हैं कि आप इसे पुनर्प्राप्त करने के चरणों के बजाय पुनर्प्राप्त करना चाहते हैं) पहले से ही अनजाने में गलतियों को करना आसान बनाता है। भाषा वाक्यविन्यास में फ़ज़ीनियों को पेश करने से यह बेहतर नहीं होगा।
असल में, हर मामले में मैं सोच सकता हूं कि भाषा शॉर्टकट के लिए अनुमति देती है। उदाहरण के लिए, प्राकृतिक जुड़ें - जहां आप उन स्तंभों के नामों को छोड़ सकते हैं जिन्हें आप शामिल करना चाहते हैं और डेटाबेस नामों के आधार पर डेटाबेस को अनुमान लगाने की अनुमति दें। एक बार कॉलम नाम बदल जाते हैं (जैसे वे स्वाभाविक रूप से समय के साथ करते हैं) - मौजूदा प्रश्नों के अर्थशास्त्र उनके साथ बदलते हैं। यह बुरा है ... बहुत बुरा - आप वास्तव में इस तरह के जादू अपने डेटाबेस कोड में दृश्यों के पीछे हो रहा है।
हालांकि, इस डिजाइन विकल्प का एक परिणाम यह है कि एसक्यूएल एक वर्बोज़ भाषा है जिसमें आपको स्पष्ट रूप से अपना इरादा व्यक्त करना होगा। इसका परिणाम आपको जितना चाहें उतना कोड लिखना पड़ सकता है, और कुछ संरचनाएं इतनी वर्बोज़ क्यों होती हैं ... लेकिन दिन के अंत में - यह वही है।
संबंधित http://stackoverflow.com/questions/416625/why-does-sql-force-me-to-repeat-all-non-aggregated-fields-from-my-select-clause-i –
आह - यह एक डुप्लिकेट है। मैं इस सवाल को बंद कर दूंगा। – SqlRyan
यह एक बहुआयामी है: http://stackoverflow.com/questions/2311034/is-sql-group-by-a-design-flaw – cindi