Pour compléter les réponses déjà données :
select * from A, B
C'était la seule façon de procéder avant l'adoption de la norme SQL de 1992. Ainsi, si vous vouliez une jointure interne, vous deviez utiliser la méthode WHERE
pour les critères :
select * from A, B
where A.x = B.y;
L'un des problèmes de cette syntaxe est qu'il n'existe pas de norme pour les jointures externes. Un autre problème est que cette syntaxe devient illisible avec de nombreuses tables et qu'elle est donc sujette à des erreurs et moins facile à maintenir.
select * from A, B, C, D
where B.id = C.id_b
and C.id_d = D.id;
Il s'agit ici d'une jonction croisée entre A et B/C/D. Fait-il exprès ou non ? Peut-être que le programmeur a simplement oublié le and B.id = A.id_b
(ou autre), ou peut-être que cette ligne a été supprimée par erreur, et peut-être encore qu'il s'agissait en réalité d'une jointure croisée. Qui pourrait le dire ?
Voici la même chose avec des jointures explicites
select *
from A
cross join B
inner join C on C.id_b = B.id
inner join D on D.id = C.id_d;
Il n'y a plus de doute sur les intentions des programmeurs.
L'ancienne syntaxe séparée par des virgules a été remplacée pour de bonnes raisons et ne doit plus être utilisée.
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.