Beaucoup d'entre vous ont lu l' article précédent sur la façon dont la visualisation incorrecte pour expliquer le fonctionnement des JOIN peut être déroutante dans certains cas. Les cercles de Venn ne peuvent pas illustrer complètement certains points, par exemple, si les valeurs du tableau sont répétées.
En préparation pour l'enregistrement du sixième numéro du podcast Zinc Prod (où nous avons convenu de discuter de l'article), il semble que j'ai réussi à trouver une version intéressante de la visualisation. En outre, une option similaire a également été proposée dans les commentaires sur l'article d'origine.
Tout le monde est invité sous la coupe
Donc, visualisation. Comme nous l'avons découvert dans les commentaires de l'article précédent, la jointure est plus un produit cartésien qu'une intersection. Si vous regardez comment le produit cartésien est illustré, vous remarquerez qu'il s'agit souvent d'un tableau rectangulaire, où la première relation va le long d'un axe et la seconde le long de l'autre. Ainsi, les éléments du tableau seront toutes des combinaisons de tout.
Il est difficile de le dessiner abstraitement, il devra donc être un exemple.
Disons que nous avons deux tableaux. Dans l'un d'eux
id -- 1 1 6 5
Dans un autre:
id -- 1 1 2 3 5
Désistement immédiat: j'ai appelé le champ le mot "id" juste pour faire court. Beaucoup dans le dernier article étaient indignés, comme c'est répété, disgrâce. Ne t'inquiète pas trop, eh bien
Imaginez, par exemple, qu'il s'agit d'un tableau avec des statistiques quotidiennes, où pour chaque jour et chaque utilisateur il y a des données sur la visite d'un site. En général, pas le point.
Nous voulons donc savoir ce qui se passe avec les différentes jointures de table. Commençons par CROSS JOIN:
CROSS JOIN
SELECT t1.id, t2.id FROM t1 CROSS JOIN t2
CROSS JOIN est toutes les combinaisons possibles qui peuvent être reçues de deux tables.
Cela peut être visualisé comme suit: sur l'axe des x - un tableau, sur l'axe des y - un autre, toutes les cellules à l'intérieur (surlignées en orange) - c'est le résultat

INNER JOIN
INNER JOIN (ou simplement JOIN) est le même CROSS JOIN qui n'a que les éléments qui satisfont la condition écrite dans la construction "ON". Faites attention à la situation lorsque les enregistrements sont dupliqués - il y aura quatre résultats avec les unités.
SELECT t1.id, t2.id FROM t1 INNER JOIN t2 ON t1.id = t2.id

JOINT GAUCHE
LEFT OUTER JOIN (ou simplement LEFT JOIN) est identique à INNER JOIN, mais en plus nous ajoutons null pour les lignes de la première table, pour lesquelles rien n'a été trouvé dans la seconde
SELECT t1.id, t2.id FROM t1 LEFT JOIN t2 ON t1.id = t2.id

JOINDRE À DROITE
RIGHT OUTER JOIN (ou RIGHT JOIN) est le même que LEFT JOIN, juste le contraire. C'est-à-dire c'est INNER JOIN + null pour les lignes de la deuxième table, pour lesquelles rien n'a été trouvé dans la première
SELECT t1.id, t2.id FROM t1 RIGHT JOIN t2 ON t1.id = t2.id

→ Vous pouvez jouer avec les requêtes ici
Conclusions
Cela semble être une simple visualisation. Bien qu'il y ait des limitations: cela montre le cas où l'égalité est écrite en ON, et pas quelque chose de délicat (toute expression booléenne). De plus, le cas où null figure parmi les valeurs de table n'a pas été pris en compte. C'est-à-dire il s'agit encore d'une simplification, mais cela semble s'être avéré meilleur et plus précis que les cercles Venn.
Abonnez-vous à notre podcast Zinc Prod , où nous discutons des bases de données, du développement de logiciels et d'autres choses intéressantes.