recursion how expressive is sql
play

recursion How expressive is SQL? Full programming languages can - PowerPoint PPT Presentation

recursion How expressive is SQL? Full programming languages can express all computable functions (C, Java, etc) Can SQL express all computable queries? A: YES B: NO 2 How expressive is SQL? flight from to SD LA SD SF LA


  1. recursion ¡

  2. How expressive is SQL? • Full programming languages can express all computable functions (C, Java, etc) Can SQL express all computable queries? A: YES B: NO 2 ¡

  3. How expressive is SQL? flight from to SD LA SD SF LA NY … … Can SQL express the following query: “Is there a way to get from City1 to City2?” A: YES B: NO 3 ¡

  4. Easier “ Is there a way to get from City1 to City2 by a direct flight? ” City1 City2 select * from flight where from = ‘ City1 ’ and to = ‘ City2 ’

  5. Easier “ Is there a way to get from City1 to City2 with at most one stopovers? ” City1 City2 select * from flight where from = ‘ City1 ’ and to = ‘ City2 ’ OR select x.from, y.to x y from flight x, flight y where x.from = ‘ City1 ’ and City1 City2 x.to = y.from and y.to = ‘ City2 ’

  6. Easier “ Is there a way to get from City1 to City2 with at most two stopovers? ” City1 City2 select * from flight where from = ‘ City1 ’ and to = ‘ City2 ’ OR select x.from, y.to x y from flight x, flight y where x.from = ‘ City1 ’ and City1 City2 x.to = y.from and y.to = ‘ City2 ’ OR y select x.from, z.to z x from flight x, flight y, flight z where x.from = ‘ City1 ’ and x.to = y.from City1 City2 and y.to = z.from and z.to = ‘ City2 ’

  7. Easier “ Is there a way to get from City1 to City2 with at most k stopovers? ” … City1 City2 Need k+1 tuple variables!

  8. Now “ Is there a way to get from City1 to City2 with any number of stopovers? ” Cannot do in basic SQL!

  9. Similar Examples • Parts-components relation: “ Find all subparts of some given part A ” • Parent/child relation: “ Find all of John ’ s descendants ” 9 ¡

  10. More general: Transitive closure of graph b Find the pairs of nodes e d <x, y> that are connected a by some directed path c A B a b G A B a d a b a e c a b d b c b e … … … … 10 ¡

  11. Computing transitive closure T of G “ Find the pairs of nodes <a,b> that are connected in G ” Same as: “ find pairs of nodes <a,b> at distance 1 ” UNION “ find pairs of nodes <a,b> at distance at most 2 ” UNION ……….. “ find pairs of nodes <a,b> at distance at most k ” UNION ……….. When to stop? At some point, no new nodes are added. Distance cannot be larger than total number of nodes in G. 11 ¡

  12. Example b e d a c 12 ¡

  13. Example b e d a c Distance 1 13 ¡

  14. Example b e d a c Distance ≤ 2 14 ¡

  15. Example b e d a c Distance ≤ 3 15 ¡

  16. Algorithm Denote by T k the pairs of nodes at distance at most k T 1 : “ find pairs of nodes <a,b> at distance 1 ” select * from G T k : “ find the pairs of nodes <a,b> at distance at most k ” T k-1 G T k-1 a b OR a b ( select * from T k-1 ) union ( select x.A, y.B from G x, T k-1 y where x.B = y.A)

  17. Example b e d a c T 1 17 ¡

  18. Example b e d a c T 2 18 ¡

  19. Example b e d a c T 3 19 ¡

  20. One Solution Add recursion to SQL (Not part of the standard) create recursive view T as Semantics: 1. Start with empty T ( select * from G) 2. While T changes union {evaluate view with current T; ( select x.A, y.B union result with T } from G x, T y Note: This must terminate, since where x.B = y.A) there are finitely many tuples one can add to T (if no new values are created) 20 ¡

  21. One Solution Add recursion to SQL Alternative formulation: with recursive T as ( select * from G) union ( select x.A, y.B from G x, T y where x.B = y.A) select * from T ; 21 ¡

  22. Another Example frequents drinker bar Friends : Drinkers who frequent the same bar Find transitive closure of Friends create recursive view T as ( select f1.drinker as drinker1, f2.drinker as drinker2 from frequents f1, frequents f2 where f1.bar = f2.bar) union ( select t1.drinker1, f2.drinker as drinker2 from T t1, frequents f1, frequents f2 where t1.drinker2 = f1.drinker and f1.bar = f2.bar) 22 ¡

  23. Problematic example create ¡recursive ¡view ¡ T ¡ as ¡ R A ( select ¡ ¡A, ¡ ¡0 ¡as ¡N ¡ from ¡R) ¡ union ¡ ( select ¡A, ¡N+1 ¡ as ¡N ¡ from ¡T) ¡ • Never terminates • Arithmetic in selects, aggregate functions are forbidden in recursive definitions 23 ¡

  24. Another Solution Embedded SQL Powerful way to overcome SQL limitations SQL Requests Answers Client: DB Server full programming language (Java, C+, etc) 24 ¡

  25. Transitive Closure in embedded SQL T := G Δ := G while Δ ≠ ∅ do { T old = T T := ( select * from T) union ( select x.A, y.B from G x, T y where x.B = y.A) Δ := T – T old } Output T <pseudo-code> 25 ¡

  26. Example b e d a c T 1 and Δ 1 26 ¡

  27. Example b e d a c T 2 and Δ 2 27 ¡

  28. Example b e d a c T 3 and Δ 3 28 ¡

  29. Example b e d a c T 4 = T 3 and Δ 4 = ∅ : Stop! 29 ¡

  30. Algorithm revisited T := G Δ := G while Δ ≠ ∅ do { T old = T T := ( select * from T) union ( select x.A, y.B from G x, T y where x.B = y.A) Δ := T – T old } Output T Converges in diameter(G) iterations (maximum distance between two nodes in G) <pseudo-code> 30 ¡

  31. Optimization: “semi-naïve” evaluation Use at least one new tuple (from Δ ) every time! T := G Δ := G while Δ ≠ Φ do { T old = T T := ( select * from T) union ( select x.A, y.B from G x, Δ y where x.B = y.A) Δ := T – T old } Output T <pseudo-code> 31 ¡

  32. Example b e d a c T 1 and Δ 1 32 ¡

  33. Example b e d a c T 1 and Δ 2 No longer recompute <c,b> but recompute <c,d> 33 ¡

  34. Example b e d a c T 1 and Δ 3 No longer recompute <a,d> but recompute <c,e> 34 ¡

  35. Example b e d a c T 4 = T 3 and Δ 4 = ∅ : Stop! 35 ¡

  36. Faster Convergence (double recursion) T := G Δ := G while Δ ≠ ∅ do { T old = T T := ( select * from T) union ( select x.A, y.B from T x, T y where x.B = y.A) Δ := T – T old } Output T Converges in log(diameter(G)) iterations <pseudo-code> 36 ¡

  37. Example Focus on computing <a 0 ,a 8 > a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 37 ¡

  38. Example Focus on computing <a 0 ,a 8 > a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 38 ¡

  39. Example Focus on computing <a 0 ,a 8 > a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 39 ¡

  40. Example Focus on computing <a 0 ,a 8 > a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 40 ¡

  41. Example Compare to linear recursion (first program) a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 41 ¡

  42. Example Compare to linear recursion (first program) a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 42 ¡

  43. Example Compare to linear recursion (first program) a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 43 ¡

  44. Example Compare to linear recursion (first program) a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 44 ¡

  45. Example Compare to linear recursion (first program) a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 45 ¡

  46. Example Compare to linear recursion (first program) a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 46 ¡

  47. Example Compare to linear recursion (first program) a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 47 ¡

  48. Example Compare to linear recursion (first program) a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 48 ¡

  49. Example Compare to linear recursion (first program) a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 49 ¡

  50. Optimization: “semi-naïve” evaluation Again, use at least one new tuple (from Δ ) every time! T := G Δ := G while Δ ≠ ∅ do { T old = T T := ( select * from T) union ( select x.A, y.B from Δ x, T y where x.B = y.A) union ( select x.A, y.B from T x, Δ y where x.B = y.A) Δ := T – T old } Output T <pseudo-code> 50 ¡

  51. JDBC • Java Database Connectivity • Allows SQL to be executed from within Java programs • Similar to embedded SQL with the following difference: - Embedded SQL: SQL processed at compile time - JDBC: SQL interpreted at run-time 51 ¡

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend