Comma vs JOIN
A query to retrieve the list of phone numbers for clients who ordered in the last two weeks might be written in a couple of ways. Here are two:
SELECT *
FROM
clients,
orders,
phoneNumbers
WHERE
clients.id = orders.clientId
AND clients.id = phoneNumbers.clientId
AND orderPlaced >= NOW() - INTERVAL 2 WEEK;
SELECT *
FROM
clients
INNER JOIN orders ON clients.id = orders.clientId
INNER JOIN phoneNumbers ON clients.id = phoneNumbers.clientId
WHERE
orderPlaced >= NOW() - INTERVAL 2 WEEK;
Does it make a difference? Not much as written. But you should use the second form, for these reasons:
Readability. Once the
WHERE
clause contains more than two conditions, it becomes tedious to pick out the difference between business logic (only dates in the last two weeks) and relational logic (which fields relate clients to orders). Using theJOIN
syntax with anON
clause makes theWHERE
list shorter, and makes it very easy to see how tables relate to each other.Flexibility. Let's say we need to see all clients even if they don't have a phone number in the system. With the second version, it's easy; just change
INNER JOIN phoneNumbers
toLEFT JOIN phoneNumbers
. Try that with the first version, and recent MySQL versions will issue a syntax error because of the change in precedence between the comma operator and theJOIN
keyword. The solution is to rearrange theFROM
clause or add parentheses to override the precedence, and that quickly becomes frustrating.Portability. If your queries use standard SQL syntax, you will have an easier time switching to a different database should the need ever arise.
See Also
"MySQL joins: ON vs. USING vs. Theta-style" — A blog entry about this topic.
The initial version of this article was copied, with permission, from Comma_vs_JOIN on 2012-10-05.
This page is licensed: CC BY-SA / Gnu FDL
Last updated
Was this helpful?