एसक्यूएल में पदानुक्रमित और पुनरावर्ती क्वेरी: Difference between revisions
No edit summary |
No edit summary |
||
Line 127: | Line 127: | ||
* <code>SYS_CONNECT_BY_PATH</code> | * <code>SYS_CONNECT_BY_PATH</code> | ||
== यह भी देखें == | '''प्रक्रियात्मक कथन का उपयोग किए इस विधि का उपयोग करके यादृच्छिक डेटा पीढ़ी संभव है।<ref name="ChamberlinChamberlin1998" />''' | ||
'''कुछ डेटाबेस, जैसे कि पोस्टग्रेएसक्यूएल, छोटे क्रिएट रिकर्सिव व्यू फॉर्मेट का समर्थन कर''' | |||
== यह भी देखें == | |||
* [[ संगणक वैज्ञानिक | संगणक वैज्ञानिक]] फिक्सपॉइंट प्रश्नों को भी प्रयुक्त करता है | * [[ संगणक वैज्ञानिक | संगणक वैज्ञानिक]] फिक्सपॉइंट प्रश्नों को भी प्रयुक्त करता है | ||
* [[डिडक्टिव डेटाबेस]] | * [[डिडक्टिव डेटाबेस]] |
Revision as of 14:27, 17 May 2023
एक पदानुक्रमित क्वेरी एक प्रकार का चयन (एसक्यूएल) है जो पदानुक्रमित मॉडल डेटा को संभालती है। वे अधिक सामान्य रिकर्सिव फिक्सपॉइंट प्रश्नों के विशेष स्थिति हैं, जो सकर्मक क्लोजर की गणना करते हैं।
मानक एसक्यूएल में: 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 से प्रारंभ ), आईबीएम डीबी 2, इन्फोर्मिक्स (संस्करण 14.1 से प्रारंभ ), फायरबर्ड (डेटाबेस सर्वर) (संस्करण 2.1 से प्रारंभ ) द्वारा सामान्य तालिका अभिव्यक्तियों का समर्थन किया जाता है।[8] माइक्रोसॉफ्ट एसक्यूएल सर्वर (संस्करण 2005 से प्रारंभ ), ओरेकल डेटाबेस (11g रिलीज़ 2 से पुनरावर्तन के साथ), पोस्टग्रेएसक्यूएल (8.4 से), मारियाडीबी (10.2 से), माई एसक्यूएल (8.0 से), एसक्यूलाइट (3.8.3 से), एचएसक्यूएलडीबी, आईबीएम सूचना (14.10 से),[9] गूगल बिगक्वेरी, साइबेस (डेटाबेस) (संस्करण 9 से प्रारंभ ), वर्टिका, एच2 (डीबीएमएस) (प्रायोगिक),[10] और संबंधपरक डेटाबेस प्रबंधन प्रणालियों की तुलना ओरेकल सीटीई सबक्वेरी फैक्टरिंग को कॉल करता है।[11]
सीटीई (जो रिकर्सिव हो भी सकता है और नहीं भी) के लिए सिंटैक्स इस प्रकार है:
WITH [RECURSIVE] with_query [, ...]
SELECT ...
जहाँ with_query
का सिंटैक्स है:
query_name [ (column_name [,...]) ] AS (SELECT ...)
पुनरावर्ती सीटीई का उपयोग संबंधों (ग्राफ़ या पेड़ों के रूप में) को पार करने के लिए किया जा सकता है, चूँकि सिंटैक्स बहुत अधिक सम्मिलित है क्योंकि कोई स्वचालित छद्म-स्तंभ नहीं बनाया गया है (जैसे LEVEL
या छद्म-स्तंभ); यदि ये वांछित हैं, तो उन्हें कोड में बनाना होगा एमएसडीएन दस्तावेज देखें[2] या आईबीएम प्रलेखन[12][13] ट्यूटोरियल उदाहरण के लिए। RECURSIVE
पोस्टग्रेएसक्यूएल के अतिरिक्त अन्य प्रणाली में सामान्यतः ई> कीवर्ड की आवश्यकता नहीं होती है।[14]
एसक्यूएल :1999 में एक पुनरावर्ती (सीटीई) क्वेरी कहीं भी प्रकट हो सकती है जहाँ किसी क्वेरी की अनुमति है। उदाहरण के लिए, परिणाम का नाम देना संभव है CREATE
[RECURSIVE
] VIEW
.[15] एक के अंदर सीटीई का उपयोग करना INSERT INTO
, एक पुनरावर्ती क्वेरी से उत्पन्न डेटा के साथ एक तालिका को पॉप्युलेट कर सकता है; बिना किसी प्रक्रियात्मक कथन का उपयोग किए इस विधि का उपयोग करके यादृच्छिक डेटा पीढ़ी संभव है।[16]
कुछ डेटाबेस, जैसे कि पोस्टग्रेएसक्यूएल, छोटे क्रिएट रिकर्सिव व्यू फॉर्मेट का समर्थन करते हैं, जिसे आंतरिक रूप से विथ रिकर्सिव कोडिंग में अनुवादित किया जाता है।[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 के दशक में ओरेकल द्वारा प्रस्तुत किया गया था।[18] ओरेकल 10g से पहले, निर्माण केवल विश्वकोश रेखांकन के लिए उपयोगी था क्योंकि यह किसी भी चक्र का पता लगाने में त्रुटि देता था; 10g संस्करण में ओरेकल ने नोसाइकिल फीचर (और कीवर्ड) प्रस्तुत किया, जिससे चक्रों की उपस्थिति में ट्रैवर्सल कार्य भी हो गया।[19]
CONNECT BY
स्नोफ्लेक इंक, एंटरप्राइजडीबी द्वारा समर्थित है,[20] ओरेकल डेटाबेस,[21] घनाकार,[22] आईबीएम इनफॉर्मिक्स[23] और आईबीएम डीबी 2 चूँकि केवल अगर यह एक संगतता मोड के रूप में सक्षम है।[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
प्रक्रियात्मक कथन का उपयोग किए इस विधि का उपयोग करके यादृच्छिक डेटा पीढ़ी संभव है।[16]
कुछ डेटाबेस, जैसे कि पोस्टग्रेएसक्यूएल, छोटे क्रिएट रिकर्सिव व्यू फॉर्मेट का समर्थन कर
यह भी देखें
- संगणक वैज्ञानिक फिक्सपॉइंट प्रश्नों को भी प्रयुक्त करता है
- डिडक्टिव डेटाबेस
- पदानुक्रमित मॉडल
- पहुंच योग्यता
- सकर्मक बंद
- वृक्ष संरचना
संदर्भ
- ↑ 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.0 2.1 Microsoft. "सामान्य टेबल एक्सप्रेशंस का उपयोग करके पुनरावर्ती प्रश्न". Retrieved 2009-12-23.
- ↑ Helen Borrie (2008-07-15). "Firebird 2.1 Release Notes". Retrieved 2015-11-24.
- ↑ "प्रश्नों के साथ". 10 February 2022. PostgreSQL
- ↑ "WITH Clause". SQLite
- ↑ "MySQL 8.0 Labs: [Recursive] Common Table Expressions in MySQL (CTEs)". mysqlserverteam.com
- ↑ Paragon corporation: Using PostgreSQL User-Defined Functions to solve the Tree Problem, February 15, 2004, accessed September 19, 2015
- ↑ https://firebirdsql.org/file/documentation/reference_manuals/reference_material/Firebird-2.5-LangRef-Update.pdf[bare URL PDF]
- ↑ possible before 14.10 with temp tables https://stackoverflow.com/questions/42579298/why-does-a-with-clause-give-a-syntax-error-on-informix
- ↑ "Advanced".
- ↑ Karen Morton; Robyn Sands; Jared Still; Riyaj Shamsudeen; Kerry Osborne (2010). प्रो ओरेकल एसक्यूएल. Apress. p. 283. ISBN 978-1-4302-3228-5.
- ↑ "IBM Docs".
- ↑ "IBM Docs".
- ↑ Regina Obe; Leo Hsu (2012). PostgreSQL: Up and Running. O'Reilly Media. p. 94. ISBN 978-1-4493-2633-3.
- ↑ Jim Melton; Alan R. Simon (2002). SQL:1999: Understanding Relational Language Components. Morgan Kaufmann. p. 352. ISBN 978-1-55860-456-8.
- ↑ 16.0 16.1 Don Chamberlin (1998). A Complete Guide to DB2 Universal Database. Morgan Kaufmann. pp. 253–254. ISBN 978-1-55860-482-7.
- ↑ "दृश्य बनाएँ". 10 February 2022.
- ↑ 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.
- ↑ Sanjay Mishra; Alan Beaulieu (2004). ओरेकल एसक्यूएल मास्टरिंग. O'Reilly Media, Inc. p. 227. ISBN 978-0-596-00632-7.
- ↑ Hierarchical Queries Archived 2008-06-21 at the Wayback Machine, EnterpriseDB
- ↑ Hierarchical Queries, Oracle
- ↑ "CUBRID पदानुक्रमित क्वेरी". Retrieved 11 February 2013.
- ↑ Hierarchical Clause, IBM Informix
- ↑ Jonathan Gennick (2010). एसक्यूएल पॉकेट गाइड (3rd ed.). O'Reilly Media, Inc. p. 8. ISBN 978-1-4493-9409-7.
अग्रिम पठन
- C. J. Date (2011). SQL and Relational Theory: How to Write Accurate SQL Code (2nd ed.). O'Reilly Media. pp. 159–163. ISBN 978-1-4493-1640-2.
Academic textbooks. Note that these cover only the SQL:1999 standard (and Datalog), but not the ओरेकल 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.
बाहरी संबंध
- https://stackoverflow.com/questions/1731889/cycle-detection-with-recursive-subquery-factoring
- http://explainextended.com/2009/11/18/sql-server-are-the-recursive-ctes-really-set-based/
- https://web.archive.org/web/20131114094211/http://gennick.com/with.html
- http://www.cs.duke.edu/courses/fall04/cps116/lectures/11-recursion.pdf
- http://www.blacktdn.com.br/2015/06/blacktdn-mssql-usando-consulta-cte.html