Exemple simple : Disons que vous avez un Students
et une Lockers
table. En SQL, la première table que vous spécifiez dans une jointure, Students
est le GAUCHE et la seconde, Lockers
est le DROIT table.
Chaque étudiant peut être assigné à un casier, donc il y a un LockerNumber
dans la colonne Student
table. Plus d'un élève peut potentiellement se trouver dans un seul casier, mais surtout au début de l'année scolaire, il se peut que certains élèves entrants n'aient pas de casier et que certains casiers n'aient pas d'élèves assignés.
Pour les besoins de cet exemple, disons que vous avez 100 étudiants dont 70 ont des casiers. Vous disposez d'un total de 50 casiers 40 d'entre eux ont au moins un étudiant et 10 casiers n'ont aucun étudiant.
INNER JOIN
est équivalent à " montrez-moi tous les étudiants avec des casiers ".
Tout élève sans casier, ou tout casier sans élève est manquant.
Retourne 70 lignes
LEFT OUTER JOIN
serait " Montrez-moi tous les élèves, avec leur casier correspondant s'ils en ont un. ".
Il peut s'agir d'une liste générale d'étudiants ou d'une liste d'étudiants sans casier.
Retourne 100 lignes
RIGHT OUTER JOIN
serait " Montre-moi tous les casiers, et les étudiants qui y sont assignés s'il y en a. ".
Cela pourrait être utilisé pour identifier les casiers qui n'ont pas d'étudiants assignés, ou les casiers qui ont trop d'étudiants.
Retourne 80 lignes (liste de 70 étudiants dans les 40 casiers, plus les 10 casiers sans étudiant)
FULL OUTER JOIN
serait stupide et probablement pas très utile.
Quelque chose comme " Montre-moi tous les étudiants et tous les casiers, et fais-les correspondre où tu peux. "
Retourne 110 lignes (les 100 élèves, y compris ceux qui n'ont pas de casier. Plus les 10 casiers sans étudiant)
CROSS JOIN
est également assez stupide dans ce scénario.
Il n'utilise pas le lien lockernumber
dans la table des étudiants, ce qui fait que l'on se retrouve avec une liste géante de tous les appariements possibles entre étudiants et casiers, qu'ils existent ou non.
Retourne 5000 lignes (100 étudiants x 50 casiers). Cela pourrait être utile (avec un filtrage) comme point de départ pour faire correspondre les nouveaux élèves avec les casiers vides.
63 votes
De Coding Horror Une explication visuelle des jointures SQL
3 votes
Cela dépend aussi de votre niveau de compréhension. Pour quelqu'un comme vous, cet article ne sert à rien, mais pour quelqu'un qui ne comprend pas tout à fait les articulations, c'est assez clair.
6 votes
Il s'agit d'un duplicata de stackoverflow.com/questions/419375/sql-join-differences et sans doute d'autres...
1 votes
Cela m'a beaucoup aidé... le plus simple est de faire des tables de test et de jouer avec elles. =P
1 votes
Duplicata possible de Différence entre jointure interne et externe
0 votes
browse-tutorials.com/tutorial/mysql-joins
1 votes
Duplicata possible de Quelle est la différence entre INNER JOIN, LEFT JOIN, RIGHT JOIN et FULL JOIN ?
1 votes
Duplicata possible de Quelle est la différence entre "INNER JOIN" et "OUTER JOIN" ?
0 votes
Le blog Coding Horror qui utilise des diagrammes de Venn, dont le lien figure dans le premier commentaire très voté, est rejeté par son auteur plus loin dans les commentaires. Les diagrammes de Venn sont trompeurs et mal utilisés dans la discussion sur les jointures internes et externes. Voir mes commentaires sur le lien dupliqué que je donne dans mon premier commentaire.