Outre la brièveté (en favorisant ,
) et la cohérence (favoriser CROSS JOIN
), la seule différence est la préséance.
La virgule a une priorité inférieure à celle des autres jointures.
Par exemple, la forme explicite de
SELECT *
FROM a
CROSS JOIN b
JOIN c ON a.id = c.id
est
SELECT *
FROM (
a
CROSS JOIN b
)
INNER JOIN c ON a.id = c.id
qui est valide.
Alors que la forme explicite de
SELECT *
FROM a,
b
JOIN c ON a.id = c.id
est
SELECT *
FROM a
CROSS JOIN (
b
INNER JOIN c ON a.id = c.id
)
qui n'est pas valide (la clause de jonction fait référence à des données inaccessibles). a
).
Dans votre exemple, il n'y a que deux tables, les deux requêtes sont donc exactement équivalentes.
1 votes
Les produits cartésiens ne sont presque jamais utiles...
12 votes
Mais dans les rares cas où ils le sont, il est bon de savoir comment les écrire.
3 votes
Rarement utile, mais existe probablement au moins une fois dans chaque grand projet.
2 votes
Les jointures croisées ont en fait de nombreuses utilisations, par exemple pour générer des données d'échantillonnage ou dans le traitement de l'information géographique (PostGIS). Je l'utilise beaucoup, par exemple pour calculer les distances (ST_Distance) entre un point et d'autres points en les croisant...
0 votes
C'est une notion intéressante pour annuler les tableaux et les structures dans BigQuery.