CROSS JOIN vs INNER JOIN dans SQL


150

Quelle est la différence entre CROSS JOINet 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?


15
CROSS JOINentraînera toutes les combinaisons possibles des tableaux. Par exemple, Table1 avec 100 lignes et Table2 avec 100 lignes donneront 10000 enregistrements.
bummi le

x CROSS JOIN yisx INNER JOIN y ON 1=1
philipxy

Réponses:


119

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

select * from table1 cross join table2 where table1.id = table2.fk_id

Jointure interne

select * from table1 join table2 on table1.id = table2.fk_id

Utilisez la dernière méthode


7
Et je crois que vous pouvez écrire select * from table1 cross join table2 where table1.id = table2.fk_idcomme select * from table1, table2 where table1.id = table2.fk_id(en remplaçant cross joinpar a ,)
modulitos

5
@Lucas qui est l'ancienne syntaxe des jointures, mais cela fonctionnera. Je recommande cependant la version de Clausen, beaucoup plus lisible.
iliketocode

1
que voulez-vous dire 1 à 1 match? Que voulez-vous dire "même situation"
Jwan622

1
@iliketocode "l'ancienne syntaxe pour les jointures" n'est pas claire, vous feriez mieux de parler des standards SQL-89 et SQL-92
Ivanzinho

Votre INNER JOIN "100" est un cas particulier que vous n'avez pas expliqué et vous n'avez pas expliqué le cas général.
philipxy

186

Voici le meilleur exemple de jointure croisée et de jointure interne.

Considérez les tableaux suivants

TABLE : Teacher

x------------------------x
| TchrId   | TeacherName | 
x----------|-------------x
|    T1    |    Mary     |
|    T2    |    Jim      |
x------------------------x

TABLE : Student

x--------------------------------------x
|  StudId  |    TchrId   | StudentName | 
x----------|-------------|-------------x            
|    S1    |     T1      |    Vineeth  |
|    S2    |     T1      |    Unni     |
x--------------------------------------x

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 JOINou INNER JOINet allons

entrez la description de l'image ici

Requete

SELECT T.TchrId,T.TeacherName,S.StudentName 
FROM #Teacher T
INNER JOIN #Student S ON T.TchrId = S.TchrId

Résultat

x--------------------------------------x
|  TchrId  | TeacherName | StudentName | 
x----------|-------------|-------------x            
|    T1    |     Mary    |    Vineeth  |
|    T1    |     Mary    |    Unni     |
x--------------------------------------x

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.

entrez la description de l'image ici

Requete

SELECT T.TchrId,T.TeacherName,S.StudentName 
FROM #Teacher T
CROSS JOIN #Student S 

Résultat

x--------------------------------------x
|  TchrId  | TeacherName | StudentName | 
x----------|-------------|-------------x            
|    T2    |     Jim     |    Vineeth  |
|    T2    |     Jim     |    Unni     |
|    T1    |     Mary    |    Vineeth  |
|    T1    |     Mary    |    Unni     |
x--------------------------------------x

1
La clé de la figure 2 est complexe: elle encercle (couleur non pertinente) les éléments d'un argument de CROSS JOIN & un nombre (valeur non pertinente) en est une ligne et une ligne (couleur non pertinente) est une ligne de résultat. Pour les tableaux en tant que sacs, ce n'est pas un diagramme de Venn: pour les lignes en tant que valeurs, c'est faux ; pour les lignes en tant qu'éléments, elles ne peuvent pas être partagées. Pour les tableaux sous forme d'ensembles, vous n'avez pas besoin d' un diagramme de Venn. La figure 1 est une terrible tentative courante d'expliquer JOIN. Sa clé est également complexe: ce n'est que pour les tables en tant qu'ensembles & seulement équi-jointure & une seule valeur; il représente également l'entrée différemment de la sortie. Écrivez- le pour JOIN en général.
philipxy

