2010-04-25 21 views
-1

Si une jointure interne peut être considérée comme une jointure croisée et ensuite obtenir les enregistrements qui satisfont la condition, alors un LEFT OUTER JOIN peut être considéré comme cela, plus un enregistrement sur la table de gauche qui ne satisfait pas la condition. En d'autres termes, ce n'est pas une jointure croisée qui «passe facilement» sur les enregistrements de gauche (même lorsque la condition n'est pas satisfaite), car l'enregistrement de gauche peut apparaître plusieurs fois (autant de fois qu'il y a d'enregistrements dans la bonne table).Quelle est la différence entre la jointure interne, la jointure croisée et la jointure extérieure gauche?

Donc le LEFT OUTER JOIN est la croix JOIN avec les enregistrements satisfaisant la condition, plus un enregistrement de la table gauche qui ne satisfait pas la condition?

+5

Mon cerveau est inter-joint ... attendre, est-ce même une question? –

Répondre

1

Je ne pense pas qu'il soit correct de dire qu'une jointure externe gauche est: "la jointure croisée avec les enregistrements satsifiant la condition et un enregistrement pour la table gauche qui ne satisfait pas la condition".

Une jointure interne sans condition est identique à une jointure croisée. Une jointure interne sur x est identique à une jointure croisée où x. Mais préférez le premier car il est plus explicite et plus difficile de se tromper. Cependant, avec une jointure externe, vous n'obtenez pas toujours la ligne "qui ne satisfait pas la condition". La différence entre une jointure externe gauche et une jointure interne est:

  • jointure interne: Si la condition de jointure pour une ligne dans la table gauche échoue pour chaque ligne de la table de droite, vous ne recevez pas cette ligne. Jointure externe: Si la condition de jointure pour une ligne de la table de gauche échoue pour chaque ligne de la table de droite, vous obtenez la ligne de la table de gauche avec les valeurs NULL pour les colonnes de la table de droite.

Vous n'obtenez pas les lignes qui correspondent et une ligne qui ne correspond pas - vous obtenez la première ou la seconde situation. Votre déclaration semble suggérer que vous pouvez obtenir les deux.

+0

hm, je pensais que je voulais dire, quand un enregistrement sur la table GAUCHE peut satisfaire la condition, alors ceux-ci entrent dans la table résultante, mais quand un enregistrement dans la table GAUCHE ne le fait pas, alors il obtient une ligne champ étant NULL). Donc c'est/ou, pas les deux ... –

+0

@Jian Lin: Cette déclaration n'est pas exactement correcte: "quand un enregistrement sur la table GAUCHE peut satisfaire la condition, alors ceux-ci entrent dans la table résultante". Vous avez besoin d'une ligne de la table de gauche et d'une ligne de la table de droite qui * ensemble * satisfont la condition. –

+0

hm ... satisfaisant la condition: la condition a presque toujours une valeur de la table LEFT et une de la table RIGHT, non? Même s'il s'agit d'une auto-jointure, ils peuvent toujours être considérés comme des tables gauche et droite ... sauf si vous regardez une jointure qui dit salaire> 10000 alors cela n'implique pas le champ d'une table de droite. –