24 Question: Quelle est la différence entre “INNER JOIN” et “OUTER JOIN”?

question créée à Wed, Feb 13, 2019 12:00 AM

Aussi, comment s'intègrent les LEFT JOIN, RIGHT JOIN et FULL JOIN?

    
4376
  1. Des réponses & commentaires & leurs références ci-dessous un seul explique en réalité comment les diagrammes de Venn représentent les opérateurs: La zone d'intersection des cercles représente l'ensemble des lignes de A JOIN B. La zone unique pour chaque cercle représente l'ensemble des lignes que vous obtenez en prenant sa les lignes de la table qui ne participent pas à A JOIN B et en ajoutant les colonnes uniques à l'autre table sont définies sur NULL. (Et la plupart donnent une vague fausse correspondance des cercles à A et à B.)
    2014-10-18 20: 24: 59Z
  2. Beaucoup de réponses sont déjà fournies, mais je n'ai pas vu ce tutoriel mentionné. Si vous connaissez les diagrammes de Venn, voici un excellent didacticiel: blog.codinghorror .com /a-visual-explication-of-sql-join Pour moi, il est assez concis pour être lu rapidement, mais il saisit tout le concept et fonctionne très bien dans tous les cas. Si vous ne savez pas ce que sont les diagrammes de Venn, apprenez-les. Cela prend 5 à 10 minutes et vous aidera à visualiser le travail avec les ensembles et la gestion des opérations sur les ensembles.
    2017-05-09 09: 04: 59Z
  3. @ DanteTheSmith Non, cela pose les mêmes problèmes que les diagrammes présentés ici. Voir mon commentaire ci-dessus concernant la question & Ci-dessous, le même article de blog: "Jeff répudie son blog quelques pages plus bas dans les commentaires". Les diagrammes de Venn montrent des éléments dans des ensembles. Essayez simplement d’identifier exactement quels sont les ensembles et quels sont les éléments dans ces diagrammes. Les ensembles ne sont pas les tableaux et les éléments ne sont pas leurs lignes. De même, deux tables peuvent être jointes, de sorte que les PK & Les FK ne sont pas pertinents. Tout faux. vous faites exactement ce que des milliers d'autres ont fait - vous avez une vague impression que vous (à tort) supposez que cela a un sens.
    2017-05-18 05: 57: 51Z
  4. Quelqu'un pourrait-il répondre à cette question en se référant aux données indexées des séries chronologiques - Les jointures internes et externes ne fonctionnent souvent pas au sens humain /Venn en ce qui concerne les horodatages qui sont différent en quelques millisecondes.
    2017-09-05 09: 26: 18Z
  5. le titre original était plus clair quant à ce qui était demandé par beng ("différents types de jointure" pourrait faire référence à des types de jointure physiques tels que hachage et fusion par exemple) Le titre original était également clairement efficace avec les moteurs de recherche du nombre de vues. J'ai annulé cette édition inutile
    2019-02-13 08: 14: 08Z
24 réponses                              24                         

En supposant que vous rejoignez des colonnes sans doublons, ce qui est un cas très courant:

  • Une jointure interne de A et B donne le résultat de l'intersection A, c'est-à-dire la partie interne d'un Diagramme de Venn intersection.

  • Une jointure externe de A et B donne les résultats de l'union B, c'est-à-dire les parties extérieures d'une union de diagramme de Venn.

Exemples

Supposons que vous ayez deux tables, chacune avec une seule colonne, et les données suivantes:

 
A    B
-    -
1    3
2    4
3    5
4    6

Notez que (1,2) sont uniques à A, (3,4) sont communs et (5,6) sont uniques à B.

Jointure interne

Une jointure interne utilisant l'une des requêtes équivalentes donne l'intersection des deux tables, c'est-à-dire les deux lignes qu'elles ont en commun.

 
select * from a INNER JOIN b on a.a = b.b;
select a.*, b.*  from a,b where a.a = b.b;

a | b
--+--
3 | 3
4 | 4

Jointure externe gauche

Une jointure externe gauche donnera toutes les lignes de A, ainsi que toutes les lignes communes de B.

 
select * from a LEFT OUTER JOIN b on a.a = b.b;
select a.*, b.*  from a,b where a.a = b.b(+);

a |  b
--+-----
1 | null
2 | null
3 |    3
4 |    4

Jointure externe droite

Une jointure externe droite donnera toutes les lignes de B,plus toutes les lignes communes dans A.

 
select * from a RIGHT OUTER JOIN b on a.a = b.b;
select a.*, b.*  from a,b where a.a(+) = b.b;

a    |  b
-----+----
3    |  3
4    |  4
null |  5
null |  6

Jointure externe complète

Une jointure externe complète vous donnera l'union de A et B, c'est-à-dire toutes les lignes de A et toutes les lignes de B. Si quelque chose dans A n'a pas de donnée correspondante dans B, alors la partie B est nulle. et vice versa.

 
select * from a FULL OUTER JOIN b on a.a = b.b;

 a   |  b
-----+-----
   1 | null
   2 | null
   3 |    3
   4 |    4
null |    6
null |    5
    
5823
2017-09-28 19: 52: 04Z
  1. Il serait bon d'augmenter l'exemple en ajoutant une autre ligne dans la table B avec la valeur 4. Cela montrera que les jointures internes ne doivent pas nécessairement être sur un nombre égal de lignes.
    2009-08-30 12: 59: 48Z
  2. Une excellente explication, cependant: Une jointure externe de A et B donne les résultats de l'union B, c'est-à-dire les parties extérieures d'un union de diagramme de Venn . n'est pas formulé correctement. Une jointure externe donnera les résultats de l'intersection A de B en plus de l'un des éléments suivants: tout A (jointure à gauche), tout B (jointure à droite) ou tout A et tout B (jointure complète). Seul ce dernier scénario est vraiment une union B. Pourtant, une explication bien écrite.
    2011-05-03 19: 57: 42Z
  3. Ai-je raison de dire que FULL JOIN est un alias de FULL OUTER JOIN et que LEFT JOIN est un alias de LEFT OUTER JOIN?
    2013-01-01 20: 29: 27Z
  4. oui, excellente et excellente explication. mais pourquoi dans la colonne b les valeurs ne sont pas en ordre? c’est-à-dire 6,5 pas 5,6?
    2013-03-04 08: 39: 36Z
  5. @ Ameer, Merci. Join ne garantit pas un ordre, vous devez ajouter une clause ORDER BY.
    2013-03-05 00: 28: 16Z