La figure 1 est utile et correcte en tant que premier des 4 coloris des diagrammes de Venn en cercle qui se croisent pour: (INNER) JOIN vs LEFT, RIGHT & FULL (OUTER) JOIN mais pas vs CROSS JOIN. Les lignes d'intersection sont dans JOIN, les lignes gauche / droite sont des lignes supplémentaires (étendues par zéro) dans LEFT / RIGHT JOIN. Il inclut CROSS JOIN comme cas particulier de (INNER) JOIN où il n'y a pas de lignes dans la non-intersection.
philipxy

1
Merci pour votre suggestion. Quoi qu'il en soit, l'OP a demandé la différence entre ces deux jointures. J'ai répondu à cette question de telle sorte que tout débutant puisse facilement comprendre la différence entre eux. Comme vous l'avez dit, je n'ai pas donné de clés comme dans un environnement de production. C'est juste un exemple à comprendre facilement. Et pour Cross Join, pensez-vous qu'il ne renvoie pas toutes les lignes à moins qu'une Whereclause ne soit donnée? D'après vos commentaires, il y a plus de chances pour un débutant d'être confus !!! @philipxy
Sarath Avanavu

1
Mes commentaires soulignent que les diagrammes sont difficiles à interpréter même si l'on sait ce qu'ils essaient de dire et qu'ils ne conviennent pas à ce sujet. Par «clé» (de la figure 2 ou 1), je voulais dire «explication de ce que signifient les parties d'un diagramme». Par «écrivez-le», j'entends essayer d'écrire très clairement ce que signifient les parties du diagramme. Vous constaterez que les diagrammes sont compliqués et ne montrent pas de jointure croisée vs jointure interne! Ie ils n'appartiennent pas à votre réponse. Les clés relationnelles de table PS n'ont aucun rôle à expliquer ce que font les JOIN. PPS La seule différence entre les jointures est que INNER JOIN a un ON.
philipxy

Regardez dans W3Schools w3schools.com/sql/sql_join_inner.asp où ils ont donné un type de diagramme similaire pour INNER JOIN. Assurez-vous d'avoir raison avant de faire des commentaires @philipxy
Sarath Avanavu

69

CROSS 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:

Jointure croisée

CROSS JOIN renvoie le produit cartésien des lignes des tables de la jointure. En d'autres termes, il produira des lignes qui combinent chaque ligne de la première table avec chaque ligne de la seconde table.

Jointure interne

[...] Le résultat de la jointure peut être défini comme le résultat de la première prise du produit cartésien (ou jointure croisée) de tous les enregistrements dans les tables (combinant chaque enregistrement de la table A avec chaque enregistrement de la table B), puis le retour tous les enregistrements qui satisfont le prédicat de jointure.

La "notation de jointure implicite" répertorie simplement les tables à joindre, dans la clause FROM de l'instruction SELECT, en utilisant des virgules pour les séparer. Ainsi, il spécifie une jointure croisée

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:

    /* rows where
    customer C.CustomerID has age C.Age and ...
    */
    FROM Customers C
  • 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:

    /* rows where
        customer C.CustomerID has age C.Age and ...
    AND movie M.Movie is rented by customer M.CustomerID and ...
    */
    FROM Customers C CROSS JOIN Movies M
  • 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:

    /* rows where
        customer C.CustomerID has age C.Age and ...
    AND movie M.Movie is rented by customer M.CustomerID and ...
    AND C.CustomerID = M.CustomerID
    AND C.Age >= M.[Minimum Age]
    AND C.Age = 18
    */
    FROM Customers C INNER JOIN Movies M
    ON C.CustomerID = M.CustomerID
    AND C.Age >= M.[Minimum Age]
    WHERE C.Age = 18

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:

  • Le produit intermédiaire.
  • CROSS JOIN.
  • (INNER) JOIN avec un ON ou WHERE qui ne compare aucune colonne d'une table à aucune colonne d'une autre. (Étant donné que cela a tendance à renvoyer autant de lignes de produits intermédiaires.)

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:

  • Utilisez CROSS JOIN lorsque et seulement lorsque vous ne comparez pas les colonnes entre les tables. C'est pour montrer que le manque de comparaisons était intentionnel.
  • Utilisez (INNER) JOIN avec ON lorsque et seulement lorsque vous comparez des colonnes entre des tables. (Plus éventuellement d'autres conditions.)
  • N'utilisez pas de virgule.

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 .)


