Complete SQL novice, trying to make sense of the following TPC-H query:
select l_orderkey, sum(l_extendedprice * (1 - l_discount)) as revenue, o_orderdate, o_shippriority from customer, orders, lineitem where c_mktsegment = ':1' and c_custkey = o_custkey and l_orderkey = o_orderkey and o_orderdate < date ':2' and l_shipdate > date ':2' group by l_orderkey, o_orderdate, o_shippriority order by revenue desc, o_orderdate; :n 10
I was under the impression that you can only select from different tables after a join. However I don’t see any joins here. Is it implicit?
Advertisement
Answer
The comma is archaic syntax for the CROSS JOIN
. It is essentially the same thing as a Cartesian product (although the scoping rules in the FROM
clause are a bit different).
The filter conditions in the WHERE
clause happen to turn this Cartesian product into an inner join, but that is a function of the filtering after the FROM
clasue.
You should just forget that you every learned that this syntax works. Use explicit JOIN
syntax, even for CROSS JOIN
. JOIN
has been part of SQL syntax — literally — for decades and it was added for very good reasons.