Les diagrammes de Venn ne le font pas vraiment pour moi.

Ils ne montrent pas de distinction entre une jointure croisée et une jointure interne, par exemple, ou plus généralement, ne distinguent pas entre différents types de prédicats de jointure ou fournissent un cadre pour raisonner sur la façon dont ils vont fonctionner.

Rien ne peut remplacer la compréhension du traitement logique et il est relativement simple à saisir de toute façon.

  1. Imaginez une jointure croisée.
  2. Évaluez la clause on par rapport à toutes les lignes de l'étape 1 en conservant celles où le prédicat est évalué à true
  3. (pour les jointures externes uniquement) rajoute toutes les lignes extérieures perdues à l'étape 2.

(NB: en pratique, l'optimiseur de requêtes trouvera peut-être des moyens plus efficaces d'exécuter la requête que la description purement logique ci-dessus, mais le résultat final devra être identique.)

Je commencerai par une version animée d'une jointure externe complète . Des explications supplémentaires suivent.

 entrez la description de l'image ici

Explication

Tables sources

entrer la description du lien ici

Commencez par un CROSS JOIN (Produit cartésien AKA). Cela n'a pas de clause ON et renvoie simplement toutes les combinaisons de lignes des deux tables.

SÉLECTIONNER A.Couleur, B.Couleur DE UNE CROIX JOINER B

entrez la description du lien ici

Les jointures internes et externes ont un prédicat de clause "ON".

  • Inner Join. : évaluez la condition de la clause "ON" pour toutes les lignes du résultat de la jointure. Si true, retourne la ligne jointe. Sinon, jetez-le.
  • Jointure externe gauche. Identique à la jointure interne, puis pour toutes les lignes du tableau de gauche ne correspondant à rien, les sorties avec des valeurs NULL pour les colonnes de droite.
  • Jointure externe droite. Identique à la jointure interne, puis pour toutes les lignes du tableau de droite qui ne correspondent à rien, les sorties avec des valeurs NULL pour les colonnes de gauche.
  • Jointure externe complète. Identique à la jointure interne, puis conservez les lignes non appariées de gauche, comme dans la jointure externe gauche et les lignes non correspondantes correspondant à la jointure externe droite.

Quelques exemples

SÉLECTION A.Couleur, B.Couleur D'UN INTERNE JOIGNEZ B SUR A.Couleur = B.Couleur

Ce qui précède est le classique équi rejoindre.

Jointure interne

Version animée

 entrez la description de l'image ici

SÉLECTIONNEZ LA COULEUR A., LA COULEUR B. D'UNE INTÉRIEUR, JOIGNEZ B SUR LA COULEUR A. IN (Vert, Bleu)

La condition de jointure interne ne doit pas nécessairement être une condition d'égalité et il n'est pas nécessaire qu'elle référence les colonnes des deux (ou même de l'un ou l'autre) des tableaux. L'évaluation de A.Colour NOT IN ('Green','Blue') sur chaque ligne des renvois croisés se joint.

inner 2

SÉLECTIONNER A.Couleur, B.Couleur D'UN INTÉRIEUR JOIN B ON 1 = 1

La condition de jointure est évaluée comme étant vraie pour toutes les lignes du résultat de la jointure croisée, elle est donc identique à une jointure croisée. Je ne répéterai plus l'image des 16 rangées.

SÉLECTIONNER LA COULEUR A., LA COULEUR B. DEPUIS UNE EXTÉRIEUR GAUCHE, JOIN B SUR LA COULEUR A. = B.Colour

Les jointures externes sont évaluées logiquement 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.

LOJ

SÉLECTIONNEZ LA COULEUR A., LA COULEUR B. DEPUIS UNE EXTÉRIEUR GAUCHE, REJOINDRE B SUR LA COULEUR A. = LA COULEUR B. O LA COULEUR B. est NULL

Ceci limite simplement le résultat précédent à 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 ne correspondaient pas dans la table de droite et la requête renvoie la seule ligne rouge qui ne correspond pas dans la table B. C’est ce qu’on appelle une anti-jointure.

Il est important de sélectionner une colonne pour le test IS NULL qui n'est pas nullable ou pour laquelle la condition de jointure garantit que toutes les valeurs NULL seront exclues afin que ce modèle fonctionne correctement et éviter de simplement renvoyer des lignes avoir une valeur NULL pour cette colonne en plus des lignes non appariées.

loj a la valeur null

SÉLECTIONNER LA COULEUR A., B. LA COULEUR DANS UNE DROITE EXTÉRIEURE, JOIGNEZ B SUR LA COULEUR A. = B.Couleur

Les jointures externes droites agissent de la même manière que les jointures externes gauches, sauf qu'elles préservent les lignes non correspondantes de la table de droite et que les colonnes de gauche sont étendues.

ROJ

SÉLECTIONNER LA COULEUR, B. LA COULEUR D'UN FULL OUTER REJOINDRE B SUR LA COULEUR = B.La couleur

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

OFJ

SÉLECTIONNER LA COULEUR A. LA COULEUR B. À PARTIR D'UNE PLEIN OUVERTER JOIN B ON 1 = 0

Aucune ligne dans la jointure croisée ne correspond au prédicat 1=0. Toutes les lignes des deux côtés sont préservées à l'aide des règles de jointure externes normales avec NULL dans les colonnes de la table de l'autre côté.

FOJ 2

CHOISISSEZ LA COALESCE (Couleur A., ​​Couleur B.) EN TANT QUE Couleur À PARTIR D’UN FULL OUTER JOIN B B ON 1 = 0

Avec une modification mineure à la requête précédente, on pourrait simuler un UNION ALL des deux tables.

UNION ALL

SÉLECTIONNEZ LA COULEUR A., LA COULEUR B. DEPUIS UNE EXTERIEURE GAUCHE, REJOINDRE B SUR LA COULEUR A. = LA COULEUR WHERE B.Color = 'Green'

Notez que la clause WHERE (si présente) s'exécute logiquement après la jointure. Une erreur courante consiste à effectuer une jointure externe gauche, puis à inclure une clause WHERE avec une condition sur la table de droite qui exclut les lignes non correspondantes. Ce qui précède finit par effectuer la jointure externe ...

LOJ

... Et puis la clause "Where" est exécutée. NULL= 'Green' ne correspond pas à la valeur true de sorte que la ligne conservée par la jointure externe finisse par être ignorée (avec la ligne bleue), ce qui reconvertit la jointure en une jointure interne.

