Quelle est la différence entre CROSS JOIN
et INNER JOIN
?
CROSS JOIN:
SELECT
Movies.CustomerID, Movies.Movie, Customers.Age,
Customers.Gender, Customers.[Education Level],
Customers.[Internet Connection], Customers.[Marital Status],
FROM
Customers
CROSS JOIN
Movies
JOINTURE INTERNE:
SELECT
Movies.CustomerID, Movies.Movie, Customers.Age,
Customers.Gender, Customers.[Education Level],
Customers.[Internet Connection], Customers.[Marital Status]
FROM
Customers
INNER JOIN
Movies ON Customers.CustomerID = Movies.CustomerID
Lequel est le meilleur et pourquoi devrais-je utiliser l'un ou l'autre?
sql
sql-server
sql-server-2008
tsql
cross-join
PrixCheaperton
la source
la source
CROSS JOIN
entraînera toutes les combinaisons possibles des tableaux. Par exemple, Table1 avec 100 lignes et Table2 avec 100 lignes donneront 10000 enregistrements.x CROSS JOIN y
isx INNER JOIN y ON 1=1
Réponses:
La jointure croisée ne combine pas les lignes, si vous avez 100 lignes dans chaque table avec une correspondance de 1 à 1, vous obtenez 10 000 résultats, Innerjoin ne renverra que 100 lignes dans la même situation.
Ces 2 exemples renverront le même résultat:
Jointure croisée
Jointure interne
Utilisez la dernière méthode
la source
select * from table1 cross join table2 where table1.id = table2.fk_id
commeselect * from table1, table2 where table1.id = table2.fk_id
(en remplaçantcross join
par a,
)Voici le meilleur exemple de jointure croisée et de jointure interne.
Considérez les tableaux suivants
TABLE :
Teacher
TABLE :
Student
1. JOINTURE INTÉRIEURE
La jointure interne sélectionne les lignes qui satisfont à la fois la table .
Considérez que nous devons trouver les enseignants qui sont des enseignants de classe et leurs élèves correspondants. Dans cette condition, nous devons appliquer
JOIN
ouINNER JOIN
et allonsRequete
Résultat
2. JOINTURE CROISÉE
La jointure croisée sélectionne toutes les lignes de la première table et toutes les lignes de la deuxième table et s'affiche comme un produit cartésien, c'est-à-dire avec toutes les possibilités
Considérez que nous devons trouver tous les enseignants de l'école et les étudiants indépendamment des enseignants de la classe, nous devons postuler
CROSS JOIN
.Requete
Résultat
la source
Cross Join
, pensez-vous qu'il ne renvoie pas toutes les lignes à moins qu'uneWhere
clause ne soit donnée? D'après vos commentaires, il y a plus de chances pour un débutant d'être confus !!! @philipxyCROSS JOIN = (INNER) JOIN = virgule (",")
TL; DR La seule différence entre SQL CROSS JOIN, (INNER) JOIN et virgule (",") (outre la virgule ayant une priorité inférieure pour l'ordre d'évaluation) est que (INNER) JOIN a un ON alors que CROSS JOIN et la virgule ne le font pas.
Concernant les produits intermédiaires
Tous trois produisent un produit «cartésien» relationnel conceptuel intermédiaire de style SQL, également appelé jointure croisée, de toutes les combinaisons possibles d'une ligne de chaque table. C'est ON et / ou WHERE qui réduisent le nombre de lignes. Violon SQL
Le standard SQL définit <comma> via produit (7.5 1.b.ii), <cross join> via <comma> (7.7 1.a) et JOIN ON <condition de recherche> via <comma> plus WHERE (7.7 1.b ).
Comme le dit Wikipedia:
Re OUTER JOIN et en utilisant ON vs WHERE dans les voir Conditions de jointure LEFT JOIN (OUTER JOIN) vs INNER JOIN .
Pourquoi comparer des colonnes entre des tables?
Lorsqu'il n'y a pas de lignes en double:
Chaque table contient les lignes qui constituent une déclaration vraie à partir d'un certain modèle de déclaration de remplissage [named-] blanks. (Il fait une proposition vraie à partir de - satisfait - un certain prédicat (caractéristique) .)
Une table de base contient les lignes qui font une vraie déclaration à partir d'un modèle de déclaration donné par DBA:
Le produit intermédiaire d'une jointure contient les lignes qui font une déclaration vraie à partir du ET des modèles de ses opérandes:
ON & WHERE les conditions sont ET ajoutées pour donner un modèle supplémentaire. La valeur correspond à nouveau aux lignes qui satisfont ce modèle:
En particulier, la comparaison des colonnes pour l'égalité (SQL) entre les tables signifie que les lignes conservées du produit à partir des parties du modèle des tables jointes ont la même valeur (non NULL) pour ces colonnes. C'est juste une coïncidence que beaucoup de lignes sont généralement supprimées par des comparaisons d'égalité entre les tables - ce qui est nécessaire et suffisant est de caractériser les lignes que vous voulez.
Écrivez simplement SQL pour le modèle pour les lignes que vous voulez!
Concernant la signification des requêtes (et des tables par rapport aux conditions), voir:
Comment obtenir des données correspondantes d'une autre table SQL pour deux colonnes différentes: jointure interne et / ou union?
Existe-t-il une règle empirique pour construire une requête SQL à partir d'une description lisible par l'homme?
Surcharge de "jointure croisée"
Malheureusement, le terme «jointure croisée» est utilisé pour:
Ces différentes significations se confondent. (Par exemple, comme dans d'autres réponses et commentaires ici.)
Utilisation de CROSS JOIN vs (INNER) JOIN vs virgule
La convention commune est:
En règle générale, les conditions ne figurant pas sur des paires de tables sont également conservées pour un WHERE. Mais ils devront peut-être être placés dans un (n INNER) JOIN ON pour obtenir les lignes appropriées pour l'argument de RIGHT, LEFT ou FULL (OUTER) JOIN.
Re "Ne pas utiliser de virgule" Le mélange de virgule avec JOIN explicite peut induire en erreur car la virgule a une priorité inférieure. Mais étant donné le rôle du produit intermédiaire dans le sens de CROSS JOIN, (INNER) JOIN et virgule, les arguments pour la convention ci-dessus de ne pas l'utiliser du tout sont fragiles. Un CROSS JOIN ou une virgule est juste comme un (INNER) JOIN qui est sur une condition TRUE. Un produit intermédiaire, ON et WHERE introduisent tous un ET dans le prédicat correspondant. Cependant, on peut penser à INNER JOIN ON - par exemple, générer une ligne de sortie uniquement lors de la recherche d'une paire de lignes d'entrée qui satisfait à la condition ON - il renvoie néanmoins les lignes de jointure croisée qui satisfont à la condition. La seule raison pour laquelle ON devait compléter la virgule en SQL était d'écrire OUTERJOINs. Bien entendu, une expression doit rendre sa signification claire; mais ce qui est clair dépend de ce que les choses signifient.
Diagrammes de Re Venn Un diagramme de Venn avec deux cercles qui se croisent peut illustrer la différence entre les lignes de sortie pour les JOINTS INNER, LEFT, RIGHT & FULL pour la même entrée. Et lorsque ON est inconditionnellement TRUE, le résultat INNER JOIN est le même que CROSS JOIN. Il peut également illustrer les lignes d'entrée et de sortie pour INTERSECT, UNION & EXCEPT. Et lorsque les deux entrées ont les mêmes colonnes, le résultat INTERSECT est le même que pour SQL NATURAL JOIN standard, et le résultat EXCEPT est le même que pour certains idiomes impliquant LEFT & RIGHT JOIN. Mais cela n'illustre pas comment (INNER) JOIN fonctionne en général. Cela semble plausible à première vue . Il peut identifier les parties d'entrée et / ou de sortie pourcas particuliers de ON, PK (clés primaires), FK (clés étrangères) et / ou SELECT. Tout ce que vous avez à faire pour voir cela est d'identifier quels sont exactement les éléments des ensembles représentés par les cercles . (Les présentations confuses ne sont jamais claires.) (N'oubliez pas qu'en général, pour les jointures, les lignes de sortie ont des en-têtes différents des lignes d'entrée . Et les tables SQL sont des sacs et non des ensembles de lignes avec NULL .)
la source
CROSS JOIN
. Je me demande combien de fois quelqu'un vient à SQL déjà familier avec le produit cartésien mais incapable de comprendreCROSS JOIN
.Jointure interne
La jointure qui affiche uniquement les lignes qui ont une correspondance dans les deux tables jointes est appelée jointure interne. Il s'agit de la jointure par défaut dans le concepteur de requêtes et de vues.
Syntaxe de la jointure interne
Jointure croisée
Jointure croisée qui produit un produit cartésien des tables impliquées dans la jointure. La taille d'un produit cartésien est le nombre de lignes du premier tableau multiplié par le nombre de lignes du deuxième tableau.
Syntaxe de la jointure croisée
Ou nous pouvons l'écrire d'une autre manière aussi
Vérifiez maintenant la requête ci-dessous pour la jointure croisée
Exemple
Ou
la source
N'oubliez pas que si une clause WHERE est ajoutée, la jointure croisée se comporte comme une jointure interne. Par exemple, les requêtes Transact-SQL suivantes produisent le même jeu de résultats. Veuillez vous référer à http://technet.microsoft.com/en-us/library/ms190690(v=sql.105).aspx
la source
JOINDRE CROISÉ
Comme je l'ai expliqué dans cet article , le CROSS JOIN est destiné à générer un produit cartésien.
Un produit cartésien prend deux ensembles A et B et génère toutes les permutations possibles d'enregistrements de paires à partir de deux ensembles de données donnés.
Par exemple, en supposant que vous disposez des tables suivantes
ranks
et de lasuits
base de données:Et le
ranks
a les lignes suivantes:Alors que la
suits
table contient les enregistrements suivants:En tant que requête CROSS JOIN comme la suivante:
générera toutes les permutations possibles de
ranks
etsuites
paires:JOINTURE INTERNE
En revanche, INNER JOIN ne renvoie pas le produit cartésien des deux ensembles de données joints.
Au lieu de cela, INNER JOIN prend tous les éléments de la table de gauche et les compare aux enregistrements de la table de droite afin que:
Par exemple, en supposant que nous ayons une relation de table un-à-plusieurs entre un parent
post
et unepost_comment
table enfant qui ressemble à ceci:Maintenant, si la
post
table contient les enregistrements suivants:et la
post_comments
table a ces lignes:Une requête INNER JOIN comme la suivante:
va inclure tous les
post
enregistrements avec tous leurs associéspost_comments
:Pour plus de détails sur le fonctionnement de INNER JOIN, consultez également cet article .
la source
SQL Server accepte également la notation plus simple de:
En utilisant cette notation plus simple, il n'est pas nécessaire de se soucier de la différence entre les jointures internes et croisées. Au lieu de deux clauses «ON», il existe une seule clause «WHERE» qui fait le travail. Si vous avez des difficultés à déterminer quelles clauses "JOIN" "ON" vont où, abandonnez la notation "JOIN" et utilisez la plus simple ci-dessus.
Ce n'est pas de la triche.
la source
Lors de l'écriture de requêtes en utilisant des jointures internes, les enregistrements vont chercher dans les deux tables si la condition est satisfaite sur les deux tables, c'est-à-dire une correspondance exacte de la colonne commune dans les deux tables.
Lors de l'écriture d'une requête en utilisant la jointure croisée, le résultat est comme le produit cartésien du nombre d'enregistrements dans les deux tables. exemple si table1 contient 2 enregistrements et table2 contient 3 enregistrements, le résultat de la requête est 2 * 3 = 6 enregistrements.
Alors n'allez pas pour cross join jusqu'à ce que vous en ayez besoin.
la source
La jointure croisée et la jointure interne sont les mêmes avec la seule différence que dans la jointure interne, nous filtrons de manière booléenne certains des résultats du produit cartésien
C'est lors de la conception de nos données que nous décidons qu'il n'y a qu'un seul cas du champ que nous utilisons pour la jointure. Joindre uniquement les jointures croisées des deux tables et obtenir uniquement les lignes réalisant une expression booléenne spéciale.
Notez que si les champs sur lesquels nous effectuons nos jointures étaient nuls dans les deux tables, nous passerions le filtre. C'est à nous ou au fabricant de la base de données d'ajouter des règles supplémentaires pour éviter ou autoriser les valeurs nulles. Conformément aux principes de base, il ne s'agit que d'une jointure croisée suivie d'un filtre.
la source
La jointure interne donnera le résultat des enregistrements correspondants entre deux tables alors que la jointure croisée vous donne les combinaisons possibles entre deux tables.
la source
A = {1,5,3,4,6,7,9,8} B = {2,8,5,4,3,6,9}
cross join
agir comme produit cartésien A ✖ B = {1,2}, {1,8} ..., {5,2}, {5,8}, {5,5} ..... {3,3} ..., {6,6} .... {8,9} et a renvoyé ce long jeu de résultats.lors du traitement de
inner join
son fait à travers le produit cartésien et choisissez les paires correspondantes.inner join
choisissez {5,5}, {4,4}, {6,6} , {9,9} et a renvoyé la colonne demandée dans la clause select liée à ces identifiants.si
cross join
sur a = b alors le résultat est le même jeu de résultats queinner join
. dans ce cas, utilisez égalementinner join
.la source
Cela dépend de la sortie attendue.
Une jointure croisée fait correspondre toutes les lignes d'une table à toutes les lignes d'une autre table. Une jointure interne correspond à un ou plusieurs champs. Si vous avez une table avec 10 lignes et une autre avec 10 lignes, les deux jointures se comporteront différemment.
La jointure croisée aura 100 lignes retournées et elles ne seront pas liées, juste ce qu'on appelle un produit cartésien. La jointure interne fera correspondre les enregistrements les uns aux autres. En supposant que l'un a une clé primaire et qu'il s'agit d'une clé étrangère dans l'autre, vous obtiendrez 10 lignes renvoyées.
Une jointure croisée a une utilité générale limitée, mais existe par souci d'exhaustivité et décrit le résultat de la jointure de tables sans aucune relation ajoutée à la requête. Vous pouvez utiliser une jointure croisée pour créer des listes de combinaisons de mots ou quelque chose de similaire. Une jointure interne, en revanche, est la jointure la plus courante.
la source