the mother of all query languages sql in modern times
play

The Mother of All Query Languages: SQL in Modern Times - PowerPoint PPT Presentation

The Mother of All Query Languages: SQL in Modern Times @MarkusWinand @ModernSQL http://www.almaden.ibm.com/cs/people/chamberlin/sequel-1974.pdf 1974 1992 SQL-92 Tied to the Relational Idea Relational Data Model Atomic types


  1. The Mother of All Query Languages: SQL in Modern Times @MarkusWinand • @ModernSQL http://www.almaden.ibm.com/cs/people/chamberlin/sequel-1974.pdf

  2. 1974 1992

  3. SQL-92 — Tied to the Relational Idea Relational Data Model ‣ “Atomic” types (domain) Atom image: https://commons.wikimedia.org/wiki/File:Stylised_atom_with_three_Bohr_model_orbits_and_stylised_nucleus.png

  4. SQL-92 — Tied to the Relational Idea Relational Data Model ‣ “Atomic” types (domain) A B C

  5. SQL-92 — Tied to the Relational Idea Relational Data Model ‣ “Atomic” types (domain) ‣ Schema independent of 
 processing purposes ‣ “Normalization” A B C C D B E

  6. SQL-92 — Tied to the Relational Idea Relational Data Model Relational Operations ‣ “Atomic” types (domain) ‣ Transform data for 
 ‣ Schema independent of 
 each particular 
 processing purposes processing purposes ‣ “Normalization” ‣ JOIN , UNION , nesting, … A B C A B C D E C D B E

  7. SQL-92 — Tied to the Relational Idea Relational Data Model Relational Operations ‣ “Atomic” types (domain) ‣ Transform data for 
 ‣ Schema independent of 
 each particular 
 processing purposes processing purposes ‣ “Normalization” ‣ JOIN , UNION , nesting, … A B C D E A B C C D B E A B E

  8. SQL-92 — Tied to the Relational Idea Relational Data Model Relational Operations ‣ “Atomic” types (domain) ‣ Transform data for 
 ‣ Schema independent of 
 each particular 
 processing purposes processing purposes ‣ “Normalization” ‣ JOIN , UNION , nesting, … A B C D E A B C C D B E C D E A B E

  9. SQL-92 — Tied to the Relational Idea Relational Data Model Relational Operations ‣ “Atomic” types (domain) ‣ Transform data for 
 ‣ Schema independent of 
 each particular 
 processing purposes processing purposes ‣ “Normalization” ‣ JOIN , UNION , nesting, … A B C D E A B C C D B E A B E C D E

  10. 1992 1999

  11. https://www.wiscorp.com/DBMS_-_GreatNews-TheRelationalModelIsDead_-_paper_-_sam.pdf

  12. SQL:1999 — Escaping the Relational Cage To say that these SQL:1999 extensions are mere 
 “extended interpretations” of the relational data model 
 is like saying that an intercontinental ballistic missile is 
 merely an “extended interpretation” of a spear. With SQL/99 you can get the best of both worlds and 
 of course, you can get the worst of both worlds. 
 It’s up to the database practitioners to do the right thing. https://www.wiscorp.com/DBMS_-_GreatNews-TheRelationalModelIsDead_-_paper_-_sam.pdf

  13. SQL:1999 — Escaping the Relational Cage Relational Model? ? I was as confused as anyone else Date on Database: Writings 2000-2006 Chris Date

  14. SQL:1999 — Escaping the Relational Cage Relational Model? I was as confused as anyone else ? By the early 1990s, however, 
 I’d seen the light Domains Can Contain Anything! Date on Database: Writings 2000-2006 Chris Date

  15. SQL:1999 — Escaping the Relational Cage Relational Model? ‣ Introduced rich types I was as confused as anyone else ? By the early 1990s, however, 
 I’d seen the light Domains Can Contain Anything! Date on Database: Writings 2000-2006 Chris Date

  16. SQL:1999 — Escaping the Relational Cage A B Relational Model? ‣ Introduced rich types [ , ] ‣ arrays [ ] [] I was as confused as anyone else ? By the early 1990s, however, 
 I’d seen the light Domains Can Contain Anything! Date on Database: Writings 2000-2006 Chris Date

  17. SQL:1999 — Escaping the Relational Cage A B C Relational Model? ‣ Introduced rich types [ , ] C D ‣ arrays [ ] C D ‣ Nested tables (multiset) [] C D I was as confused as anyone else ? By the early 1990s, however, 
 I’d seen the light Domains Can Contain Anything! Date on Database: Writings 2000-2006 Chris Date

  18. SQL:1999 — Escaping the Relational Cage A B C D Relational Model? ‣ Introduced rich types {x: , [ , ] C D y: } ‣ arrays {x: , [ ] C D ‣ Nested tables (multiset) y: } ‣ composite types (objects) {x: , [] C D y: } I was as confused as anyone else ? By the early 1990s, however, 
 I’d seen the light Domains Can Contain Anything! Date on Database: Writings 2000-2006 Chris Date

  19. SQL:1999 — Escaping the Relational Cage Non-Relational Operations Relational Model? ‣ Introduced recursive 
 ‣ Introduced rich types queries that process 
 ‣ arrays their own output ‣ Nested tables (multiset) ‣ Transitive closure ‣ composite types (objects) I was as confused as anyone else ? By the early 1990s, however, 
 I’d seen the light Domains Can Contain Anything! Date on Database: Writings 2000-2006 Chris Date

  20. SQL:1999 — Recursion

  21. SQL:1999 — Recursion

  22. SQL:1999 — Recursion

  23. SQL:1999 — Recursion SELECT t.id, t.parent FROM t WHERE t.id = ? UNION ALL SELECT t.id, t.parent FROM t WHERE t.parent = ?

  24. SQL:1999 — Recursion SELECT t.id, t.parent FROM t WHERE t.id = ? UNION ALL SELECT t.id, t.parent FROM t WHERE t.parent = ?

  25. SQL:1999 — Recursion SELECT t.id, t.parent FROM t WHERE t.id = ? UNION ALL SELECT t.id, t.parent FROM t WHERE t.parent = ?

  26. SQL:1999 — Recursion WITH RECURSIVE prev (id, parent) AS ( SELECT t.id, t.parent FROM t WHERE t.id = ? UNION ALL SELECT t.id, t.parent FROM t JOIN prev ON t.parent = prev.id ) 
 SELECT * FROM prev

  27. SQL:1999 — Recursion 9 1 3 5 7 9 1 3 5 7 9 0 0 0 0 0 1 1 1 1 9 0 0 0 0 0 0 0 0 0 1 2 2 2 2 2 2 2 2 2 MariaDB 5.1 10.2 8.0 MySQL PostgreSQL 8.4 SQLite 3.8.3 [0] DB2 LUW 7.0 Oracle 11gR2 SQL Server 2005 [0] Only for top-level SELECT statements

  28. 1999 2016

  29. SQL:2016 — JSON http://standards.iso.org/ittf/PubliclyAvailableStandards/c067367_ISO_IEC_TR_19075-6_2017.zip

  30. SQL:2016 — JSON [ { "id": 42, id a1 "a1": "foo" }, 42 foo { 43 bar "id": 43, "a1": "bar" } ] http://standards.iso.org/ittf/PubliclyAvailableStandards/c067367_ISO_IEC_TR_19075-6_2017.zip

  31. SQL:2016 — JSON [ SELECT * { FROM tbl "id": 42, "a1": "foo" , JSON_TABLE }, { ( jsoncol "id": 43, "a1": "bar" , '$[*]' } COLUMNS ] ( id INT PATH '$.id' id a1 , a1 VARCHAR(…) PATH '$.a1' 42 foo ) ) r 43 bar

  32. SQL:2016 — JSON [ SELECT * SQL/JSON Path { FROM tbl "id": 42, ‣ Query language to "a1": "foo" select elements from , JSON_TABLE }, a JSON document { ( jsoncol "id": 43, ‣ Defined in the 
 "a1": "bar" , '$[*]' SQL standard } COLUMNS ] ( id INT PATH '$.id' id a1 , a1 VARCHAR(…) PATH '$.a1' 42 foo ) ) r 43 bar

  33. SQL:2016 — JSON [ SELECT * SQL/JSON Path { FROM tbl "id": 42, ‣ Query language to "a1": "foo" select elements from , JSON_TABLE }, a JSON document { ( jsoncol "id": 43, ‣ Defined in the 
 "a1": "bar" , '$[*]' SQL standard } COLUMNS ] ( id INT PATH '$.id' id a1 , a1 VARCHAR(…) PATH '$.a1' 42 foo ) ) r 43 bar

  34. SQL:2016 — JSON 1999 2001 2003 2005 2007 2009 2011 2013 2015 2017 MariaDB MySQL 8.0 PostgreSQL SQLite DB2 LUW Oracle 12cR1 SQL Server

  35. A lot has 
 happened since SQL-92 SQL has evolved 
 beyond the relational idea If you use SQL for CRUD operations only, https://modern-sql.com 
 you are doing it wrong @ModernSQL by @MarkusWinand

Recommend


More recommend