LOJtoInner

Si l'intention était d'inclure uniquement les lignes de B où Couleur est Vert et toutes les lignes de A, quelle que soit la syntaxe,

SÉLECTIONNER LA COULEUR A., LA COULEUR B. DEPUIS UNE EXTÉRIEUR GAUCHE, JOIN B SUR LA COULEUR A. = B.La couleur ET B. La couleur = 'Vert'

entrer la description de l'image ici

Fiddle SQL

Voir ces exemples en direct sur SQLFiddle.com .

    
623
2018-08-03 07: 59: 59Z
  1. Je dirai que, même si cela ne fonctionne pas aussi bien pour moi que pour les diagrammes de Venn, j'apprécie le fait que les gens varient et apprennent différemment, ce qui est très bien présenté. explication différente de celle que j’ai vue auparavant, j’appuie donc @ypercube pour l’attribution des points bonus. Aussi, bon travail expliquant la différence de mettre des conditions supplémentaires dans la clause JOIN par rapport à la clause WHERE. Félicitations à vous, Martin Smith.
    2014-12-20 04: 48: 36Z
  2. @ OldPro Les diagrammes de Venn sont acceptables dans la mesure du possible, mais ils ne disent pas comment représenter une jointure croisée ou différencier un type de prédicat de jointure tel que en tant qu'équi rejoindre d'un autre. Le modèle mental consistant à évaluer le prédicat de jointure sur chaque ligne du résultat de la jointure croisée, puis à rajouter des lignes non appariées si une jointure externe et enfin à évaluer où fonctionne mieux pour moi.
    2014-12-20 11: 05: 32Z
  3. Les diagrammes de Venn permettent de représenter les unions et les intersections et les différences, mais pas les jointures. Ils ont une valeur éducative mineure pour les jointures très simples, c’est-à-dire les jointures où la condition de jointure est sur des colonnes uniques.
    2014-12-20 22: 28: 49Z
  4. @ Arth - Non, vous vous trompez. SQL Fiddle sqlfiddle.com/#!3/9eecb7db59d16c80417c72d1/5155 c'est ce qui est le cas les diagrammes ne peuvent pas illustrer.
    2016-01-28 15: 54: 10Z
  5. @ MartinSmith Wow, je suis d'accord, je me trompe complètement! Trop habitué à travailler avec one-to-manys .. merci pour la correction.
    2016-01-28 15: 57: 18Z
Les

Jointures permettent de combiner les données de deux tables. Le résultat est une nouvelle table temporaire. Les jointures sont effectuées sur la base d'un prédicat, qui spécifie la condition à utiliser pour effectuer une jointure. La différence entre une jointure interne et une jointure externe réside dans le fait qu'une jointure interne ne renverra que les lignes qui correspondent réellement en fonction du prédicat de la jointure. Considérons le tableau Employé et Emplacement:

entrer la description de l'image ici

Jointure interne: - La jointure interne crée une nouvelle table de résultats en combinant les valeurs de colonne de deux tables ( Employé et Emplacement ) en fonction du prédicat de jointure. La requête compare chaque ligne de Employé avec chaque ligne de Emplacement afin de rechercher toutes les paires de lignes satisfaisant le prédicat de jointure. Lorsque le prédicat de jointure est satisfait en faisant correspondre des valeurs non NULL, les valeurs de colonne de chaque paire de lignes correspondante de Employé et de Emplacement sont combinées dans une ligne de résultat. Voici à quoi ressemblera le code SQL d’une jointure interne:

 
select  * from employee inner join location on employee.empID = location.empID
OR
select  * from employee, location where employee.empID = location.empID

Maintenant, voici à quoi ressemblerait le résultat de l'exécution de SQL: entrer la description de l'image ici  entrer la description de l'image ici

Jointure externe: - Une jointure externe ne nécessite pas que chaque enregistrement des deux tables jointes ait un enregistrement correspondant. La table jointe conserve chaque enregistrement, même s'il n'existe aucun autre enregistrement correspondant. Les jointures externes sont subdivisées en jointures externes gauche et droite, en fonction des lignes de la table conservées (gauche ou droite).

Jointure externe gauche: - Le résultat d'une jointure externe gauche (ou simplement d'une jointure gauche) pour les tables Employee et Emplacement contient toujours tous les enregistrements de la table "gauche" ( Employee ), même si la condition de jointure ne trouve aucun enregistrement correspondant dans la table "droite" ( Emplacement ). Voici à quoi ressemblerait le code SQL d'une jointure externe gauche, à l'aide des tableaux ci-dessus:

 
select  * from employee left outer join location on employee.empID = location.empID;
//Use of outer keyword is optional

Maintenant, voici à quoi ressemblerait le résultat de l’exécution de ce code SQL: entrer la description de l'image ici  entrer la description de l'image ici

Jointure externe droite: - Une jointure externe droite (ou jointure droite) ressemble étroitement à une jointure externe gauche, sauf que le traitement des tables est inversé. Chaque ligne de la table "droite" ( Emplacement ) apparaîtra au moins une fois dans la table jointe. Si aucune ligne correspondante de la table "de gauche" ( Employé ) n'existe, NULL apparaîtra dans les colonnes de Employé pour les enregistrements qui ne correspondent à aucune correspondance dans Emplacement em>. Voici à quoi ressemble le code SQL:

 
select * from employee right outer join location  on employee.empID = location.empID;
//Use of outer keyword is optional

En utilisant les tableaux ci-dessus, nous pouvons montrer à quoi ressemblerait le résultat d'une jointure externe droite:

entrer la description de l'image ici  entrer la description de l'image ici

Jointures externes complètes: - Une jointure externe complète ou une jointure complète consiste à conserver les informations sans correspondance en incluant des lignes sans correspondance dans les résultats d'une jointure. Utilisez une jointure externe complète. Il inclut toutes les lignes des deux tables, que l'autre table ait ou non une valeur correspondante. entrer la description de l'image ici

Source de l'image

Manuel de référence de MySQL 8.0 - Syntaxe de jointure

Opérations de jonction Oracle

    
142
2018-08-07 14: 38: 49Z

Jointure interne

Récupérez uniquement les lignes correspondantes, c'est-à-dire A intersect B.

Entrez la description de l'image ici>

 
SELECT *
FROM dbo.Students S
INNER JOIN dbo.Advisors A
    ON S.Advisor_ID = A.Advisor_ID

