| It would perhaps be a good thing if one could write SQL clauses in their logical ordering; as [1] explains: * The FROM clause: First, all data sources are defined and joined * The WHERE clause: Then, data is filtered as early as possible * The CONNECT BY clause: Then, data is traversed iteratively or recursively, to produce new tuples * The GROUP BY clause: Then, data is reduced to groups, possibly producing new tuples if grouping functions like ROLLUP(), CUBE(), GROUPING SETS() are used * The HAVING clause: Then, data is filtered again * The SELECT clause: Only now, the projection is evaluated. In case of a SELECT DISTINCT statement, data is further reduced to remove duplicates * The UNION clause: Optionally, the above is repeated for several UNION-connected subqueries. Unless this is a UNION ALL clause, data is further reduced to remove duplicates * The ORDER BY clause: Now, all remaining tuples are ordered * The LIMIT clause: Then, a paginating view is created for the ordered tuples * The FOR clause: Transformation to XML or JSON * The FOR UPDATE clause: Finally, pessimistic locking is applied [1] https://www.jooq.org/doc/latest/manual/sql-building/sql-stat... |