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.