6
+1 J'aime mieux cette réponse - d'autres semblent impliquer que les résultats seront différents, mais si la clause "ON" est remplacée par "WHERE" les résultats sont les mêmes
Ronnie

4
+1 Merci d'avoir clarifié que l'omission de la clause ON dans un INNER JOIN donnera exactement les mêmes résultats que l'utilisation de CROSS JOIN
Cerno

"Produit croisé cartésien conceptuel intermédiaire de style SQL" - est-ce une autre façon de dire: "Ce n'est pas vraiment un ensemble de paires ordonnées mais je ne peux pas éviter de dire" produit cartésien ""? :) En tant que non-mathématicien moi-même, le seul contexte dans lequel j'ai jamais rencontré le terme «produit cartésien» est celui où quelqu'un explique les SQL CROSS JOIN. Je me demande combien de fois quelqu'un vient à SQL déjà familier avec le produit cartésien mais incapable de comprendre CROSS JOIN.
jour du

1
@onedaywhen L'opérateur produit cartésien renvoie un ensemble de tuples ordonnés étant donné certains ensembles. Le résultat est un produit cartésien. Les cultures relationnelles et SQL utilisent malheureusement mal / surchargent le «produit cartésien» pour les opérateurs qui évoquent mais ne sont pas des produits cartésiens. Par exemple, Wikipedia! Je m'oppose à cela - cela induit en erreur / confond. Pourtant, malheureusement, je ne décris ici que de manière floue le fonctionnement de la jointure croisée SQL dans mes propres mots et je m'en remets à Wikipedia. J'étiqueter le résultat « produit cartésien croix intermédiaire SQL style conceptuel ». Oui "cartésien" est pour ceux qui sont malheureusement déjà corrompus qui l'utilisent / l'attendent.
philipxy

1
C'est la bonne réponse, contrairement aux réponses mieux notées. Il est typique avec SQL que des explications superficielles, au son raisonnable et bien formatées avec des images dominent le contenu éducatif, même si elles ne comprennent pas ou ne définissent même pas les bases de la langue.
Charles Roddie

23

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

SELECT t1.column_name,t2.column_name
FROM table_name1 t1
INNER JOIN table_name2 t2
ON t1.column_name=t2.column_name

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

SELECT * FROM table_name1
CROSS JOIN table_name2

Ou nous pouvons l'écrire d'une autre manière aussi

SELECT * FROM table_name1,table_name2

Vérifiez maintenant la requête ci-dessous pour la jointure croisée

Exemple

SELECT * FROM UserDetails
CROSS JOIN OrderDetails

Ou

SELECT * FROM UserDetails, OrderDetails


9

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 rankset de la suitsbase de données:

Les tableaux des grades et des costumes

Et le ranksa les lignes suivantes:

| name  | symbol | rank_value |
|-------|--------|------------|
| Ace   | A      | 14         |
| King  | K      | 13         |
| Queen | Q      | 12         |
| Jack  | J      | 11         |
| Ten   | 10     | 10         |
| Nine  | 9      |  9         |

Alors que la suitstable contient les enregistrements suivants:

| name    | symbol |
|---------|--------|
| Club    |       |
| Diamond |       |
| Heart   |       |
| Spade   |       |

En tant que requête CROSS JOIN comme la suivante:

SELECT
   r.symbol AS card_rank,
   s.symbol AS card_suit
FROM
   ranks r
CROSS JOIN
   suits s

générera toutes les permutations possibles de rankset suitespaires:

| card_rank | card_suit |
|-----------|-----------|
| A         |          |
| A         |          |
| A         |          |
| A         |          |
| K         |          |
| K         |          |
| K         |          |
| K         |          |
| Q         |          |
| Q         |          |
| Q         |          |
| Q         |          |
| J         |          |
| J         |          |
| J         |          |
| J         |          |
| 10        |          |
| 10        |          |
| 10        |          |
| 10        |          |
| 9         |          |
| 9         |          |
| 9         |          |
| 9         |          |

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:

  • si aucun enregistrement ne correspond à la table de droite, la ligne de gauche est filtrée de l'ensemble de résultats
  • pour tout enregistrement correspondant dans la table de droite, la ligne de gauche est répétée comme s'il y avait un produit cartésien entre cet enregistrement et tous ses enregistrements enfants associés dans la table de droite.

Par exemple, en supposant que nous ayons une relation de table un-à-plusieurs entre un parent postet une post_commenttable enfant qui ressemble à ceci:

Relation de table un à plusieurs

Maintenant, si la posttable contient les enregistrements suivants:

| id | title     |
|----|-----------|
| 1  | Java      |
| 2  | Hibernate |
| 3  | JPA       |

et la post_commentstable a ces lignes:

| id | review    | post_id |
|----|-----------|---------|
| 1  | Good      | 1       |
| 2  | Excellent | 1       |
| 3  | Awesome   | 2       |

Une requête INNER JOIN comme la suivante:

SELECT
   p.id AS post_id,
   p.title AS post_title,
   pc.review  AS review
FROM post p
INNER JOIN post_comment pc ON pc.post_id = p.id

va inclure tous les postenregistrements avec tous leurs associés post_comments:

| post_id | post_title | review    |
|---------|------------|-----------|
| 1       | Java       | Good      |
| 1       | Java       | Excellent |
| 2       | Hibernate  | Awesome   |

Fondamentalement, vous pouvez considérer INNER JOIN comme un CROSS JOIN filtré où seuls les enregistrements correspondants sont conservés dans le jeu de résultats final.

Pour plus de détails sur le fonctionnement de INNER JOIN, consultez également cet article .


"INNER JOIN ne retourne pas le produit cartésien des deux ensembles de données jointifs" est un peu trop quand x INNER JOIN y on 1 = 1 le renvoie. Il en va de même pour «Au lieu» lorsque ce que vous essayez de dire le renvoie en fait (bien sûr) pour la condition 1 = 1. Sauf que le langage des puces ne décrit pas clairement le résultat d'une jointure interne. Ce qui le décrit, c'est qu'il s'agit d'une jointure croisée moins de lignes qui ne remplissent pas la condition. De même, votre langage de jointure croisée utilisant des «combinaisons» n'est pas clair.
philipxy

7

SQL Server accepte également la notation plus simple de:

SELECT A.F, 
       B.G, 
       C.H 
  FROM TABLE_A A, 
       TABLE_B B, 
       TABLE_C C
 WHERE A.X = B.X 
   AND B.Y = C.Y

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.


2

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.


2
Uniquement si la clause WHERE est manquante!
epitka

2

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

table1
x--------------------------------------x
|  fieldA  |    fieldB   |    fieldC   | 
x----------|-------------|-------------x            
|    A     |      B      |    option1  |
|    A     |      B1     |    option2  |
x--------------------------------------x

table2
x--------------------------------------x
|  fieldA  |    fieldB   |    fieldC   | 
x----------|-------------|-------------x            
|    A     |      B      |    optionB1 |
|    A1    |      B1     |    optionB2 |
x--------------------------------------x

 cross join
  A,B,option1,A,B,optionB1
  A,B,option1,A1,B1,optionB2
  A,B1,option2,A,B,optionB1
  A,B1,option2,A1,B1,optionB2

 inner join on field1 (only with the value is the same in both tables)
  A,B,option1,A,B,optionB1
  A,B1,option2,A,B,optionB1

 inner join on field1
  A,B,option1,A,B,optionB1

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.


0

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.


0

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 joinson 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 joinsur a = b alors le résultat est le même jeu de résultats que inner join. dans ce cas, utilisez également inner join.


-1

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.


Ne pas confondre tout le monde. J'ai essayé de raccourcir la réponse. C'est la meilleure réponse courte possible.
Shrikant Jadhav
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.