On Wed, 18 May 2016 10:41:21 +1000 "dandl" <david at andl.org> wrote:
> > You lost me at "subset S of N tuples". Which relational operator > > takes N as an argument? > > Restriction determines whether a tuple should be included or not; you > also need cardinality and less than (for comparing members). Restriction is applied to the values of the tuple. The number of tuples is not a value of the tuple. Neither of us is stupid, David. I've boiled this down to something very simple. If you look at it algebraically, I think you'll come to the same conclusion I have. I wouldn't persist except that you're worth convincing. Andl holds promise, and seeks higher ground than SQL holds. Insofar as possible, if I can I want to help you get it right. > For this query: calculate the average of that set of numbers after > excluding the 2 largest and 2 smallest values. Again, a pure set > operation. > > A reasonable solution would be to use two subqueries with ORDER BY > ASC/DESC and LIMIT 2, followed by an aggregation. Sadly, no. If we're talking about a "pure set operation", and the set is {1, 1, 2}, the "two smallest" is {1, 2} but LIMIT 2 would yield {1, 1}. Here again, my putative nth() function *does* give the right answer, simply because it's a function of the values, and not of the number of values. > > There's no debate about the relational operators. By which I meant: there's no debate about what they do. > You might be surprised to learn that there is considerable academic > uncertainty as to exactly which operators should be included. There's no uncertainty. Some operators are defined in terms of others. No suprise: even under De Morgan you don't need OR if you have NOT and AND. The redundancy makes the language more expressive. LIMIT doesn't belong in this part of the discussion, btw, because it is not defined relationally. > For example, is CTE RECURSIVE relational, or not? http://wiki.epfl.ch/provenance2011/documents/foundations%20of%20databases-abiteboul-1995.pdf Cf. Chapter 14. Adding recursion changes the language. It adds power; if memory serves permits answering second-order queries. > What about LEAD and LAG in the windowing functions? What about string > concatenation as an aggregation operator? AFAIK there's no debate about those, either. They can be expressed in terms of simpler operations, and exist for convenience, such as it is. --jkl