Quelle est la différence entre la Gauche, la Droite, Intérieure et Extérieure, des Jointures?
Je me demande comment différencier ces différentes jointures ...
- de Codage d'Horreur Une Explication Visuelle de Jointures SQL
- Dépend aussi de votre niveau de compréhension, pour quelqu'un comme vous que l'article ne fait rien, mais pour quelqu'un qui peut-être ne pas comprendre pleinement les jointures c'est assez clair
- C'est un double de la stackoverflow.com/questions/419375/sql-join-differences et sans doute d'autres...
- Cela m'a beaucoup aidé... plus simple est de faire le test de tables et de jouer avec eux. =P
- double possible de la Différence entre l'intérieur et l'extérieur joindre
- browse-tutorials.com/tutorial/mysql-joins
- double possible de What la différence entre les INNER JOIN, LEFT JOIN, RIGHT JOIN et FULL JOIN?
- Double Possible de Quelle est la différence entre "INNER JOIN" et "OUTER JOIN"?
Vous devez vous connecter pour publier un commentaire.
Exemple Simple: disons que vous avez un
Students
table, et unLockers
table. En SQL, la première table que vous spécifiez dans une jointure,Students
, est le GAUCHE table, et le second,Lockers
, est le DROIT table.Chaque élève peut être attribué à un casier, il y a donc un
LockerNumber
colonne dans laStudent
table. Plus d'un étudiant qui pourrait potentiellement être en un seul casier, mais surtout au début de l'année scolaire, vous pouvez avoir des étudiants entrants sans casiers et certains casiers qui n'ont pas d'élèves affectés.Pour les besoins de cet exemple, disons que vous avez 100 étudiants, 70 ont des casiers. Vous avez un total de 50 casiers, dont 40 ont au moins 1 étudiant et 10 casiers n'ont aucun étudiant.
INNER JOIN est équivalent à "me montrer tous les élèves avec des casiers".
Tous les élèves sans les casiers, ou tout casiers sans les étudiants sont manquants.
Retourne 70 lignes
JOINTURE EXTERNE GAUCHE serait "me montrer tous les élèves, avec leurs correspondants locker si ils ont un".
Cela peut être une liste d'étudiants, ou pourrait être utilisé pour identifier les élèves ayant pas de casier.
Renvoie 100 lignes
JOINTURE EXTERNE DROITE serait "me montrer tous les casiers, et les étudiants affectés à eux s'il y a des".
Cela pourrait être utilisé pour identifier les casiers qui n'ont pas d'élèves affectés, ou des casiers qui ont trop d'étudiants.
Retourne 80 lignes (liste de 70 élèves dans les 40 casiers, plus de 10 casiers avec aucun étudiant)
JOINTURE EXTERNE COMPLÈTE serait stupide et probablement pas beaucoup d'utilisation.
Quelque chose comme "me montrer tous les étudiants et tous les casiers, et de trouver où vous pouvez"
Retourne 110 lignes (tous les 100 élèves, y compris ceux sans casiers. Plus de 10 casiers avec aucun étudiant)
JOINTURE CROISÉE est également assez stupide dans ce scénario.
Il n'utilise pas liés
lockernumber
champ dans la table étudiants, donc en gros, vous avez jusqu'à la fin avec un grand géant de la liste de tous les élèves-casier de couplage, si oui ou non il existe réellement.Retourne 5000 lignes (100 étudiants x 50 casiers). Pourrait être utile (avec filtre) comme un point de départ pour faire correspondre les nouveaux étudiants avec le vide des casiers.
JOIN
,CROSS JOIN
, etINNER JOIN
sont syntaxique équivalents (ils peuvent se remplacer les uns les autres).NATURAL JOIN
pour compléter la liste 🙂SELECT * FROM students RIGHT OUTER JOIN lockers...
aboutirait à un résultat différent queSELECT * FROM lockers RIGHT OUTER JOIN students...
. Grande réponse, mais j'aimerais le voir mis à jour complète de laSQL
requêtesIl existe trois types de base de jointure:
INNER
rejoindre compare les deux tables et retourne uniquement les résultats, si une correspondance existe. Les enregistrements à partir de la 1ère table sont dupliqués lors qu'ils correspondent à plusieurs résultats dans le 2ème. Les jointures internes ont tendance à faire des jeux de résultats plus petits, mais parce que les enregistrements peuvent être dupliqués, ce n'est pas garanti.CROSS
rejoindre la comparaison de deux tables et de retourner toutes les combinaisons possibles de lignes des deux tables. Vous pouvez obtenir beaucoup de résultats de ce type de jointure qui pourrait même ne pas être significative, donc à utiliser avec précaution.OUTER
rejoindre compare les deux tables et renvoie des données lorsqu'un match est disponible ou les valeurs NULL sinon. Comme avec une jointure INTERNE, ce seront les doublons dans une table lorsqu'elle correspond à plusieurs enregistrements dans l'autre table. Les jointures EXTERNES ont tendance à faire des jeux de résultats plus grands, car ils ne sont pas par eux-mêmes supprimer tous les enregistrements de l'ensemble. Vous devez également qualifier une jointure EXTERNE pour déterminer quand et où pour ajouter les valeurs NULL:LEFT
moyens de conserver tous les registres de la 1ère table n'importe quoi, et insérer des valeurs NULL lors de la 2ème tableau ne correspond pas.RIGHT
signifie le contraire: conserver tous les enregistrements à partir de la 2ème table n'importe quoi, et insérer les valeurs NULL, il whent 1er tableau ne correspond pas.FULL
les moyens de maintenir tous les enregistrements des deux tables, et d'insérer la valeur NULL dans la table si il n'y a pas de match.Souvent que vous verrez la
OUTER
mot-clé omis de la syntaxe. Au lieu de cela, il va juste être "LEFT JOIN", "RIGHT JOIN", ou "FULL JOIN". C'est à cause INTÉRIEURE et les jointures CROISÉES ont pas de signification à l'égard de la GAUCHE, la DROITE, ou COMPLET, et si ceux-ci sont suffisants par eux-mêmes sans ambiguïté indiquer une jointure EXTERNE.Voici un exemple de lorsque vous souhaitez utiliser chaque type:
INNER
: Vous souhaitez retourner tous les enregistrements de la "Facture" de la table, avec leur correspondant "InvoiceLines". Cela suppose que chaque Facture valide en ont au moins une ligne.OUTER
: Vous souhaitez renvoyer tous "InvoiceLines" enregistre pour une Facture en particulier, avec leur correspondant "InventoryItem" des dossiers. C'est une entreprise qui vend aussi du service, tels que tous les InvoiceLines aura un IventoryItem.CROSS
: Vous avez un chiffres de la table avec 10 lignes, chacune ayant des valeurs de '0' à '9'. Vous souhaitez créer une plage de dates table pour se joindre à l'encontre, de sorte que vous vous retrouvez avec un enregistrement pour chaque jour au sein de la gamme. Par la CROIX-joindre à cette table avec elle-même à plusieurs reprises, vous pouvez créer autant de nombres entiers consécutifs que vous en avez besoin (étant donné que vous commencez à 10 à la 1ère puissance, chaque jointure ajoute 1 à l'exposant). Ensuite, utilisez la DATEADD() fonction pour ajouter les valeurs de votre date de base pour la plage.Il y a seulement 4 types:
NULL
pour chaque valeur dans le tableau de droite. Cela signifie que chaque ligne de la table sur la gauche apparaissent au moins une fois dans la sortie.Un "cross join" ou "cartésien rejoindre" est tout simplement une jointure interne, pour laquelle aucune des conditions de jointure ont été spécifiés, de sorte que toutes les paires de lignes de sortie.
Grâce à RusselH pour souligner COMPLET joint, que j'avais omis.
JOINTURES SQL différence:
Très simple à retenir :
INNER JOIN
afficher uniquement les enregistrements commun aux deux tables.OUTER JOIN
tout le contenu de ces deux tables sont fusionnés ensemble, soit qu'ils correspondent ou non.LEFT JOIN
est la même queLEFT OUTER JOIN
- (Sélectionner les enregistrements à partir de la première (la plus à gauche) de la table de correspondance avec à droite les enregistrements de la table.)RIGHT JOIN
est la même queRIGHT OUTER JOIN
- (Sélectionner les enregistrements à partir de la deuxième (la plus à droite) de la table de correspondance avec à gauche les enregistrements de la table.)Découvrez Join (SQL) sur Wikipedia
gauche /droite (extérieur) rejoignez - compte tenu deux tables renvoie toutes les lignes qui existent en soit la gauche ou la droite de la table de votre jointure, plus les lignes de l'autre côté sera retourné lorsque la clause de jointure est un match ou la valeur null sera retourné pour ces colonnes
Externe complète Donné deux tables retourne toutes les lignes, et sera de retour null lorsque soit la gauche ou la colonne de droite n'est pas là
De la croix-Jointures - Cartésien joindre et peut être dangereux si ce n'est pas soigneusement
LEFT JOIN
etRIGHT JOIN
sont des types deOUTER JOIN
s.INNER JOIN
est la valeur par défaut -- les lignes des deux tables doivent correspondre à la condition de jointure.Inner join: affiche Seulement les lignes, quand est-il des données de deux tables.
Jointure externe: (gauche/droite): Afficher le tous les résultats de la gauche /droite table avec appariés en ligne(s), si il existe ou pas.
Le rendre plus visible pourrait aider. Un exemple:
Tableau 1:
ID_STUDENT STUDENT_NAME
Tableau 2:
ID_STUDENT CASIER
Ce que j'obtiens quand je fais:
Au premier abord, vous devez comprendre ce que le joint n'? Nous connecter plusieurs table et d'obtenir des résultats spécifiques à des tables jointes. Le moyen le plus simple pour ce faire est jointure croisée.
Permet de dire tableA a deux colonnes A et B. Et tableB a trois colonnes C et D.
Si l'on applique la croix rejoindre, il va produire beaucoup de sens ligne. Ensuite, nous avons pour correspondre à l'aide de la clé primaire pour obtenir des données réelles.
Gauche: il sera de retour tous les enregistrements de la table de gauche et correspondait à enregistrer à partir de la table de droite.
Droite: il sera de retour face à la jointure Gauche. Il sera de retour tous les enregistrements de la table de droite et de dossiers appariés à partir de la table de gauche.
Intérieure: C'est comme intersection. Il sera de retour n'a d'égale que les enregistrements de la table.
Extérieur: Et c'est comme l'union. Il sera de retour tous les enregistrements disponibles de table.
À certains moments, nous n'avons pas besoin de toutes les données, et aussi nous avons besoin seulement commun de données ou de documents. nous pouvons facilement le faire en utilisant ces méthodes de jointure. Souvenez-vous de gauche et de droite se joindre à nous sont jointure externe.
Vous pouvez obtenir tous les enregistrements seulement à l'aide de la croix rejoindre. Mais il pourrait être coûteux quand il s'agit de plusieurs millions d'enregistrements. Afin de faire simple en utilisant à gauche, à droite, interne ou externe de la rejoindre.
grâce