En SQL, une Jointure est en fait une Intersection? Et c'est aussi un lien ou une “Largeur de l'Union”?
J'ai toujours pensé à une Jointure SQL comme une sorte de lien entre les deux tables.
Par exemple,
select e.name, d.name from employees e, departments d
where employees.deptID = departments.deptID
Dans ce cas, c'est la liaison entre deux tables, pour montrer à chaque employé avec un nom de service au lieu d'un département de l'ID. Et comme une sorte de "lien" ou "Union" sideway".
Mais, après avoir appris jointure interne vs externe rejoindre, il montre qu'un Join (jointure interne (Inner join) est en fait une intersection.
Par exemple, lorsqu'un tableau a l'ID 1, 2, 7, 8, tandis qu'une autre table a l'ID, 7 et 8 seulement, la façon dont nous obtenons l'intersection est:
select * from t1, t2 where t1.ID = t2.ID
pour obtenir les deux enregistrements de "7 et 8". C'est donc une intersection.
Nous avons donc le "Carrefour" de 2 tables. A comparer avec le "Syndicat" de l'opération sur les 2 tableaux. Peuvent Adhérer à être pensé comme un "Carrefour"? Mais que dire de la "liaison" ou "largeur de l'union" aspect de celui-ci?
OriginalL'auteur | 2010-04-24
Vous devez vous connecter pour publier un commentaire.
Ici est un explication visuelle de jointures SQL de Jeff qui peut répondre à certaines de vos questions.
OriginalL'auteur James Kolpack
Vous êtes sur la bonne voie; le nombre de lignes retournées par une
INNER JOIN
sont ceux qui satisfont les conditions de jointure. Mais c'est comme une intersection seulement parce que vous êtes à l'aide de l'égalité dans votre condition de jointure, appliquée à des colonnes de chaque table.Aussi être conscient que
INTERSECTION
est déjà une opération SQL et il a un autre sens -- et ce n'est pas le même queJOIN
.SQL
JOIN
peut produire un nouveau type de ligne, qui a toutes les colonnes des deux tables jointes. Par exemple: col4, col5, et col6 n'existent pas dans la table A, mais elles n'existent pas dans le résultat d'une jointure avec la table B:SQL
INTERSECTION
renvoie des lignes, qui sont communes aux deux tableaux distincts, qui doit déjà avoir la même colonnes.Ce qui arrive à produire le même résultat que la jointure suivante:
Pas toutes les marques de base de données prend en charge l'
INTERSECTION
opérateur.OriginalL'auteur Bill Karwin
Une jointure "liens" ou erm... rejoint les lignes des deux tables. Je pense que c'est ce que vous entendez par "transversale de l'union", même si personnellement, je pense que c'est une terrible façon de l'exprimer. Mais il existe différents types de jointures qui font des choses légèrement différentes:
Ce page sur Jeff Atwood blog décrit d'autres possibilités.
Lin: Si cela rend plus facile pour vous de penser à cela comme une "transversale de l'union", alors très bien, mais l'union a un sens dans SQL et c'est pas ça. Je voudrais éviter d'utiliser ce terme en parlant à d'autres personnes.
OriginalL'auteur Mark Byers
Une Jointure Externe - n'est pas liée à l'Union ou de l'Union de Tous.
Par exemple, 'null' ne se passerait pas comme un résultat de l'Union ou de l'Union de Toutes les opérations, mais elle résulte d'une Jointure Externe.
OriginalL'auteur Manohar Reddy Poreddy
INNER JOIN
traite deuxNULL
s que deux valeurs différentes. Donc, si vous jointure basée sur une colonne nullable, et si les deux tables ontNULL
les valeurs de cette colonne, puisINNER JOIN
ignore ces lignes.Donc, pour bien récupérer toutes les lignes entre les deux tables,
INTERSECT
doit être utilisé.INTERSECT
traite deuxNULL
s la même valeur.Exemple(SQLite):
Créer deux tables avec nullable colonnes:
Insérer
NULL
valeurs:Récupérer commun des lignes à l'aide
INNER JOIN
(Ce qui ne produit pas de sortie):Récupérer commun des lignes à l'aide
INTERSECT
(Ce qui montre bien à la commune de la ligne):Conclusion:
Même si, de nombreuses fois les deux
INTERSECT
etINNER JOIN
peut être utilisé pour obtenir la mêmes résultats, ils ne sont pas les mêmes et doivent être choisis en fonction de la situation.OriginalL'auteur Yogesh Umesh Vaity