Presentation is loading. Please wait.

Presentation is loading. Please wait.

Recursive SQL Semra GÜLEÇ CENG 553 METU 30.12.2010.

Similar presentations


Presentation on theme: "Recursive SQL Semra GÜLEÇ CENG 553 METU 30.12.2010."— Presentation transcript:

1 Recursive SQL Semra GÜLEÇ CENG 553 METU 30.12.2010

2 Agenda What is Recursion? Business Examples Mathematical Examples Performance Considerations Pitfalls & Recommendations CENG 553– Fall 2010Semra GÜLEÇ2

3 What Is Recursion? An algorithmic technique where a function, in order to accomplish a task, calls itself with some part of the task. Best known example is Factorial Calculation. n! = n * (n-1)! 4! = 4 * 3! 3! = 3 * 2! 2! = 2 * 1! 1! = 1 CENG 553– Fall 2010Semra GÜLEÇ3 1 2 * 1 3 * 2 4 * 624

4 Recursion in SQL Recursion seems “cool stuff”, but does it have any business value? CENG 553– Fall 2010Semra GÜLEÇ4

5 Where to Use Recursion? Bill of Materials (BOM) Hierarchies Organization Charts Airline/Transportation Reservation Systems Generate test data CENG 553– Fall 2010Semra GÜLEÇ5

6 BOM Example CENG 553– Fall 2010Semra GÜLEÇ6 AAA BBBCCCDDD EEEFFF GGG 153 24 3

7 Recursion Basics WITH RPL (PART, SUBPART, QUANTITY) AS (SELECT PART, SUBPART, QUANTITY FROM PARTLIST WHERE PART='AAA' UNION ALL SELECT CHILD.PART, CHILD.SUBPART, PARENT.QUANTITY*CHILD.QUANTITY FROM RPL PARENT, PARTLIST CHILD WHERE PARENT.SUBPART=CHILD.PART) SELECT PART, SUBPART, SUM(QUANTITY) AS QUANTITY FROM RPL GROUP BY PART, SUBPART ORDER BY PART, SUBPART 7 INITIALIZATION SELECT ITERATIVE SELECT MAIN SELECT

8 Result of Recursive SQL Result Of Initialization Select First iteration CENG 553– Fall 2010Semra GÜLEÇ8

9 Result of Recursive SQL Second and Final Iteration CENG 553– Fall 2010Semra GÜLEÇ9

10 Controlling the Depth of Recursion WITH RPL (LEVEL,PART, SUBPART ) AS (SELECT 0, PART, SUBPART FROM PARTLIST WHERE PART='AAA' UNION ALL SELECT PARENT.LEVEL+1,CHILD.PART, CHILD.SUBPART FROM RPL PARENT, PARTLIST CHILD WHERE PARENT.SUBPART=CHILD.PART AND PARENT.LEVEL < 1) SELECT LEVEL, PART, SUBPART FROM RPL ORDER BY LEVEL CENG 553– Fall 2010Semra GÜLEÇ10

11 Result of Recursive SQL CENG 553– Fall 2010Semra GÜLEÇ11

12 Loops in Hierarchy CENG 553– Fall 2010Semra GÜLEÇ12

13 Loop Detection SQL WITH PARENT (PART,SUBPART, LEVEL, PATH) AS (SELECT PART, SUBPART, 0, CAST(PART AS VARCHAR(100)) AS PATH FROM L_PARTLIST WHERE PART='AAA' UNION ALL SELECT CASE WHEN CHARINDEX(C.PART + '->',P.PATH)>0 THEN 'LOOP' ELSE C.PART END, C.SUBPART,P.LEVEL +1, CAST(P.PATH + '->' + P.SUBPART AS VARCHAR(100)) FROM L_PARTLIST C,PARENT P WHERE P.SUBPART = C.PART AND P.PART <> 'LOOP') SELECT DISTINCT PART, LEVEL, PATH FROM PARENT WHERE PART='LOOP' ORDER BY LEVEL CENG 553– Fall 2010Semra GÜLEÇ13

14 Finding the Cheapest Fare CENG 553– Fall 2010Semra GÜLEÇ14

15 Cheapest Fare SQL WITH ROUTING(LEVEL, FROM_CITY, TO_CITY, CHAIN, FARE) AS ( SELECT 0, CAST('' as char(3)), CAST('MCI' as char(3)), CAST('MCI' AS VARCHAR(100) ), 0 UNION ALL SELECT PARENT.LEVEL + 1, CHILD.FROM_CITY, CHILD.TO_CITY, CAST(PARENT.CHAIN + '->' + CHILD.TO_CITY as VARCHAR(100)), PARENT.FARE + CHILD.FARE FROM ROUTING PARENT, ROUTE CHILD WHERE PARENT.TO_CITY = CHILD.FROM_CITY AND PARENT.LEVEL < 10) CENG 553– Fall 2010Semra GÜLEÇ15

16 Cheapest Fare SQL – Cont SELECT DISTINCT CHAIN AS ROUTE, ROUTING.FARE FROM ROUTING WHERE ROUTING.LEVEL > 0 AND ROUTING.CHAIN LIKE 'MCI%' AND ROUTING.CHAIN LIKE '%DFW' ORDER BY ROUTE CENG 553– Fall 2010Semra GÜLEÇ16

17 Other Business Examples CENG 553– Fall 2010Semra GÜLEÇ17 Organization Chart Cost Roll-Up

18 Factorial Example WITH NUMBERS (LEVEL, FACTO) AS ( SELECT 1, 1 UNION ALL SELECT LEVEL + 1, FACTO * (LEVEL + 1) FROM NUMBERS WHERE LEVEL < 12 ) SELECT LEVEL AS NUMBER, FACTO AS FACTORIAL FROM NUMBERS ORDER BY LEVEL CENG 553– Fall 2010Semra GÜLEÇ18

19 Fibonacci Series WITH NUMBERS (LEVEL, NEXTNUM, TOTAL) AS (SELECT 1, 1, 1 UNION ALL SELECT LEVEL + 1, (NEXTNUM + TOTAL), (NEXTNUM + TOTAL + TOTAL) FROM NUMBERS WHERE LEVEL <= 10) SELECT A.NEXTNUM FROM NUMBERS A WHERE A.LEVEL <= 10 UNION ALL SELECT B.TOTAL FROM NUMBERS B WHERE B.LEVEL <= 10 ORDER BY 1 CENG 553– Fall 2010Semra GÜLEÇ19

20 Pitfalls & Recommendations Recursive SQL statements can be very efficient, if coded correctly, and if there are suitable indexes. When either of the above is not true, they can be very slow. Prone to infinite cycles unless controlled properly Always test on small test tables in test environment before deploying to production Use controls to limit recursion when possible CENG 553– Fall 2010Semra GÜLEÇ20

21 References DB2 SQL Cookbook, Graeme Birchall Recursive SQL – Unleash the Power!, IDUG North America 2008, Suresh Sane Parlez-Vous Klingon? Recursion SQL for Generating Test Data, IDUG Europe 2008, Alexander Kopac DB2 SQL Workshop for Experienced Users Course Notes, IBM Corp. CENG 553– Fall 2010Semra GÜLEÇ21

22 Thank You & Happy New Year CENG 553– Fall 2010Semra GÜLEÇ22


Download ppt "Recursive SQL Semra GÜLEÇ CENG 553 METU 30.12.2010."

Similar presentations


Ads by Google