Jointure externe gauche

Sélectionnez tous les enregistrements de la première table et tous les enregistrements de la seconde. table qui correspond aux clés jointes.

Entrez la description de l'image ici>

 
SELECT *
FROM dbo.Students S
LEFT JOIN dbo.Advisors A
    ON S.Advisor_ID = A.Advisor_ID

Jointure externe complète

Sélectionnez tous les enregistrements de la seconde table et tous les enregistrements de la première. table qui correspond aux clés jointes.

Entrez la description de l'image ici>

 
SELECT *
FROM dbo.Students S
FULL JOIN dbo.Advisors A
    ON S.Advisor_ID = A.Advisor_ID

Références

121
2014-07-21 15: 38: 32Z
  1. Quel est le nom de l'outil? Je trouve cela intéressant car il montre le nombre de lignes et de diagrammes de Venn
    2014-01-27 12: 23: 03Z
  2. @ GrijeshChauhan Datamartist :)
    2014-01-27 12: 25: 31Z
  3. @ Trushar :( ce n'est pas pour le système Linux ..
    2014-01-27 12: 27: 42Z
  4. @ GrijeshChauhan Ouais, mais vous pouvez essayer de le lancer avec wine .
    2014-01-27 12: 30: 38Z
  5. Ohh! oui j ..J'ai utilisé SQLyog en utilisant du vin .. il existe également un PlayOnLinux
    2014-01-27 12: 32: 59Z

En termes simples:

Une jointure interne récupère lelignes correspondantes uniquement.

Attendu qu'une jointure externe récupère les lignes correspondantes d'une table et toutes les lignes d'une autre table .... le résultat dépend de celle que vous utilisez:

  • Gauche : lignes correspondantes dans le tableau de droite et toutes les lignes du tableau de gauche

  • Droite : lignes correspondantes dans le tableau de gauche et toutes les lignes du tableau de droite ou

  • Complet : toutes les lignes de toutes les tables. Peu importe qu'il y ait une correspondance ou pas

106
2014-07-21 15: 35: 37Z
  1. @ nomen Ce n'est pas cette réponse, mais INNER JOIN est une intersection et FULL OUTER JOIN est l'unité correspondante si la gauche & Les ensembles /cercles de droite contiennent les lignes de (respectivement) LEFT & DROIT rejoindre. PS Cette réponse n’est pas claire sur les lignes entre entrée et sortie. Il confond "dans le tableau gauche /droite" avec "a une partie gauche /droite dans le côté gauche /droit" et utilise "rangée correspondante" vs "all" pour signifier rangée étendue par rangée d'un autre tableau vs par null.
    2015-11-29 01: 17: 46Z

Une jointure interne affiche uniquement les lignes s'il existe un enregistrement correspondant de l'autre côté (à droite) de la jointure.

Une jointure externe (à gauche) affiche les lignes de chaque enregistrement sur le côté gauche, même s'il n'y a pas de lignes correspondantes sur l'autre côté (droit) de la jointure. S'il n'y a pas de ligne correspondante, les colonnes de l'autre côté (droit) afficheront des valeurs NULL.

    
100
2015-01-05 01: 14: 26Z

Les jointures internes nécessitent la présence d’un enregistrement avec un ID associé dans la table jointe.

Les jointures externes renverront des enregistrements pour le côté gauche, même si rien n’existe pour le côté droit.

Par exemple, vous avez une table Orders et une table OrderDetails. Ils sont liés par un "OrderID".

Commandes

  • OrderID
  • Nom du client

Détails de la commande

  • OrderDetailID
  • OrderID
  • Nom du produit
  • Qté
  • Prix

La demande

 
SELECT Orders.OrderID, Orders.CustomerName
  FROM Orders 
 INNER JOIN OrderDetails
    ON Orders.OrderID = OrderDetails.OrderID

renverra uniquement les commandes comportant également un élément dans la table OrderDetails.

Si vous le changez en OUTER LEFT JOIN

 
SELECT Orders.OrderID, Orders.CustomerName
  FROM Orders 
  LEFT JOIN OrderDetails
    ON Orders.OrderID = OrderDetails.OrderID

il retournera alors les enregistrements de la table Orders même s’ils n’ont pas d’enregistrements OrderDetails.

Vous pouvez utiliser cette option pour rechercher des commandes ne comportant pas de détails de commande indiquant un éventuel ordre orphelin en ajoutant une clause where comme WHERE OrderDetails.OrderID IS NULL.

    
75
2018-09-10 08: 25: 51Z
  1. J'apprécie cet exemple simple mais réaliste. J'ai modifié avec succès une requête comme SELECT c.id, c.status, cd.name, c.parent_id, cd.description, c.image FROM categories c, categories_description cd WHERE c.id = cd.categories_id AND c.status = 1 AND cd.language_id = 2 ORDER BY c.parent_id ASC en SELECT c.id, c.status, cd.name, c.parent_id, cd.description, c.image FROM categories c INNER JOIN categories_description cd ON c.id = cd.categories_id WHERE c.status = 1 AND cd.language_id = 2 ORDER BY c.parent_id ASC (MySQL). Je n’étais pas sûr des conditions supplémentaires, ils se mélangent bien ...
    2013-01-05 11: 11: 24Z

En termes simples:

Jointure interne - > Prenez SEULEMENT les enregistrements communs des tables parent et enfant WHERE. La clé primaire de la table parent correspond à la clé étrangère de la table enfant.

Rejoindre la gauche - >

pseudo-code

 
1.Take All records from left Table
2.for(each record in right table,) {
    if(Records from left & right table matching on primary & foreign key){
       use their values as it is as result of join at the right side for 2nd table.
    } else {
       put value NULL values in that particular record as result of join at the right side for 2nd table.
    }
  }

Jointure droite : exactement à l'opposé de la jointure gauche. Mettez le nom de la table dans LEFT JOIN à droite dans la jointure à droite, vous obtenez le même résultat que LEFT JOIN.

Jointure externe : affichez tous les enregistrements des deux tables No matter what. Si les enregistrements de la table de gauche ne correspondent pas à la table de droite en fonction de la clé primaire, Forieign, utilisez la valeur NULL en tant que résultat de la jointure.

Exemple:

Exemple

Supposons maintenant pour 2 tables

1.employees , 2.phone_numbers_employees

 
employees : id , name 

phone_numbers_employees : id , phone_num , emp_id   

Ici, la table des employés est la table maître, phone_numbers_employees est la table enfant (elle contient la clé étrangère emp_id qui connecte employee.id à sa table enfant.)

Jointures internes

Prenez les enregistrements de 2 tables UNIQUEMENT SI La table primaire de la table des employés (son identifiant) correspond à la clé étrangère de la table enfant phone_numbers_employees (emp_id) .

La requête serait donc:

 
SELECT e.id , e.name , p.phone_num FROM employees AS e INNER JOIN phone_numbers_employees AS p ON e.id = p.emp_id;

Dans ce cas, prenez uniquement les lignes correspondantes sur la clé primaire = clé étrangère, comme expliqué ci-dessus. Les lignes non correspondantes sur la clé primaire = clé étrangère sont ignorées en tant que résultat de la jointure.

Jointures à gauche :

La jointure à gauche conserve toutes les lignes de la table de gauche, qu'il y ait ou non une ligne correspondante dans la table de droite.

 
SELECT e.id , e.name , p.phone_num FROM employees AS e LEFT JOIN phone_numbers_employees AS p ON e.id = p.emp_id;

Jointures externes :

 
SELECT e.id , e.name , p.phone_num FROM employees AS e OUTER JOIN phone_numbers_employees AS p ON e.id = p.emp_id;

Schématiquement, cela ressemble à:

Diagramme

    
62
2015-02-19 05: 11: 56Z
  1. Le résultat n'a rien à (faire en soi) avec les clés primaires /uniques /candidates &amp & clés étrangères. Le baviour peut et doit être décrit sans référence à eux. Une jointure croisée est calculée, puis les lignes ne correspondant pas à la condition ON sont filtrées; de plus, pour les jointures externes, les lignes filtrées /non appariées sont étendues de valeurs NULL (par LEFT /RIGHT /FULL et incluses.
    2015-08-10 04: 27: 54Z

Vous utilisez INNER JOIN pour renvoyer toutes les lignes des deux tables contenant une correspondance. c'est-à-dire que dans le tableau résultant, toutes les lignes et toutes les colonnes auront des valeurs.

Dans OUTER JOIN , le tableau obtenu peut contenir des colonnes vides. La jointure externe peut être LEFT ou RIGHT.

LEFT OUTER JOIN renvoie toutes les lignes de la première table, même s'il n'y a aucune correspondance dans la seconde table.

RIGHT OUTER JOIN renvoie toutes les lignes de la deuxième table, même s'il n'y a aucune correspondance dans la première table.

    
55
2015-06-09 03: 21: 07Z

 Ceci est une bonne explication pour les jointures

C’est une bonne explication schématique pour tout type de jointure

source: http://ssiddique.info/understanding-sql- joint-in-easy-way.html

    
54
2016-10-18 18: 48: 59Z

INNER JOIN exige qu’il y ait au moins une correspondance dans la comparaison des deux tableaux. Par exemple, les tableaux A et B qui impliquent A ٨ B (intersection B).

LEFT OUTER JOIN et LEFT JOIN sont identiques. Il donne tous les enregistrements correspondants dans les deux tables et toutes les possibilités de la table de gauche.

De même, RIGHT OUTER JOIN et RIGHT JOIN sont identiques. Il donne tous les enregistrements correspondants dans les deux tables et toutes les possibilités de la bonne table.

FULL JOIN est la combinaison de LEFT OUTER JOIN et RIGHT OUTER JOIN sans duplication.

    
51
2013-09-26 21: 25: 28Z

La réponse est dans la signification de chacun, donc dans les résultats.

  

Remarque:
  En SQLite, il n'y a pas de RIGHT OUTER JOIN ou FULL OUTER JOIN.
  Et aussi en MySQL, il n’ya pas de FULL OUTER JOIN.

Ma réponse est basée sur la Remarque ci-dessus.

Lorsque vous avez deux tables comme celles-ci:

 
--[table1]               --[table2]
id | name                id | name
---+-------              ---+-------
1  | a1                  1  | a2
2  | b1                  3  | b2

CROSS JOIN /OUTER JOIN:
Vous pouvez avoir toutes ces données de tables avec CROSS JOIN ou seulement avec , comme ceci:

 
SELECT * FROM table1, table2
--[OR]
SELECT * FROM table1 CROSS JOIN table2

--[Results:]
id | name | id | name 
---+------+----+------
1  | a1   | 1  | a2
1  | a1   | 3  | b2
2  | b1   | 1  | a2
2  | b1   | 3  | b2

INNER JOIN:
Lorsque vous souhaitez ajouter un filtre aux résultats ci-dessus en fonction d'une relation comme table1.id = table2.id, vous pouvez utiliser INNER JOIN:

 
SELECT * FROM table1, table2 WHERE table1.id = table2.id
--[OR]
SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id

--[Results:]
id | name | id | name 
---+------+----+------
1  | a1   | 1  | a2

LEFT [OUTER] JOIN:
Quand tu veux tout avoirles lignes d'un des tableaux dans le résultat ci-dessus -avec la même relation- vous pouvez utiliser LEFT JOIN:
(Pour RIGHT JOIN , il suffit de changer le lieu des tables)

 
SELECT * FROM table1, table2 WHERE table1.id = table2.id 
UNION ALL
SELECT *, Null, Null FROM table1 WHERE Not table1.id In (SELECT id FROM table2)
--[OR]
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id

--[Results:]
id | name | id   | name 
---+------+------+------
1  | a1   | 1    | a2
2  | b1   | Null | Null

FULL OUTER JOIN:
Si vous souhaitez également que toutes les lignes de l'autre table figurent dans vos résultats, vous pouvez utiliser FULL OUTER JOIN:

 
SELECT * FROM table1, table2 WHERE table1.id = table2.id
UNION ALL
SELECT *, Null, Null FROM table1 WHERE Not table1.id In (SELECT id FROM table2)
UNION ALL
SELECT Null, Null, * FROM table2 WHERE Not table2.id In (SELECT id FROM table1)
--[OR] (recommended for SQLite)
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id
UNION ALL
SELECT * FROM table2 LEFT JOIN table1 ON table2.id = table1.id
WHERE table1.id IS NULL
--[OR]
SELECT * FROM table1 FULL OUTER JOIN table2 On table1.id = table2.id

--[Results:]
id   | name | id   | name 
-----+------+------+------
1    | a1   | 1    | a2
2    | b1   | Null | Null
Null | Null | 3    | b2

Eh bien, en fonction de vos besoins, vous choisissez chacun qui répond à vos besoins;).

    
39
2017-09-12 08: 50: 33Z
  1. Vous pouvez ajouter à votre note qu'il n'y a pas non plus de full outer join dans MySQL.
    2015-06-14 13: 34: 13Z

