PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

WHERE क्लॉज में लॉजिकल प्रोसेसिंग ऑर्डर या SQL मानक

यह SQL मानक का नियम है (जो बल्कि जटिल है क्योंकि यह बहुत सारे विवरणों में जाता है जिसके बारे में SQL के उपयोगकर्ता शायद नहीं सोचते हैं)।

नियम के पीछे दो सिद्धांत हैं। पहला यह है कि मानक संचालन के क्रम को लागू नहीं करता है, सिवाय जब तार्किक रूप से आवश्यक हो (एक having उदाहरण के लिए, क्लॉज को group by . के बाद तार्किक रूप से प्रोसेस करना होता है ) यह SQL पर धारणा का आधार एक वर्णनात्मक है भाषा, जहां परिणाम वर्णित हैं। कोई भी विशेष डेटाबेस इंजन अपने स्वयं के निष्पादन पथ निर्धारित कर सकता है।

दूसरा सिद्धांत अस्पष्टता से बचना है। यह वह जगह है जहां स्कोपिंग नियम आते हैं, जो परिभाषित करते हैं कि SQL कंपाइलर कब जानता है।

निम्नलिखित कथन पर विचार करें:

select a as b, b as a, a + 1 as d
-----------------------^
from t

प्रश्न यह है:कौन सा a a+1 . करता है देखें, कॉलम a टेबल या कॉलम में b (जिसे a . के रूप में उपनाम दिया गया है ) select . में . मानक के अनुसार यह स्पष्ट है। select . में कॉलम उपनाम ज्ञात नहीं हैं खंड जहां उन्हें परिभाषित किया गया है।

यह where . तक फैला हुआ है खंड भी, जिसका मूल्यांकन उसी दायरे में किया जाता है। उसी उदाहरण पर विचार करें:

select a as b, b as a, a + 1 as d
from t
where a > 100

कौन सा a करता है where हालत का संदर्भ लें? मानक असंदिग्ध है। where खंड select में स्तंभ उपनामों को नहीं समझता है . ऐसा इसलिए है क्योंकि select (तार्किक रूप से) का मूल्यांकन where . के बाद किया जाता है . तो, जब आप कहते हैं:

select row_number() over (order by a) as seqnum
from t
where a > 100

लौटाया गया मान पहले a . से शुरू होता है बाद 100. एन्यूमरेशन पहले नहीं होता है, फ़िल्टर की गई पंक्तियों को अनुक्रम संख्याएँ मिलती हैं जिन्हें फ़िल्टर किया जाता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पांडा कॉलम को PostgreSQL सूची में कनवर्ट करना?

  2. फ़ंक्शन प्राप्त करें डीडीएल कमांड

  3. JOOQ json बाइंडिंग के साथ समस्या

  4. PostgreSQL में एक तारीख से महीने घटाएं

  5. हेरोकू पर होस्टिंग पीजी डेटाबेस से कनेक्ट नहीं हो सकता