एसक्यूएल में पदानुक्रमित और पुनरावर्ती क्वेरी

From Vigyanwiki
Revision as of 14:13, 17 May 2023 by alpha>Saurabh


एक पदानुक्रमित क्वेरी एक प्रकार का चयन (एसक्यूएल) है जो पदानुक्रमित मॉडल डेटा को संभालती है। वे अधिक सामान्य रिकर्सिव फिक्सपॉइंट प्रश्नों के विशेष स्थिति हैं, जो सकर्मक क्लोजर की गणना करते हैं।

मानक एसक्यूएल में: 1999 पदानुक्रमित प्रश्नों को पुनरावर्ती या कॉमन टेबल एक्सप्रेशन (सीटीई) के माध्यम से कार्यान्वित किया जाता है। ओरेकल के पहले या कनेक्ट बाय क्लॉज के विपरीत, रिकर्सिव सीटीई को प्रारंभ से फिक्सपॉइंट सेमेन्टिक्स के साथ डिजाइन किया गया था।[1] मानक से पुनरावर्ती सीटीई आईबीएम डीबी 2 संस्करण 2 में वर्तमान कार्यान्वयन के अपेक्षाकृत समीप थे।[1] रिकर्सिव सीटीई भी माइक्रोसॉफ्ट एसक्यूएल सर्वर द्वारा समर्थित हैं (एसक्यूएल सर्वर 2008 आर 2 के बाद से),[2] फायरबर्ड (डेटाबेस सर्वर) फायरबर्ड 2.1,[3] पोस्टग्रेएसक्यूएल 8.4+,[4] एसक्यूलाइट 3.8.3+,[5] आईबीएम इन्फोर्मिक्स संस्करण 11.50+, क्युब्रिड , मारियाडीबी 10.2+ और माई एसक्यूएल 8.0.1+[6] झांकी में प्रलेखन है यह वर्णन करते हुए कि सीटीई का उपयोग कैसे किया जा सकता है। टिब्को स्पॉटफायर सीटीई का समर्थन नहीं करता है, जबकि ओरेकल 11g रिलीज़ 2 के कार्यान्वयन में फ़िक्सपॉइंट सिमेंटिक्स का अभाव है।

सामान्य टेबल एक्सप्रेशंस या कनेक्टेड-बाय क्लॉज के बिना उपयोगकर्ता-परिभाषित पुनरावर्ती कार्यों के साथ पदानुक्रमित प्रश्नों को प्राप्त करना संभव है।[7]


सामान्य तालिका अभिव्यक्ति

एक सामान्य तालिका अभिव्यक्ति, या सीटीई, (एसक्यूएल में) एक अस्थायी नामित परिणाम सेट है, जो एक साधारण क्वेरी से प्राप्त होता है और निष्पादन के दायरे में परिभाषित होता है। SELECT, INSERT, UPDATE, या DELETE कथन।

सीटीई को व्युत्पन्न तालिकाओं (सबक्वेरी), देखें (डेटाबेस) और इनलाइन यूजर-डिफ़ाइंड फ़ंक्शंस के विकल्प के रूप में माना जा सकता है।

टेराडाटा (संस्करण 14 से शुरू), आईबीएम Db2, Informix (संस्करण 14.1 से शुरू), फायरबर्ड (डेटाबेस सर्वर) (संस्करण 2.1 से शुरू) द्वारा सामान्य तालिका अभिव्यक्तियों का समर्थन किया जाता है।[8] Microsoft SQL सर्वर (संस्करण 2005 से शुरू), Oracle डेटाबेस (11g रिलीज़ 2 से पुनरावर्तन के साथ), PostgreSQL (8.4 से), MariaDB (10.2 से), MySQL (8.0 से), SQLite (3.8.3 से), HSQLDB, आईबीएम सूचना (14.10 से),[9] Google BigQuery, Sybase (डेटाबेस) (संस्करण 9 से शुरू), Vertica, H2 (DBMS) (प्रायोगिक),[10] और संबंधपरक डेटाबेस प्रबंधन प्रणालियों की तुलना। Oracle CTEs सबक्वेरी फैक्टरिंग को कॉल करता है।[11] सीटीई (जो रिकर्सिव हो भी सकता है और नहीं भी) के लिए सिंटैक्स इस प्रकार है:

WITH [RECURSIVE] with_query [, ...]
SELECT ...

कहाँ with_queryका सिंटैक्स है:

query_name [ (column_name [,...]) ] AS (SELECT ...)