Jointure interne.

Une jointure combine les lignes de deux tables. Une jointure interne tente de faire correspondre les deux tables en fonction des critères spécifiés dans la requête et renvoie uniquement les lignes qui correspondent. Si une ligne de la première table de la jointure correspond à deux lignes de la seconde table, deux lignes seront renvoyées dans les résultats. Si une ligne dans la première table ne correspond pas à une ligne dans la seconde, elle n’est pas renvoyée; De même, s’il existe une ligne dans la deuxième table qui ne correspond pas à une ligne dans la première, elle n’est pas renvoyée.

Jointure externe.

Une jointure gauche tente de trouver une correspondance entre les lignes de la première table et les lignes de la seconde table. S'il ne peut pas trouver de correspondance, il renverra les colonnes de la première table et laissera les colonnes de la deuxième table vides (null).

    
31
2016-02-02 11: 14: 00Z

Je ne vois pas beaucoup de détails sur les performances et l'optimiseur dans les autres réponses.

Parfois, il est bon de savoir que seul INNER JOIN est associatif, ce qui signifie que l’optimiseur a le plus d’options pour jouer avec. Il peut réorganiser l'ordre de jointure pour le rendre plus rapide en conservant le même résultat. L’optimiseur peut utiliser la plupart des modes de jointure.

