कैसे एक CONNECT BY
क्वेरी निष्पादित और मूल्यांकन किया जाता है - चरण दर चरण (उदाहरण के लिए)।
मान लें कि हमारे पास निम्न तालिका है और क्वेरी द्वारा कनेक्ट है:
select * from mytable;
X
----------
1
2
3
4
SELECT level, m.*
FROM mytable m
START with x = 1
CONNECT BY PRIOR x +1 = x OR PRIOR x + 2 = x
ORDER BY level;
चरण 1:
तालिका से पंक्तियों का चयन करें mytable
जो एक START WITH
. से मिलता है शर्त, लौटाए गए परिणाम सेट में LEVEL =1 असाइन करें:
CREATE TABLE step1 AS
SELECT 1 "LEVEL", X from mytable
WHERE x = 1;
SELECT * FROM step1;
LEVEL X
---------- ----------
1 1
चरण 2
स्तर 1 से बढ़ाएँ:
LEVEL = LEVEL + 1
mytable
. के साथ पिछले चरण में लौटाए गए परिणाम सेट में शामिल हों CONNECT BY
. का उपयोग करके शामिल होने की शर्तों के रूप में शर्तें।
इस खंड में PRIOR column-name
पिछले चरण द्वारा लौटाए गए परिणामसेट को संदर्भित करता है, और सरल column-name
mytable
. को संदर्भित करता है तालिका:
CREATE TABLE step2 AS
SELECT 2 "LEVEL", mytable.X from mytable
JOIN step1 "PRIOR"
ON "PRIOR".x +1 = mytable.x or "PRIOR".x + 2 = mytable.x;
select * from step2;
LEVEL X
---------- ----------
2 2
2 3
चरण x+1
#2 दोहराएं जब तक कि अंतिम ऑपरेशन एक खाली परिणाम सेट न लौटा दे।
चरण 3
CREATE TABLE step3 AS
SELECT 3 "LEVEL", mytable.X from mytable
JOIN step2 "PRIOR"
ON "PRIOR".x +1 = mytable.x or "PRIOR".x + 2 = mytable.x;
select * from step3;
LEVEL X
---------- ----------
3 3
3 4
3 4
चरण 4
CREATE TABLE step4 AS
SELECT 4 "LEVEL", mytable.X from mytable
JOIN step3 "PRIOR"
ON "PRIOR".x +1 = mytable.x or "PRIOR".x + 2 = mytable.x;
select * from step4;
LEVEL X
---------- ----------
4 4
चरण 5
CREATE TABLE step5 AS
SELECT 5 "LEVEL", mytable.X from mytable
JOIN step4 "PRIOR"
ON "PRIOR".x +1 = mytable.x or "PRIOR".x + 2 = mytable.x;
select * from step5;
no rows selected
चरण 5 ने कोई पंक्ति नहीं लौटाई, इसलिए अब हम क्वेरी को अंतिम रूप देते हैं
अंतिम चरण
UNION ALL
सभी चरणों के परिणाम और इसे अंतिम परिणाम के रूप में लौटाएं:
SELECT * FROM step1
UNION ALL
SELECT * FROM step2
UNION ALL
SELECT * FROM step3
UNION ALL
SELECT * FROM step4
UNION ALL
SELECT * FROM step5;
LEVEL X
---------- ----------
1 1
2 2
2 3
3 3
3 4
3 4
4 4
अब उपरोक्त प्रक्रिया को आपकी क्वेरी पर लागू करते हैं:
SELECT * FROM dual;
DUMMY
-----
X
SELECT LEVEL FROM DUAL CONNECT BY rownum>5;
चरण 1
चूंकि क्वेरी में START WITH
. शामिल नहीं है खंड, Oracle स्रोत तालिका से सभी रिकॉर्ड का चयन करता है:
CREATE TABLE step1 AS
SELECT 1 "LEVEL" FROM dual;
select * from step1;
LEVEL
----------
1
चरण 2
CREATE TABLE step2 AS
SELECT 2 "LEVEL" from dual
JOIN step1 "PRIOR"
ON rownum > 5
select * from step2;
no rows selected
चूंकि अंतिम चरण ने कोई पंक्ति नहीं लौटाई, इसलिए हम अपनी क्वेरी को अंतिम रूप देने जा रहे हैं।
अंतिम चरण
SELECT * FROM step1
UNION ALL
SELECT * FROM step2;
LEVEL
----------
1
पिछली क्वेरी का विश्लेषण:
select level from dual connect by rownum<10;
मैं आपको होमवर्क असाइनमेंट के रूप में छोड़ता हूं।