मेरे लिए नंबर एक अंतर: यदि HAVINGएसक्यूएल भाषा से हटा दिया गया था तो जीवन पहले की तरह कम या ज्यादा हो जाएगा। निश्चित रूप से, एक अल्पसंख्यक प्रश्नों को एक व्युत्पन्न तालिका, सीटीई, आदि का उपयोग करके फिर से लिखना होगा, लेकिन परिणामस्वरूप वे समझने और बनाए रखने में आसान होंगे। हो सकता है कि विक्रेताओं के आशावादी कोड को इसके लिए फिर से लिखना पड़े, फिर से उद्योग के भीतर सुधार का अवसर मिले।
अब WHEREभाषा से हटाने के लिए एक क्षण पर विचार करें । इस बार अस्तित्व में मौजूद अधिकांश प्रश्नों को एक स्पष्ट वैकल्पिक निर्माण के बिना फिर से लिखना होगा। कोडर्स को क्रिएटिव प्राप्त करना होगा जैसे कि एक तालिका में शामिल होने के लिए आंतरिक रूप से जाना जाता है, जिसमें पूर्व पंक्ति (जैसे DUALओरेकल) ONमें पूर्व WHEREखंड को अनुकरण करने के लिए क्लॉज का उपयोग किया जाता है । इस तरह के निर्माणों से वंचित किया जाएगा; यह स्पष्ट होगा कि भाषा से कुछ गायब था और परिणामस्वरूप स्थिति बदतर होगी।
टीएल; डीआर हम HAVINGकल खो सकते हैं और चीजें बदतर नहीं होंगी, संभवतः बेहतर होंगी, लेकिन उसी के बारे में नहीं कहा जा सकता है WHERE।
यहाँ के जवाबों से, ऐसा लगता है कि बहुत से लोगों को यह पता ही नहीं है कि एक HAVINGखंड का उपयोग एक GROUP BYखंड के बिना किया जा सकता है । इस स्थिति में, HAVINGखंड को संपूर्ण तालिका अभिव्यक्ति पर लागू किया जाता है और इसके लिए आवश्यक है कि SELECTखंड में केवल स्थिरांक दिखाई दें । आमतौर पर इस HAVINGखंड में समुच्चय शामिल होंगे।
यह जितना लगता है उससे अधिक उपयोगी है। उदाहरण के लिए, इस क्वेरी पर विचार करें कि क्या यह परीक्षण nameसभी मानों के लिए अद्वितीय है T:
SELECT 1 AS result
FROM T
HAVING COUNT( DISTINCT name ) = COUNT( name );
केवल दो संभावित परिणाम हैं: यदि HAVINGखंड सत्य है तो परिणाम एकल पंक्ति वाला होना चाहिए जिसमें मान हो1 , अन्यथा परिणाम खाली सेट होगा।
HAVINGएक पोस्ट-एकत्रीकरण फ़िल्टर है, जबकिWHEREएक पूर्व-एकत्रीकरण फ़िल्टर है।