En règle générale, il est recommandé d’essayer d’utiliser INNER JOIN à la place des différents types de jointure. (Bien sûr, si cela est possible en considérant l'ensemble de résultats attendus.)

Il existe quelques bons exemples et explications concernant cet étrange comportement associatif:

25
2017-05-23 12: 34: 48Z
  1. Il ne peut pas s'agir d'une "bonne pratique" d'utiliser un type de jointure plutôt qu'un autre. La jointure que vous utilisez détermine les données que vous souhaitez. Si vous en utilisez un autre, vous vous trompez. De plus, dans Oracle au moins, cette réponse est complètement fausse. Cela semble totalement faux pour tout et vous n'avez aucune preuve. Avez-vous des preuves?
    2014-12-26 08: 51: 00Z
  2. 1. Je veux dire essayer d'utiliser. J'ai vu beaucoup de gens utiliser LEFT OUTER pour s'inscrire partout sans raison valable. (Les colonnes jointes n'étaient «pas nulles».) Dans ces cas, il serait certainement préférable d'utiliser des jointures INNER. 2. J'ai ajouté un lien expliquant mieux que possible le comportement non associatif.
    2014-12-26 11: 01: 45Z
  3. Comme je sais, INNER JOIN est plus lent que LEFT JOIN dans la plupart des cas, les utilisateurs peuvent utiliser LEFT JOIN au lieu de INNER JOIN en ajoutant un WHERE pour supprimer les résultats inattendus NULL;) <.>
    2015-05-13 03: 01: 51Z
  4. Ces commentaires m'ont rendu un peu incertain. Pourquoi pensez-vous que INNER est plus lent?
    2015-05-13 08: 04: 42Z

Les algorithmes précis pour INNER JOIN, LEFT/RIGHT OUTER JOIN sont les suivants:

  1. Prenez chaque ligne de la première table: a
  2. Considérez toutes les lignes de la deuxième table à côté: (a, b[i])
  3. Evaluez la clause ON ... par rapport à chaque paire: ON( a, b[i] ) = true/false?
    • Lorsque la condition est évaluée à true, renvoyez cette ligne combinée (a, b[i]).
    • Lorsque vous atteignez la fin de la deuxième table sans correspondance et qu'il s'agit d'un Outer Join, renvoyez une paire (virtuelle) en utilisant Null pour toutes les colonnes de l'autre table: (a, Null) pour une jointure externe à GAUCHE ou (Null, b) pour une jointure à DROITE. jointure externe. Cela permet de garantir que toutes les lignes de la première table existent dans les résultats finaux.

