Mysql
 sql >> Base de données >  >> RDS >> Mysql

sql joint comme diagramme de venn

Je suis d'accord avec Cade sur les limites des diagrammes de Venn ici. Une représentation visuelle plus pertinente pourrait être celle-ci.

Tableaux

SELECT A.Color, B.Color FROM A CROSS JOIN B SQL Fiddle

La jointure croisée (ou produit cartésien) produit un résultat avec chaque combinaison des lignes des deux tables. Chaque tableau comporte 4 lignes, ce qui produit 16 lignes dans le résultat.

SELECT A.Colour, B.Color FROM A INNER JOIN B ON A.Color =B.Color Violon SQL

La jointure interne renvoie logiquement toutes les lignes de la jointure croisée qui correspondent à la condition de jointure. Dans ce cas, cinq oui.

SELECT A.Colour, B.Color FROM A INNER JOIN B ON A.Color NOT IN ('Green','Blue') Violon SQL

La condition de jointure interne ne doit pas nécessairement être une condition d'égalité et elle n'a pas besoin de référencer les colonnes des deux (ou même de l'une ou l'autre) des tables. Évaluation de A.Colour NOT IN ('Green','Blue') sur chaque ligne des retours de jointure croisée.

Une condition de jointure interne de 1=1 serait évalué à true pour chaque ligne de la jointure croisée afin que les deux soient équivalents (SQL Fiddle ).

SÉLECTIONNER A.Couleur, B.Couleur À PARTIR D'UNE JOINTURE EXTÉRIEURE GAUCHE B SUR A.Couleur =B.Couleur Violon SQL

Les jointures externes sont logiquement évaluées de la même manière que les jointures internes, sauf que si une ligne de la table de gauche (pour une jointure de gauche) ne se joint à aucune ligne de la table de droite, elle est conservée dans le résultat avec NULL valeurs pour les colonnes de droite.

SELECT A.Colour, B.Color FROM A LEFT OUTER JOIN B ON A.Color =B.Color WHERE B.Colour IS NULL Violon SQL

Cela limite simplement le résultat précédent pour ne renvoyer que les lignes où B.Colour IS NULL . Dans ce cas particulier, ce seront les lignes qui ont été conservées car elles n'avaient pas de correspondance dans la table de droite et la requête renvoie la seule ligne rouge sans correspondance dans la table B . C'est ce qu'on appelle une anti-semi jointure.

Il est important de sélectionner une colonne pour le IS NULL test qui n'accepte pas la valeur NULL ou pour lequel la condition de jointure garantit que tout NULL les valeurs seront exclues pour que ce modèle fonctionne correctement et évite de simplement ramener les lignes qui ont un NULL valeur pour cette colonne en plus des lignes sans correspondance.

SÉLECTIONNER A.Couleur, B.Couleur À PARTIR D'UNE JOINTURE EXTÉRIEURE DROITE B SUR A.Couleur =B.Couleur Violon SQL

Les jointures externes droites agissent de la même manière que les jointures externes gauches, sauf qu'elles conservent les lignes non correspondantes de la table de droite et que la valeur null étend les colonnes de gauche.

SÉLECTIONNER A.Couleur, B.Couleur À PARTIR D'UNE JOINTURE EXTÉRIEURE COMPLÈTE B SUR A.Couleur =B.Couleur Violon SQL

Les jointures externes complètes combinent le comportement des jointures gauche et droite et préservent les lignes non correspondantes des tables de gauche et de droite.