5 ms·
Expressive Power of SQL (2003) [pdf]
- domparise 9y agoIsn't SQL Turing complete? So imo the question of "how expressive is SQL" is really just "how expressive can SQL be with reasonably useful performance".
- corpMaverick 9y agoFrom what I can understand (barely) The paper tries to determine if some of the new(2003) SQL3 extensions were really needed. From the answers here https://stackoverflow.com/questions/900055/is-sql-or-even-tsql-turing-complete https://stackoverflow.com/questions/900055/is-sql-or-even-ts... It seems that SQL92 was not Turing complete but it became turing complete later on. Possibly by the same extensions added in SQL3.
- MarkusWinand 9y agoThe mentioned proof is confirming SQL:2003. See also: https://wiki.postgresql.org/wiki/Cyclic_Tag_System https://wiki.postgresql.org/wiki/Cyclic_Tag_System
- lmkg 9y agoI don't think that vanilla SQL defined in older versions of the standard is actually Turing-complete. Most commercial releases included features that made it Turing complete, and my understanding is that the most recent standard includes enough from these features that it's now Turing-complete.
- mhd 9y agoThat reminds me of some horrible datbase designs I've seen, where people too enamored with FSMs/petri nets etc. tried to put the "code" into tables…
- Kenji 9y agoSounds like the stuff my code refactoring nightmares are made of. The opposite case is funny too though: I've seen people who fetched and deserialized the entire SQL table and then manually SELECTed by looping over it with a foreach loop and picking the right record =) They even had their own custom logic to do table JOINs. It involved fetching and deserializing both entire tables with SELECT *, of course. Relational calculus at its finest, me gusta.
- kafkaesq 9y agoIsn't SQL Turing complete? Even if it is -- "turing complete" != "expressive". They're rather different beasties, in fact.
- numbsafari 9y agoInteresting to note that neither BigQuery, nor Apache Presto (and therefore AWS Athena), support recursive CTEs. However, most other DBs do (e.g. Postgres, MS SQL, MySQL 8.0, MariaDB 10.2, Oracle, etc.). Which is disappointing, given how powerful BQ and Presto/Athena are for startups.
- dspillett 9y agoBe careful with CTEs with regard to performance, some SQL DBs can optimise by pushing predicates through to the inner queries, where for some (postgres being the one example that I know but there are probably others) a CTE presents an optimisation fence.
- MarkusWinand 9y agoPostgreSQL being the one noteworthy: http://modern-sql.com/feature/with/performance http://modern-sql.com/feature/with/performance
- nerdponx 9y agoI never understood this. Why can't CTEs be transparently compiled into subqueries?
- dspillett 9y agoThere is plenty of discussion about it out there (search for "postgres cte optimisation fence") including official word. Note though that simply replacing CTE references with appropriate sub-queries simply won't work in the recursive case, and in some cases where a CTE is referred to multiple times the result may be an even less optimal query plan.
- deleted 9y ago[deleted]
- makapuf 9y agoJust so you know, CTE means in this context Common Table Expression. This StackOverflow question [0] can explain a bit about it. Can be used as pseudo-views to clarify sql code. [0] https://stackoverflow.com/questions/4740748/when-to-use-common-table-expression-cte#4740800 https://stackoverflow.com/questions/4740748/when-to-use-comm...
- YeGoblynQueenne 9y ago>> However, logicians proved it long time ago that first-order logic, and thus relational calculus, cannot compare cardinalities of relations, and yet we have a very simple SQL query doing precisely that. I'm not sure what the bit about comparing cardinalities refers to. I think it relates to Trakhtenbrot's theorem, or the Löwenheim–Skolem theorem, but I'd appreciate it if someone clarified this. As it is, my intuition is that the result mentioned is for either finite or infinite relations, or in any case for some broad case of unrestricted sentences (any formula in any language), whereas there are restricted cases where it doesn't hold (sort of like satisfiability). Like I say, if anyone knows what this refers to, please speak up. ____________________ [1] https://en.wikipedia.org/wiki/Trakhtenbrot%27s_theorem https://en.wikipedia.org/wiki/Trakhtenbrot%27s_theorem [2] https://en.wikipedia.org/wiki/L%C3%B6wenheim%E2%80%93Skolem_theorem https://en.wikipedia.org/wiki/L%C3%B6wenheim%E2%80%93Skolem_...