Remarque: la condition spécifiée dans la clause ON peut être quelconque, il n'est pas nécessaire d'utiliser Clés primaires (et vous n'avez pas besoin de toujours faire référence aux colonnes de les deux tables)! Par exemple:

 Jointure interne vs jointure externe gauche

 entrez la description de l'image ici

Remarque: Jointure gauche = jointure externe gauche, jointure droite = jointure droite.

    
22
2018-10-11 14: 16: 16Z

Après avoir critiqué le très apprécié diagramme de Venn en rouge-ombré, il m'a semblé juste de poster ma propre tentative.

Bien que la réponse de @Martin Smith soit de loin la meilleure de ce groupe, elle ne montre que la colonne clé de chaque tableau, alors que, dans l’idéal, elle devrait également figurer dans les colonnes non-clés.

Le mieux que j'ai pu faire dans la demi-heure autorisée, mais je ne pense toujours pas que cela montre de manière adéquate que les valeurs nulles existent en raison de l'absence de valeurs de clé dans TableB ou que OUTER JOIN est en fait une union plutôt que une jointure:

 entrez la description de l'image ici

    
20
2016-01-22 15: 23: 20Z
  1. La question demande une différence entre les jointures INNER et OUTER bien que, pas nécessairement gauche, jointure externe lol
    2016-01-22 19: 32: 48Z
  2. @ LearnByReading: ma photo de droite est une jointure externe droite, c'est-à-dire remplacer TableA a LEFT OUTER JOIN TableB b par TableB B RIGHT OUTER JOIN TableA a
    2019-04-29 07: 58: 14Z

 entrer la description de l'image ici

  •  INNER JOIN jointure la plus typique pour deux tables ou plus. Il retourne la correspondance des données sur la relation table ON table primaire et forignkey.
  •  OUTER JOIN est identique à INNER JOIN, mais il inclut également des données NULL sur ResultSet.
    •  LEFT JOIN = INNER JOIN + Données non appariées de la table gauche avec Null correspondant à la table de droite.
    •  RIGHT JOIN = INNER JOIN + Données non appariées de la table droite avec Null correspondance dans la table de gauche.
    •  FULL JOIN = INNER JOIN + Données non appariées sur les tables gauche et droite avec 493 correspondances.
  • La jointure automatique n'est pas un mot clé en SQL, lorsqu'une table fait référence à des données en tant que telles. En utilisant Null et INNER JOIN, nous pouvons écrire des requêtes de jointure automatique.

Par exemple:

 OUTER JOIN     
19
2019-03-21 22: 19: 48Z

Définitions les plus simples

Jointure interne: renvoie les enregistrements correspondants des deux tables.

Jointure externe complète: renvoie les enregistrements correspondants et non correspondants des deux tables, avec la valeur null pour les enregistrements non correspondants de Les deux tableaux .

Jointure externe gauche: renvoie les enregistrements correspondants et non identiques uniquement à partir de la table sur Côté gauche .

Jointure externe droite: renvoie les enregistrements correspondants et non identiques uniquement à partir de la table sur Côté droit .

En bref

Matched + Left Unmatched + Right Unmatched = Jointure externe complète

Matched + Left Unmatched = Jointure externe gauche

Matched + Right Unmatched = Jointure externe droite

Matched = Jointure interne

    
17
2016-04-28 09: 10: 48Z
  1. Ceci est brillant et explique pourquoi la jointure ne fonctionne pas comme prévu pour les index de séries temporelles. Les horodatages séparés d'une seconde sont incomparables.
    2017-09-05 09: 22: 46Z
  2. @ yeliabsalohcin Vous n'expliquez pas "comme prévu" ici ou "fonctionne" dans votre commentaire sur la question. C'est juste une idée fausse personnelle inexpliquée que vous attendez étrangement des autres. Si vous traitez les mots avec négligence lorsque vous lisez (interprétation erronée d'un écrit et /ou si vous acceptez d'écrire de manière peu claire) comme si vous écriviez ici, vous pouvez vous attendre à avoir des idées fausses. En fait, cette réponse, comme la plupart des gens ici, n’est pas claire. faux. "Jointure interne: renvoie les enregistrements correspondants des deux tables" est incorrect lorsque les ensembles de colonnes en entrée diffèrent. C'est essayer de dire quelque chose, mais ce n'est pas . (Voir ma réponse.)
    2017-11-22 02: 52: 49Z

En termes simples,

1. INNER JOIN OR EQUI JOIN: renvoie le jeu de résultats qui correspond uniquement à la condition des deux tableaux.

2. OUTER JOIN: renvoie le jeu de résultats de toutes les valeurs des deux tables, que la condition soit identique ou non.

3. JOINDRE LEFT: renvoie le jeu de résultats de toutes les valeurs du tableau de gauche et uniquement les lignes correspondant à la condition du tableau de droite.

4. JOINDRE DROITE: renvoie le jeu de résultats de toutes les valeurs du tableau de droite et uniquement les lignes correspondant à la condition du tableau de gauche.

5. JOINDRE COMPLET: Les jointures complètes et externes sont identiques.

    
6
2016-10-13 09: 04: 54Z

1. Jointure interne: aussi appelée jointure. Il renvoie les lignes présentes dans le tableau de gauche et le tableau de droite uniquement s'il existe une correspondance . Sinon, il ne renvoie aucun enregistrement.

Exemple:

 
SELECT * 
FROM   tablea a 
       INNER JOIN tableb b 
               ON a.primary_key = b.foreign_key 
       INNER JOIN tablec c 
               ON b.primary_key = c.foreign_key 

 output1

2. Jointure externe complète : aussi appelée jointure complète. Il renvoie toutes les lignes présentes dans le tableau de gauche et le tableau de droite.

Exemple:

 
SELECT
  e1.emp_name,
  e2.emp_salary    
FROM emp1 e1
INNER JOIN emp2 e2
  ON e1.emp_id = e2.emp_id

 output2

3. Jointure externe gauche: ou simplement appelé "Jointure gauche". Il renvoie toutes les lignes présentes dans la table de gauche et les lignes correspondantes de la table de droite (le cas échéant).

4. Jointure externe droite : Également appelée "Jointure droite". Il renvoie les lignes correspondantes de la table de gauche (le cas échéant) et de toutes les lignes présentes dans la table de droite.

 rejoint

Avantages des jointures

  1. s'exécute plus rapidement.
4
2017-07-28 04: 17: 49Z
  1. Ceci n'est que correct lorsque les tables ont le même ensemble de colonnes. (Cela confond la jointure interne avec l'intersection et la jointure complète avec l'union.) De plus, "match" est indéfini. Lisez mes autres commentaires.
    2017-07-24 13: 02: 37Z
  • Jointure interne : une jointure interne utilisant l'une des requêtes équivalentes donne l'intersection des deux tables , c'est-à-dire les lignes qu'ils ont en commun.

  • Jointure externe gauche : une jointure externe gauche donnera toutes les lignes de A, ainsi que toutes les lignes communes de B.

  • Jointure externe complète : une jointure externe complète vous donnera l'union de A et B, c'est-à-dire toutes les lignes de A et toutes les lignes de B. Si quelque chose dans A n’a pas de donnée correspondante dans B, alors la partie B est nulle et vice-versa

3
2016-06-23 13: 55: 57Z
  1. C'est faux et peu clair. La jointure est pas une intersection, sauf si les tables ont les mêmes colonnes. Les jointures externes n'ont pas de lignes de A ou B sauf si elles ont les mêmes colonnes, auquel cas il n'y a pas de null ajouté. Vous essayez de dire quelque chose, mais vous ne le dites pas. Vous n'expliquez pas correctement ou clairement.
    2017-02-03 11: 15: 30Z
  2. @ philipxy: En désaccord sur votre déclaration
    SELECT
      e1.emp_name,
      e2.emp_salary    
    FROM emp1 e1
    FULL OUTER JOIN emp2 e2
      ON e1.emp_id = e2.emp_id
    
    Non. Vous pouvez joindre toutes les colonnes de votre choix et, si la valeur correspond, elles seront jointes.
    2017-04-11 09: 23: 49Z
  3. Ce commentaire est aussi peu clair que votre réponse. (Je suppose que vous pensez peut-être quelque chose comme, l'ensemble de valeurs de sous-lignes pour les colonnes communes du résultat est l'intersection des ensembles de valeurs de sous-lignes pour les colonnes communes de chacune des entrées; mais ce n'est pas ce que vous avez écrit. ne sont pas claires.)
    2017-04-11 14: 24: 05Z

Join is not an intersection unless the tables have the same columns (alias left join on) renvoie left outer join on lignes inner join on lignes de table gauche non appariées étendues par des valeurs NULL.

union all, également appelé right join (on) renvoie right outer join on lignes inner join on lignes de table de droite sans correspondance étendues par des valeurs NULL.

union all (alias full join on) renvoie full outer join on lignes inner join on lignes de table gauche non appariées étendues par NULL union all lignes de table droite non appariées étendues par NULL.

(SQL Standard 2006 SQL /Foundation 7.7 Règles de syntaxe 1, Règles générales 1 b, 3 c & 5 b.)

Donc, ne union all pas avant de savoir en quoi outer join est impliqué.

Découvrez les lignes renvoyées par inner join .

Lisez mes commentaires là-bas: nombreux sont ceux qui sont confus et mauvaises réponses.

Ensuite, lisez mes commentaires ici concernant les nombreux messages confus & mauvaises réponses.

    
3
2018-07-23 05: 53: 22Z
  1. J'ai en effet lu vos nombreux commentaires. Quand vous dites, "un diagramme de Venn, lorsqu'il est correctement interprété, peut représenter une jointure interne ou externe", voulez-vous dire quand il est correctement interprété par l'observateur ou par le diagramme de Venn lui-même? Si ce dernier, veuillez le dessiner:)
    2019-04-24 16: 08: 07Z
  2. Je ne suis pas sûr de ce que vous essayez de dire. Je parle de l'interprétation standard d'un diagramme de Venn en tant qu'ensembles d'éléments. (Parce que certaines utilisations de diagrammes ne gèrent même pas cela.) "Correctement" pour une application inclut de dire quels sont les ensembles et /ou les éléments. Voir le commentaire en haut de cette page avec 50 votes positifs par rapport à un diagramme de Venn pour les jointures internes et externes. Je vais modifier certains de mes commentaires dans cette question. Je ne veux pas de diagramme de Venn dans cet article.
    2019-04-24 16: 31: 27Z
  3. Je ne le fais pasveux des diagrammes de Venn soit!
    2019-04-25 15: 52: 29Z
  4. Je dois admettre que, malgré ma formulation rapide dans les commentaires, parce que SQL implique des sacs & La culture NULL et SQL n'a pas de terminologie commune pour nommer & Pour distinguer les notions pertinentes, il n’est même pas trivial d’expliquer clairement comment les éléments d’un diagramme de Venn sont 1: 1 avec des "lignes" en sortie, et encore moins des "lignes" en entrée. Ou que font les jointures internes ou externes, sans parler de leur différence. "valeur" peut inclure ou non la valeur NULL. "rangée" peut être une liste de valeurs ou un emplacement dans une valeur de table ou une variable & "=" peut être SQL "=" vs égalité.
    2019-04-25 17: 44: 05Z
  5. Semblable à notre discussion cartésienne-produit-vs-relationnel-produit, je soupçonne que les diagrammes de Venn ont beaucoup de sens pour ceux qui comprennent déjà le différences entre les types de jointure!
    2019-04-29 07: 51: 15Z

La différence entre les jointures internes et externes est la suivante:

  1. La jointure interne est une jointure combinant des tables basées sur des tuples correspondants, alors que la jointure externe est une jointure combinant une table basée sur des tuples appariés et non appariés.
  2. La jointure interne fusionne la ligne correspondante de deux tables dans laquelle les lignes non appariées sont omises, tandis que la jointure externe fusionne les lignes de deux tables et les lignes non appariées se remplissent avec une valeur null.
  3. La jointure interne ressemble à une opération d'intersection, tandis que la jointure externe ressemble à une opération d'union.
  4. Les jointures internes sont de deux types, alors que les jointures externes sont de trois types.
  5. La jointure interne est plus lente, alors que la jointure externe est plus rapide que la jointure interne.
1
2017-10-17 12: 25: 56Z

Considérez ci-dessous deux tables:

EMP

 inner join

Département

 
empid   name    dept_id salary
1       Rob     1       100
2       Mark    1       300
3       John    2       100
4       Mary    2       300
5       Bill    3       700
6       Jose    6       400

Jointure interne:

Généralement écrit sous la forme JOIN dans les requêtes SQL. Il ne renvoie que les enregistrements correspondants entre les tables.

Découvrez tous les employés et leurs noms de département:

.  
deptid  name
1       IT
2       Accounts
3       Security
4       HR
5       R&D

Comme vous le voyez ci-dessus,

Select a.empid, a.name, b.name as dept_name
FROM emp a
JOIN department b
ON a.dept_id = b.deptid
;

empid   name    dept_name
1       Rob     IT
2       Mark    IT
3       John    Accounts
4       Mary    Accounts
5       Bill    Security
n'est pas imprimé à partir de EMP dans le résultat, car son identificateur dept Jose ne trouve pas de correspondance dans la table Service. De même, les lignes 6 et HR ne sont pas imprimées à partir de la table Département car elles ne correspondent à aucune correspondance dans la table Emp.

Ainsi, INNER JOIN ou juste JOIN, ne renvoie que les lignes correspondantes.

JOINDRE GAUCHE:

Ceci renvoie tous les enregistrements de la table LEFT et uniquement les enregistrements correspondants de la table RIGHT.

 R&D

Ainsi, si vous observez le résultat ci-dessus, tous les enregistrements de la table LEFT (Emp) sont imprimés avec uniquement les enregistrements correspondants de la table RIGHT.

Les lignes

Select a.empid, a.name, b.name as dept_name
FROM emp a
LEFT JOIN department b
ON a.dept_id = b.deptid
;

empid   name    dept_name
1       Rob     IT
2       Mark    IT
3       John    Accounts
4       Mary    Accounts
5       Bill    Security
6       Jose    
et HR ne sont pas imprimées à partir de la table Département car elles n'ont pas trouvé de correspondance dans la table Emp sur dept_id.

Ainsi, LEFT JOIN renvoie TOUTES les lignes de la table gauche et uniquement les lignes correspondantes de la table RIGHT.

Peut également consulter DEMO ici .

    
0
2018-11-25 15: 04: 40Z
  1. Rien dans cela ne décrit clairement ce que fait l'une ou l'autre des jointures. (Cela ne répond pas non plus à une "différence" entre eux, à part le fait de dire qu'ils sont différents.) Cela n’ajoute rien aux nombreuses réponses (beaucoup très mises à jour) d’une question de 10 ans - est-ce "utile"?
    2018-11-27 01: 19: 10Z
R&D
source placée ici