पुनरावर्ती सीटीई का उपयोग संबंधों (ग्राफ़ या पेड़ों के रूप में) को पार करने के लिए किया जा सकता है, हालांकि सिंटैक्स बहुत अधिक शामिल है क्योंकि कोई स्वचालित छद्म-स्तंभ नहीं बनाया गया है (जैसे LEVEL #छद्म-स्तंभ); यदि ये वांछित हैं, तो उन्हें कोड में बनाना होगा। एमएसडीएन दस्तावेज देखें[2]या आईबीएम प्रलेखन[12][13] ट्यूटोरियल उदाहरण के लिए। RECURSIVE पोस्टग्रेएसक्यूएल के अलावा अन्य सिस्टम में आमतौर पर ई> कीवर्ड की आवश्यकता नहीं होती है।[14] SQL:1999 में एक पुनरावर्ती (CTE) क्वेरी कहीं भी प्रकट हो सकती है जहाँ किसी क्वेरी की अनुमति है। उदाहरण के लिए, परिणाम का नाम देना संभव है CREATE [RECURSIVE] VIEW.[15] एक के अंदर सीटीई का उपयोग करना INSERT INTO, एक पुनरावर्ती क्वेरी से उत्पन्न डेटा के साथ एक तालिका को पॉप्युलेट कर सकता है; बिना किसी प्रक्रियात्मक कथन का उपयोग किए इस तकनीक का उपयोग करके यादृच्छिक डेटा पीढ़ी संभव है।[16] कुछ डेटाबेस, जैसे कि PostgreSQL, छोटे क्रिएट रिकर्सिव व्यू फॉर्मेट का समर्थन करते हैं, जिसे आंतरिक रूप से विथ रिकर्सिव कोडिंग में अनुवादित किया जाता है।[17] 0 से 9 तक संख्याओं के भाज्य की गणना करने वाली पुनरावर्ती क्वेरी का एक उदाहरण निम्नलिखित है:

WITH recursive temp (n, fact) AS
(
       SELECT 0,
              1 -- Initial Subquery
       UNION ALL
       SELECT n+1,
              (n+1)*fact
       FROM   temp -- Recursive Subquery
       WHERE  n < 9)
SELECT *
FROM   temp;


द्वारा कनेक्ट करें

एक वैकल्पिक सिंटैक्स गैर-मानक है CONNECT BY निर्माण; इसे 1980 के दशक में Oracle द्वारा पेश किया गया था।[18] Oracle 10g से पहले, निर्माण केवल विश्वकोश रेखांकन के लिए उपयोगी था क्योंकि यह किसी भी चक्र का पता लगाने में त्रुटि देता था; 10g संस्करण में Oracle ने NOCYCLE फीचर (और कीवर्ड) पेश किया, जिससे चक्रों की उपस्थिति में ट्रैवर्सल कार्य भी हो गया।[19]

CONNECT BY स्नोफ्लेक इंक, एंटरप्राइजडीबी द्वारा समर्थित है,[20] ओरेकल डेटाबेस,[21] घनाकार,[22] आईबीएम इनफॉर्मिक्स[23] और आईबीएम Db2 हालांकि केवल अगर यह एक संगतता मोड के रूप में सक्षम है।[24] वाक्य रचना इस प्रकार है:

SELECT select_list
FROM table_expression
[ WHERE ... ]
[ START WITH start_expression ]
CONNECT BY [NOCYCLE] { PRIOR child_expr = parent_expr | parent_expr = PRIOR child_expr }
[ ORDER SIBLINGS BY column1 [ ASC | DESC ] [, column2 [ ASC | DESC ] ] ... ]
[ GROUP BY ... ]
[ HAVING ... ]
...
उदाहरण के लिए,
SELECT LEVEL, LPAD (' ', 2 * (LEVEL - 1)) || ename "employee", empno, mgr "manager"
FROM emp START WITH mgr IS NULL
CONNECT BY PRIOR empno = mgr;

उपरोक्त क्वेरी से आउटपुट ऐसा दिखाई देगा:

 स्तर | कर्मचारी | एम्प्नो | प्रबंधक
-------+-------------+-------+---------
 1 | राजा | 7839 |
 2 | जोन्स | 7566 | 7839
 3 | स्कॉट | 7788 | 7566
 4 | एडम्स | 7876 | 7788
 3 | फोर्ड | 7902 | 7566
 4 | स्मिथ | 7369 | 7902
 2 | ब्लेक | 7698 | 7839
 3 | एलन | 7499 | 7698
 3 | वार्ड | 7521 | 7698
 3 | मार्टिन | 7654 | 7698
 3 | टर्नर | 7844 | 7698
 3 | जेम्स | 7900 | 7698
 2 | क्लार्क | 7782 | 7839
 3 | मिलर | 7934 | 7782
(14 पंक्तियाँ)

छद्म-स्तंभ

  • LEVEL
  • CONNECT_BY_ISLEAF
  • CONNECT_BY_ISCYCLE
  • CONNECT_BY_ROOT

यूनरी ऑपरेटर

निम्नलिखित उदाहरण विभाग 10 में प्रत्येक कर्मचारी का अंतिम नाम देता है, पदानुक्रम में उस कर्मचारी के ऊपर प्रत्येक प्रबंधक, प्रबंधक और कर्मचारी के बीच स्तरों की संख्या, और दोनों के बीच का रास्ता:

SELECT ename "Employee", CONNECT_BY_ROOT ename "Manager",
LEVEL-1 "Pathlen", SYS_CONNECT_BY_PATH(ename, '/') "Path"
FROM emp
WHERE LEVEL > 1 and deptno = 10
CONNECT BY PRIOR empno = mgr
ORDER BY "Employee", "Manager", "Pathlen", "Path";


कार्य

  • SYS_CONNECT_BY_PATH


यह भी देखें

संदर्भ

  1. 1.0 1.1 Jim Melton; Alan R. Simon (2002). SQL:1999: Understanding Relational Language Components. Morgan Kaufmann. ISBN 978-1-55860-456-8.
  2. 2.0 2.1 Microsoft. "सामान्य टेबल एक्सप्रेशंस का उपयोग करके पुनरावर्ती प्रश्न". Retrieved 2009-12-23.
  3. Helen Borrie (2008-07-15). "Firebird 2.1 Release Notes". Retrieved 2015-11-24.
  4. "प्रश्नों के साथ". 10 February 2022. PostgreSQL
  5. "WITH Clause". SQLite
  6. "MySQL 8.0 Labs: [Recursive] Common Table Expressions in MySQL (CTEs)". mysqlserverteam.com
  7. Paragon corporation: Using PostgreSQL User-Defined Functions to solve the Tree Problem, February 15, 2004, accessed September 19, 2015
  8. https://firebirdsql.org/file/documentation/reference_manuals/reference_material/Firebird-2.5-LangRef-Update.pdf[bare URL PDF]
  9. possible before 14.10 with temp tables https://stackoverflow.com/questions/42579298/why-does-a-with-clause-give-a-syntax-error-on-informix
  10. "Advanced".
  11. Karen Morton; Robyn Sands; Jared Still; Riyaj Shamsudeen; Kerry Osborne (2010). प्रो ओरेकल एसक्यूएल. Apress. p. 283. ISBN 978-1-4302-3228-5.
  12. "IBM Docs".
  13. "IBM Docs".
  14. Regina Obe; Leo Hsu (2012). PostgreSQL: Up and Running. O'Reilly Media. p. 94. ISBN 978-1-4493-2633-3.
  15. Jim Melton; Alan R. Simon (2002). SQL:1999: Understanding Relational Language Components. Morgan Kaufmann. p. 352. ISBN 978-1-55860-456-8.
  16. Don Chamberlin (1998). A Complete Guide to DB2 Universal Database. Morgan Kaufmann. pp. 253–254. ISBN 978-1-55860-482-7.
  17. "दृश्य बनाएँ". 10 February 2022.
  18. Benedikt, M.; Senellart, P. (2011). "Databases". In Blum, Edward K.; Aho, Alfred V. (eds.). Computer Science. The Hardware, Software and Heart of It. p. 189. doi:10.1007/978-1-4614-1168-0_10. ISBN 978-1-4614-1167-3.
  19. Sanjay Mishra; Alan Beaulieu (2004). ओरेकल एसक्यूएल मास्टरिंग. O'Reilly Media, Inc. p. 227. ISBN 978-0-596-00632-7.
  20. Hierarchical Queries Archived 2008-06-21 at the Wayback Machine, EnterpriseDB
  21. Hierarchical Queries, Oracle
  22. "CUBRID पदानुक्रमित क्वेरी". Retrieved 11 February 2013.
  23. Hierarchical Clause, IBM Informix
  24. Jonathan Gennick (2010). एसक्यूएल पॉकेट गाइड (3rd ed.). O'Reilly Media, Inc. p. 8. ISBN 978-1-4493-9409-7.


अग्रिम पठन

Academic textbooks. Note that these cover only the SQL:1999 standard (and Datalog), but not the Oracle extension.

  • Abraham Silberschatz; Henry Korth; S. Sudarshan (2010). Database System Concepts (6th ed.). McGraw-Hill. pp. 187–192. ISBN 978-0-07-352332-3.
  • Raghu Ramakrishnan; Johannes Gehrke (2003). Database management systems (3rd ed.). McGraw-Hill. ISBN 978-0-07-246563-1. Chapter 24.
  • Hector Garcia-Molina; Jeffrey D. Ullman; Jennifer Widom (2009). Database systems: the complete book (2nd ed.). Pearson Prentice Hall. pp. 437–445. ISBN 978-0-13-187325-4.


बाहरी संबंध