I think any time SQL is involved in a hate, you need to hate the
people who designed SQL for trying to make it "user-friendly" and
english-like instead of defining a statement syntax that clearly
distinguished components of a statement and sticking to it.
None of these optional "noise" words and other english-likeness
nonsense.
I'd love to access a database using code like:
(select column-list selector-expression)
(with table selector-expression)
(group column-list query grouping-expression)
(order query order-list)
(join query-list join-expression)
...
So instead of "SELECT crust,count(fillings) AS fillings FROM menu
WHERE cheese='extra' AND topping='liver' GROUP BY crust;"
You get (group ('crust ('fillings (count fillings))) (with 'menu
(select ('crust 'fillings) (and (eq cheese 'extra) (eq topping
'liver)))) ('crust))
Yes, it's longer, but it's unambiguous what it means and it describes
the transaction declaratively, and you're not mixing up the selection
with the grouping and the whole namespace issues about where you can
use "column-name" and where you need "table.column-name" go away,
because they're explicit in the "with" expression or they apply to
the *single* selection in scope.