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 ¡

Recommend


More recommend