2010-04-11 4 views

Répondre

7

Le seul type de jointure vous vraiment besoin est LEFT OUTER JOIN. Chaque autre type de jointure peut être réécrit en termes d'une ou plusieurs jointures externes, et éventuellement de filtrage. Alors pourquoi avons-nous besoin de tous les autres? Est-ce juste pour confondre les gens? Ce ne serait pas plus simple s'il n'y avait qu'un seul type de jointure? Vous pouvez également demander: Pourquoi avoir les deux a <= b et b >= a? Ne font-ils pas juste la même chose? Ne pouvons-nous pas nous débarrasser de l'un d'entre eux? Cela simplifierait les choses!

Parfois, il est plus facile d'échanger <= en >= au lieu de permuter les arguments. De même, une jointure à gauche et une jointure à droite sont la même chose juste avec les opérandes permutés. Mais encore une fois, il est pratique d'avoir les deux options au lieu d'obliger les gens à écrire leurs requêtes dans un ordre spécifique.

Une autre chose que vous pourriez poser est la suivante: Dans la logique pourquoi nous avons AND, OR, NOT, XOR, NAND, NOR, etc? Tous ceux-ci peuvent être réécrits en termes de NAND s! Pourquoi ne pas simplement avoir NAND?Eh bien c'est awkward d'écrire un OR en termes de NAND s, et ce n'est pas aussi évident que ce que l'intention est - si vous écrivez OR, les gens savent immédiatement ce que vous voulez dire. Si vous écrivez un tas de NAND s, ce que vous essayez d'atteindre n'est pas évident.

De même, si vous voulez faire a FULL OUTER JOIN b, vous pouvez faire une jointure à gauche et une jointure à droite, supprimer les résultats en double, puis tout regrouper. Mais c'est une douleur et donc il y a un raccourci pour ça.

Quand utilisez-vous chacun d'eux? Voici une règle simplifiée:

  • Si vous voulez toujours une ligne de résultat pour chaque ligne de la table GAUCHE, utilisez une jointure gauche.
  • Si vous voulez toujours une ligne de résultat pour chaque ligne de la table RIGHT, utilisez une RIGHT OUTER JOIN.
  • Si vous voulez toujours une ligne de résultats pour chaque ligne de l'une ou l'autre des tables, utilisez FULL OUTER JOIN.
  • Si vous voulez uniquement une ligne de résultats lorsqu'il y a une ligne dans les deux tables, utilisez une INNER JOIN.
  • Si vous voulez toutes les paires de lignes possibles, une ligne de chaque table, utilisez un CROSS JOIN.
1

inner join - joint les lignes des deux ensembles de match en fonction des critères spécifiés.

outer join - sélectionne l'ensemble d'un ensemble, ainsi que les éléments correspondants ou vides (si non concordants) de l'autre ensemble. Les jointures externes peuvent être left ou right, pour spécifier quel jeu est retourné dans son intégralité.

1

Pour rendre les autres réponses plus claires - VOUS OBTIENNENT DIFFÉRENTS RÉSULTATS en fonction de la jointure que vous choisissez, lorsque les colonnes que vous rejoignez contiennent des valeurs nulles, par exemple. Donc, pour chaque scénario de la vie réelle, il y a une jointure qui lui convient (soit vous voulez les lignes sans les données ou pas dans l'exemple des valeurs nulles).

0

Ma réponse prend 2 tables jointes sur une seule clé:

  • INNER JOIN - obtenir les résultats qui sont deux tables de jointure (selon la règle de jointure)
  • FULL OUTER JOIN - obtenir tous les résultats de à la fois la table (produit cartésien)
  • LEFT OUTER JOIN - obtenir tous les résultats de la table gauche et les résultats correspondants de la droite

Vous pouvez ajouter des clauses WHERE afin de limiter davantage les résultats.

Utilisez-les afin d'obtenir seulement ce que vous voulez pour obtenir.

Questions connexes