24 Frage: Was ist der Unterschied zwischen "INNER JOIN" und "OUTER JOIN"?

Frage erstellt am Wed, Feb 13, 2019 12:00 AM

Wie passen auch LEFT JOIN, RIGHT JOIN und FULL JOIN zusammen?

    
4376
  1. Von den Antworten & Kommentare & Ihre Referenzen unter nur eines erklärt tatsächlich, wie Venn-Diagramme die Operatoren darstellen: Der Kreisschnittbereich stellt die Menge der Zeilen in A JOIN B dar. Der für jeden Kreis eindeutige Bereich stellt die Menge der Zeilen dar, die Sie durch die Verwendung des Operators erhalten Tabellenzeilen, die nicht an A JOIN B teilnehmen und die Spalten hinzufügen, die für die andere Tabelle eindeutig sind, sind alle auf NULL gesetzt. (Und die meisten geben eine vage falsche Entsprechung der Kreise zu A und B.)
    18.10.2014 20: 24: 59Z
  2. Viele Antworten sind bereits verfügbar, aber ich habe dieses erwähnte Tutorial noch nicht gesehen. Wenn Sie Venn-Diagramme kennen, ist dies ein großartiges Tutorial: blog.codinghorror .com /eine-visuelle-erklärung-von-sql-joins Für mich ist es prägnant genug, um schnell gelesen zu werden, aber trotzdem das gesamte Konzept zu erfassen und alle Fälle sehr gut zu bearbeiten. Wenn Sie nicht wissen, was Venn-Diagramme sind, lernen Sie sie. Nehmen Sie sich dafür 5-10 Minuten Zeit und helfen Sie, wann immer Sie das Arbeiten mit Sätzen und das Verwalten von Operationen an Sätzen visualisieren müssen.
    2017-05-09 09: 04: 59Z
  3. @ DanteTheSmith Nein, das hat die gleichen Probleme wie die Diagramme hier. Siehe meinen Kommentar zu der Frage & Im Folgenden finden Sie genau diesen Blog-Beitrag: "Jeff lehnt seinen Blog ein paar Seiten weiter in den Kommentaren ab". Venn-Diagramme zeigen Elemente in Mengen. Versuchen Sie einfach, genau zu identifizieren, welche Mengen und welche Elemente in diesen Diagrammen enthalten sind. Die Mengen sind nicht die Tabellen und die Elemente sind nicht ihre Zeilen. Es können auch zwei beliebige Tabellen verknüpft werden, sodass PKs & FKs sind irrelevant. Alles Schein. Sie tun genau das, was Tausende von anderen getan haben - haben einen vagen Eindruck , den Sie (zu Unrecht) für sinnvoll halten . div>
    2017-05-18 05: 57: 51Z
  4. Könnte jemand dies in Bezug auf indizierte Zeitreihendaten beantworten? Inner- und Outer-Joins funktionieren in Bezug auf Zeitstempel oft nicht im menschlichen /Venn-Sinne nur Millisekunden anders.
    2017-09-05 09: 26: 18Z
  5. Der ursprüngliche Titel war klarer, was gefragt wurde ("verschiedene Verknüpfungstypen" könnten sich auf physische Verknüpfungstypen beziehen, z. B. Hash und Zusammenführung). Der ursprüngliche Titel Auch bei Suchmaschinen war die Anzahl der Aufrufe eindeutig wirksam. Ich habe diese nicht benötigte Bearbeitung zurückgesetzt
    13.02.2019 08: 14: 08Z
  6. 24 Antworten                              24                         

    Angenommen, Sie treten Spalten ohne Duplikate bei. Dies ist ein sehr häufiger Fall:

    • Ein innerer Join von A und B ergibt das Ergebnis von A intersect B, dh den inneren Teil eines Venn - Diagramm Schnittpunkt.

    • Eine äußere Verknüpfung von A und B ergibt die Ergebnisse von A union B, d. h. die äußeren Teile einer Venn-Diagramm-Union.

    Beispiele

    Angenommen, Sie haben zwei Tabellen mit jeweils einer einzelnen Spalte und folgenden Daten:

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

    Beachten Sie, dass (1,2) für A eindeutig sind, (3,4) gemeinsam sind und (5,6) für B eindeutig sind.

    Innerer Join

    Eine innere Verknüpfung unter Verwendung einer der äquivalenten Abfragen ergibt den Schnittpunkt der beiden Tabellen, d. h. der beiden Zeilen, die sie gemeinsam haben.

     
    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
    

    Linke äußere Verknüpfung

    Eine linke äußere Verknüpfung gibt alle Zeilen in A sowie alle gemeinsamen Zeilen in B an.

     
    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
    

    Rechte äußere Verknüpfung

    Eine rechte äußere Verknüpfung ergibt alle Zeilen in B, pluns alle gemeinsamen Zeilen in 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
    

    Vollständige äußere Verknüpfung

    Eine vollständige äußere Verknüpfung gibt Ihnen die Vereinigung von A und B, dh alle Zeilen in A und alle Zeilen in B. Wenn etwas in A kein entsprechendes Datum in B hat, ist der B-Teil null und umgekehrt.

     
    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. Es ist ratsam, das Beispiel zu erweitern, indem Sie eine weitere Zeile in Tabelle B mit dem Wert 4 hinzufügen. Dies zeigt, dass innere Verknüpfungen nicht gleich Anzahl von Zeilen sein müssen.
      2009-08-30 12: 59: 48Z
    2. Eine hervorragende Erklärung, jedoch diese Aussage: Eine äußere Verknüpfung von A und B ergibt die Ergebnisse von A union B, dh die äußeren Teile einer venn diagram union . ist nicht richtig formuliert. Bei einer äußeren Verknüpfung werden die Ergebnisse von A als Schnittpunkt B angezeigt, zusätzlich zu einer der folgenden: Alle A (linke Verknüpfung), Alle B (rechte Verknüpfung) oder Alle A und Alle B (vollständige Verknüpfung). Nur dieses letzte Szenario ist wirklich A union B. Trotzdem eine gut geschriebene Erklärung.
      2011-05-03 19: 57: 42Z
    3. Habe ich recht, dass FULL JOIN ein Alias ​​für FULL OUTER JOIN und LEFT JOIN ein Alias ​​für LEFT OUTER JOIN ist?
      2013-01-01 20: 29: 27Z
    4. ja, eine großartige und ausgezeichnete Erklärung. aber warum sind in spalte b die werte nicht in ordnung? das heißt, es ist 6,5 nicht als 5,6?
      2013-03-04 08: 39: 36Z
    5. @ Ameer, danke. Join garantiert keine Bestellung, Sie müssten eine ORDER BY-Klausel hinzufügen.
      2013-03-05 00: 28: 16Z

    Die Venn-Diagramme machen das nicht wirklich für mich.

    Sie zeigen beispielsweise keine Unterscheidung zwischen einem Cross-Join und einem Inner-Join oder generell keine Unterscheidung zwischen verschiedenen Join-Prädikattypen oder bieten einen Rahmen für Überlegungen zur Funktionsweise.

    Es gibt keinen Ersatz für das Verständnis der logischen Verarbeitung und es ist sowieso relativ einfach zu begreifen.

    1. Stellen Sie sich eine Kreuzverknüpfung vor.
    2. Bewerten Sie die on-Klausel für alle Zeilen aus Schritt 1, wobei diejenigen beibehalten werden, für die das Vergleichselement den Wert true ergibt
    3. (Nur für äußere Verknüpfungen) Fügen Sie in alle äußeren Zeilen, die in Schritt 2 verloren gegangen sind, zurück.

    (Hinweis: In der Praxis kann das Abfrageoptimierungsprogramm effizientere Methoden zum Ausführen der Abfrage finden als die obige rein logische Beschreibung, aber das Endergebnis muss dasselbe sein.)

    Ich beginne mit einer animierten Version eines vollständigen Outer-Joins . Weitere Erläuterungen folgen.

     Bildbeschreibung hier eingeben


    Erklärung

    Quelltabellen

    Linkbeschreibung hier eingeben

    Beginnen Sie zuerst mit einem CROSS JOIN (AKA Cartesian Product). Dies hat keine ON-Klausel und gibt einfach jede Kombination von Zeilen aus den beiden Tabellen zurück.

    Wählen Sie A.Colour, B.Colour FROM A CROSS JOIN B aus.

    Linkbeschreibung hier eingeben

    Inner- und Outer-Joins haben ein "ON" -Klauselprädikat.

    • Innerer Join: Bewerten Sie die Bedingung in der "ON" -Klausel für alle Zeilen im Cross-Join-Ergebnis. Wenn true, wird die verknüpfte Zeile zurückgegeben. Anderenfalls verwerfen Sie es.
    • Linke äußere Verknüpfung: Entspricht der inneren Verknüpfung für alle Zeilen in der linken Tabelle, die nicht übereinstimmen, und gibt diese mit NULL-Werten für die rechten Tabellenspalten aus.
    • Right Outer Join. Entspricht dem Inner Join für alle Zeilen in der rechten Tabelle, die nicht übereinstimmen, und gibt diese mit NULL-Werten für die linken Tabellenspalten aus.
    • Vollständiger äußerer Join. Entspricht dem inneren Join und behält dann die nicht übereinstimmenden linken Zeilen wie im linken äußeren Join und die nicht übereinstimmenden rechten Zeilen wie im rechten äußeren Join bei.

    Einige Beispiele

    AUSWÄHLENA.Colour, B.Colour VON EINEM INNEREN VERBINDEN B AUF A.Colour = B.Colour

    Das obige ist der klassische Equi-Join.

    Inner Join

    Animierte Version

     Bildbeschreibung hier eingeben

    WÄHLEN SIE A.Farbe, B.Farbe AUS EINEM INNEREN JOIN B AUF A.Farbe NICHT IN ('Grün', 'Blau')

    Die innere Verknüpfungsbedingung muss nicht unbedingt eine Gleichheitsbedingung sein und muss nicht auf Spalten aus beiden (oder auch nur einer) der Tabellen verweisen. Wenn Sie A.Colour NOT IN ('Green','Blue') für jede Zeile des Cross-Joins auswerten, wird

    zurückgegeben

    inner 2

    Wählen Sie A.Colour, B.Colour FROM A INNER JOIN B ON 1 = 1.

    Die Verknüpfungsbedingung wird für alle Zeilen im Kreuzverknüpfungsergebnis als "wahr" ausgewertet. Dies entspricht also genau einer Kreuzverknüpfung. Ich werde das Bild der 16 Zeilen nicht noch einmal wiederholen.

    WÄHLEN SIE A.Farbe, B.Farbe VON EINER LINKEN AUSSENVERBINDUNG B AUF A.Farbe = B.Farbe

    Outer Joins werden wie Inner Joins logisch ausgewertet, mit der Ausnahme, dass eine Zeile aus der linken Tabelle (für einen Left Join) überhaupt nicht mit Zeilen aus der rechten Tabelle verknüpft wird und im Ergebnis mit beibehalten wird NULL Werte für die rechten Spalten.

    LOJ

    WÄHLEN SIE A.Farbe, B.Farbe VON EINER LINKEN AUSSENVERBINDUNG B AUF A.Farbe = B.Farbe, WO B.Farbe NULL IST

    Dies schränkt das vorherige Ergebnis einfach so ein, dass nur die Zeilen mit dem Wert B.Colour IS NULL zurückgegeben werden. In diesem speziellen Fall sind dies die Zeilen, die beibehalten wurden, da sie in der rechten Tabelle nicht übereinstimmten, und die Abfrage gibt die einzelne rote Zeile zurück, die in Tabelle B nicht übereinstimmt. Dies wird als Anti-Semi-Join bezeichnet.

    Es ist wichtig, eine Spalte für den IS NULL-Test auszuwählen, die entweder nicht nullwertfähig ist oder für die die Verknüpfungsbedingung sicherstellt, dass alle NULL-Werte ausgeschlossen werden, damit dieses Muster ordnungsgemäß funktioniert, und zu vermeiden, dass nur zufällige Zeilen zurückgebracht werden Geben Sie für diese Spalte zusätzlich zu den nicht übereinstimmenden Zeilen einen NULL-Wert an.

    loj ist null

    WÄHLEN SIE A.Farbe, B.Farbe AUS EINER RECHTEN AUSSENVERBINDUNG B AUF A.Farbe = B.Farbe

    Rechte äußere Verknüpfungen verhalten sich ähnlich wie linke äußere Verknüpfungen, außer dass nicht übereinstimmende Zeilen aus der rechten Tabelle beibehalten werden und die linken Spalten durch Nullen erweitert werden.

    ROJ

    WÄHLEN SIE A.Farbe, B.Farbe AUS EINER VOLLSTÄNDIGEN AUSSENVERBINDUNG B AUF A.Farbe = B.Farbe

    Vollständige äußere Verknüpfungen kombinieren das Verhalten von linken und rechten Verknüpfungen und behalten die nicht übereinstimmenden Zeilen aus der linken und der rechten Tabelle bei.

    FOJ

    WÄHLEN SIE A.Farbe, B.Farbe AUS EINEM VOLLSTÄNDIGEN OUTER-JOIN B EIN 1 = 0

    Keine Zeilen im Cross-Join stimmen mit dem 1=0-Prädikat überein. Alle Zeilen von beiden Seiten werden unter Verwendung der normalen Outer-Join-Regeln mit NULL in den Spalten der Tabelle auf der anderen Seite beibehalten.

    FOJ 2

    WÄHLEN SIE COALESCE (A.Colour, B.Colour) ALS Farbe AUS EINEM VOLLSTÄNDIGEN OUTER-JOIN B EIN 1 = 0

    Mit einer geringfügigen Änderung der vorhergehenden Abfrage könnte man eine UNION ALL der beiden Tabellen simulieren.

    UNION ALL

    WÄHLEN SIE A.Farbe, B.Farbe VON EINEM LINKEN ÄUßEREN VERBINDEN B AUF A.Farbe = B.Farbe WO B.Farbe = 'Grün'

    Beachten Sie, dass die WHERE-Klausel (falls vorhanden) nach dem Join logisch ausgeführt wird. Ein häufiger Fehler besteht darin, einen Left Outer Join auszuführen und dann eine WHERE-Klausel mit einer Bedingung in der rechten Tabelle einzufügen, die die nicht übereinstimmenden Zeilen ausschließt. Das obige führt letztendlich die äußere Verknüpfung aus ...

    LOJ

    ... und dann wird die "Where" -Klausel ausgeführt. NULL= 'Green' wird nicht als wahr ausgewertet, sodass die durch die äußere Verknüpfung erhaltene Zeile (zusammen mit der blauen) verworfen wird und die Verknüpfung effektiv wieder in eine innere umgewandelt wird.

    LOJtoInner

    Wenn nur Zeilen aus B mit der Farbe Grün und alle Zeilen aus A einbezogen werden sollen, ungeachtet der korrekten Syntax

    WÄHLEN SIE A.Farbe, B.Farbe VON A LINKS AUSSEN VERBINDEN B AUF A.Farbe = B.Farbe UND B.Farbe = 'Grün'

    Bildbeschreibung hier eingeben

    SQL-Geige

    Sehen Sie sich diese Beispiele an, die live unter SQLFiddle.com ausgeführt werden .

        
    623
    03.08.2018 07: 59: 59Z
    1. Ich werde sagen, dass dies zwar bei mir nicht annähernd so gut funktioniert wie bei den Venn-Diagrammen, aber ich schätze, dass die Leute unterschiedlich sind und anders lernen und dies sehr gut präsentiert wird Ich unterstütze @ypercube bei der Vergabe der Bonuspunkte. Auch eine gute Arbeit, die den Unterschied erklärt, zusätzliche Bedingungen in die JOIN-Klausel und die WHERE-Klausel einzufügen. Ein großes Lob an Sie, Martin Smith
      2014-12-20 04: 48: 36Z
    2. @OldPro Die Venn-Diagramme sind soweit in Ordnung, aber sie enthalten keine Informationen darüber, wie ein Cross-Join dargestellt oder eine Art von Join-Prädikat, z als equi von einem anderen verbinden. Das mentale Modell der Bewertung des Join-Prädikats für jede Zeile des Cross-Join-Ergebnisses wird dann in nicht übereinstimmenden Zeilen addiert, wenn ein äußerer Join vorliegt, und schließlich wird bewertet, wo das für mich besser funktioniert.
      20.12.2014 11: 05: 32Z
    3. Die Venn-Diagramme eignen sich zum Darstellen von Vereinigungen, Schnittpunkten und Unterschieden, jedoch nicht für Verknüpfungen. Sie haben einen geringen pädagogischen Wert für sehr einfache Verknüpfungen, d. H. Verknüpfungen, bei denen sich die Verknüpfungsbedingung auf eindeutige Spalten bezieht.
      20.12.2014 22: 28: 49Z
    4. @ Arth - Nein, Sie liegen falsch. SQL Fiddle sqlfiddle.com/#!3/9eecb7db59d16c80417c72d1/5155 Das ist etwas Diagramme können nicht veranschaulichen.
      28.01.2016, 15: 54: 10Z
    5. @ MartinSmith Wow, ich stimme zu, ich liege total falsch! Ich war es zu gewohnt, mit One-to-Manys zu arbeiten. Vielen Dank für die Korrektur.
      28.01.2016, 15: 57: 18Z

    Joins werden verwendet, um die Daten aus zwei Tabellen zu kombinieren. Das Ergebnis ist eine neue temporäre Tabelle. Joins werden auf der Grundlage eines so genannten Prädikats ausgeführt, das die Bedingung angibt, die zum Ausführen eines Joins verwendet werden soll. Der Unterschied zwischen einem inneren und einem äußeren Join besteht darin, dass ein innerer Join nur die Zeilen zurückgibt, die tatsächlich auf der Grundlage des Join-Prädikats übereinstimmen. Betrachten wir die Mitarbeiter- und Standorttabelle:

    Bildbeschreibung hier eingeben

    Innerer Join: - Inner Join erstellt eine neue Ergebnistabelle, indem Spaltenwerte aus zwei Tabellen ( Employee und Location ) basierend auf dem Join-Prädikat kombiniert werden. Die Abfrage vergleicht jede Zeile von Employee mit jeder Zeile von Location , um alle Zeilenpaare zu finden, die das Join-Prädikat erfüllen. Wenn das Join-Prädikat erfüllt ist, indem Nicht-NULL-Werte abgeglichen werden, werden die Spaltenwerte für jedes übereinstimmende Zeilenpaar von Employee und Location zu einer Ergebniszeile kombiniert. So sieht die SQL für einen inneren Join aus:

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

    Im Folgenden sehen Sie das Ergebnis der Ausführung von SQL: Bildbeschreibung hier eingeben  Bildbeschreibung hier eingeben

    Außenverbindung: - Für einen Outer Join muss nicht für jeden Datensatz in den beiden verknüpften Tabellen ein übereinstimmender Datensatz vorhanden sein. Die verknüpfte Tabelle behält jeden Datensatz bei - auch wenn kein anderer übereinstimmender Datensatz vorhanden ist. Äußere Verknüpfungen unterteilen sich weiter in linke äußere Verknüpfungen und rechte äußere Verknüpfungen, je nachdem, welche Tabellenzeilen beibehalten werden (links oder rechts).

    Linke äußere Verbindung: - Das Ergebnis eines Left Outer Joins (oder einfach eines Left Joins) für die Tabellen Employee und Location enthält immer alle Datensätze der Tabelle "left" ( Employee ) >), auch wenn die Join-Bedingung keinen passenden Datensatz in der "richtigen" Tabelle findet ( Location ). So würde die SQL für einen Left Outer Join aussehen, wenn Sie die obigen Tabellen verwenden:

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

    Das Ergebnis dieser SQL-Ausführung sieht folgendermaßen aus: Bildbeschreibung hier eingeben  Bildbeschreibung hier eingeben

    Rechte äußere Verknüpfung: - Ein rechter Outer Join (oder rechter Join) ähnelt stark einem linken Outer Join, mit der Ausnahme, dass die Behandlung der Tabellen umgekehrt ist. Jede Zeile aus der "rechten" Tabelle ( Position ) wird mindestens einmal in der verknüpften Tabelle angezeigt. Wenn keine übereinstimmende Zeile aus der Tabelle "left" ( Employee ) vorhanden ist, wird NULL in den Spalten von Employee für die Datensätze angezeigt, für die keine Übereinstimmung in Location . So sieht die SQL aus:

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

    Anhand der obigen Tabellen können wir zeigen, wie die Ergebnismenge einer rechten äußeren Verknüpfung aussehen würde:

    Bildbeschreibung hier eingeben  Bildbeschreibung hier eingeben

    Vollständige äußere Verbindungen: - Vollständige äußere Verknüpfung oder vollständige Verknüpfung dient zum Beibehalten der nicht übereinstimmenden Informationen, indem nicht übereinstimmende Zeilen in die Ergebnisse einer Verknüpfung einbezogen werden. Verwenden Sie eine vollständige äußere Verknüpfung. Es enthält alle Zeilen aus beiden Tabellen, unabhängig davon, ob die andere Tabelle einen übereinstimmenden Wert hat oder nicht. msgstr

    Bildquelle

    MySQL 8.0-Referenzhandbuch - Join-Syntax

    Oracle Join-Vorgänge

        
    142
    07.08.2018 14: 38: 49Z

    Innerer Join

    Rufen Sie nur die übereinstimmenden Zeilen ab, also A intersect B.

    Geben Sie hier eine Bildbeschreibung ein

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

    Linke äußere Verbindung

    Wählen Sie alle Datensätze aus der ersten Tabelle und alle Datensätze in der zweiten aus Tabelle, die den verbundenen Schlüsseln entspricht.

    Geben Sie hier eine Bildbeschreibung ein

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

    Vollständiger äußerer Join

    Wählen Sie alle Datensätze aus der zweiten Tabelle und alle Datensätze in der ersten aus Tabelle, die den verbundenen Schlüsseln entspricht.

    Geben Sie hier eine Bildbeschreibung ein

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

    Referenzen

    121
    2014-07-21 15: 38: 32Z
    1. Wie heißt das Tool? Ich finde es interessant, da es die Anzahl der Zeilen und Venn-Diagramme
      zeigt
      27.01.2014 12: 23: 03Z
    2. @ GrijeshChauhan Datamartist :)
      27.01.2014 12: 25: 31Z
    3. @ Trushar :( Es ist nicht für Linux-Systeme.
      27.01.2014 12: 27: 42Z
    4. @ GrijeshChauhan Ja, aber Sie können versuchen, es mit wine auszuführen .
      2014-01-27 12: 30: 38Z
    5. Ohh! Ja, ich habe SQLyog mit Wein verwendet. Es gibt auch PlayOnLinux
      27.01.2014 12: 32: 59Z

    In einfachen Worten:

    Ein innerer Join ruft die übereinstimmenden Zeilen ab. only.

    Während ein Outer Join die übereinstimmenden Zeilen aus einer Tabelle und allen Zeilen in einer anderen Tabelle abruft, hängt das Ergebnis davon ab, welche Sie verwenden:

    • Links : Übereinstimmende Zeilen in der rechten Tabelle und alle Zeilen in der linken Tabelle

    • Rechts : Übereinstimmende Zeilen in der linken Tabelle und alle Zeilen in der rechten Tabelle oder

    • Vollständig : Alle Zeilen in allen Tabellen. Es spielt keine Rolle, ob eine Übereinstimmung vorliegt oder nicht

    106
    2014-07-21 15: 35: 37Z
    1. @ nomen Nicht, dass diese Antwort sie anspricht, aber INNER JOIN ist eine Kreuzung und FULL OUTER JOIN ist die entsprechende UNION, wenn der linke & rechte Sätze /Kreise enthalten die Zeilen von (jeweils) LINKS & RECHTS mitmachen. PS Diese Antwort ist unklar in Bezug auf Zeilen in Eingabe und Ausgabe. Es verwechselt "in der linken /rechten Tabelle" mit "hat einen linken /rechten Teil in der linken /rechten" und verwendet "übereinstimmende Zeile" vs "alle", um die Zeile zu bedeuten, die von der anderen Tabelle vs um Nullen erweitert wurde.
      29.11.2015 01: 17: 46Z

    Ein innerer Join zeigt nur dann Zeilen an, wenn sich auf der anderen (rechten) Seite des Joins ein passender Datensatz befindet.

    Eine (linke) äußere Verknüpfung zeigt Zeilen für jeden Datensatz auf der linken Seite an, auch wenn auf der anderen (rechten) Seite der Verknüpfung keine übereinstimmenden Zeilen vorhanden sind. Wenn es keine übereinstimmende Zeile gibt, werden in den Spalten für die andere (rechte) Seite NULL-Werte angezeigt.

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

    Inner-Joins setzen voraus, dass ein Datensatz mit einer zugehörigen ID in der verknüpften Tabelle vorhanden ist.

    Outer-Joins geben Datensätze für die linke Seite zurück, auch wenn für die rechte Seite nichts vorhanden ist.

    Sie haben beispielsweise eine Orders- und eine OrderDetails-Tabelle. Sie sind durch eine "OrderID" verbunden.

    Bestellungen

    • OrderID
    • Kundenname

    Bestelldetails

    • OrderDetailID
    • OrderID
    • Produktname
    • Menge
    • Preis

    Die Anfrage

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

    gibt nur Bestellungen zurück, die auch etwas in der OrderDetails-Tabelle enthalten.

    Wenn Sie es in OUTER LEFT JOIN ändern

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

    dann werden Datensätze aus der Orders-Tabelle zurückgegeben, auch wenn sie keine OrderDetails-Datensätze haben.

    Mit dieser Option können Sie Bestellungen suchen, die keine Bestelldetails haben, die auf eine mögliche verwaiste Bestellung hinweisen, indem Sie eine where-Klausel wie WHERE OrderDetails.OrderID IS NULL hinzufügen.

        
    75
    10.09.2018: 25: 51Z
    1. Ich schätze das einfache, aber realistische Beispiel. Ich habe eine Anfrage wie 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 in 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) mit Erfolg geändert. Ich war mir nicht sicher über die zusätzlichen Bedingungen, sie mischen sich gut ...
      2013-01-05 11: 11: 24Z

    In einfachen Worten:

    Innerer Join - > NUR allgemeine Datensätze aus übergeordneten und untergeordneten Tabellen verwenden, bei denen der Primärschlüssel der übergeordneten Tabelle mit dem Fremdschlüssel in der untergeordneten Tabelle übereinstimmt.

    Linke Verknüpfung - >

    Pseudocode

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

    Right Join : Genau das Gegenteil von Left Join. Wenn Sie den Namen der Tabelle in LEFT JOIN rechts in Right Join eingeben, erhalten Sie die gleiche Ausgabe wie bei LEFT JOIN.

    Äußerer Join : Alle Datensätze in beiden Tabellen No matter what anzeigen. Wenn die Datensätze in der linken Tabelle nicht mit der rechten Tabelle übereinstimmen, basierend auf Primär- und Fremdschlüssel, verwenden Sie den NULL-Wert als Ergebnis der Verknüpfung.

    Beispiel:

    Example

    Nehmen wir jetzt für 2 Tabellen an

    1.employees , 2.phone_numbers_employees

     
    employees : id , name 
    
    phone_numbers_employees : id , phone_num , emp_id   
    

    Hier ist die Employees-Tabelle die Master-Tabelle, phone_numbers_employees ist die Child-Tabelle (sie enthält emp_id als Fremdschlüssel, der employee.id mit der Child-Tabelle verbindet.)

    Innerschließt sich

    an

    Nehmen Sie die Datensätze von 2 Tabellen NUR, wenn der Primärschlüssel der Employees-Tabelle (seine ID) mit dem Fremdschlüssel der Child-Tabelle phone_numbers_employees (emp_id) übereinstimmt. .

    Die Abfrage wäre also:

     
    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;
    

    Nehmen Sie hier nur übereinstimmende Zeilen auf Primärschlüssel = Fremdschlüssel, wie oben erläutert. Nicht übereinstimmende Zeilen auf Primärschlüssel = Fremdschlüssel werden als Ergebnis der Verknüpfung übersprungen.

    Linke Joins :

    Linker Join behält alle Zeilen der linken Tabelle bei, unabhängig davon, ob eine Zeile in der rechten Tabelle übereinstimmt.

     
    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;
    

    Äußere Verknüpfungen :

     
    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;
    

    Diagrammatisch sieht es so aus:

    Diagramm

        
    62
    19.02.2015 05: 11: 56Z
    1. Das Ergebnis hat nichts mit primären /eindeutigen /Kandidatenschlüsseln & fremde Schlüssel. Das Verhalten kann und soll ohne Bezug darauf beschrieben werden. Ein Cross-Join wird berechnet, und Zeilen, die nicht der ON-Bedingung entsprechen, werden herausgefiltert. Zusätzlich werden für äußere Verknüpfungen Zeilen, die gefiltert /nicht zugeordnet sind, um NULL-Werte erweitert (per LEFT /RIGHT /FULL und eingeschlossen.
      )
      10.08.2015 04: 27: 54Z

    Mit INNER JOIN geben Sie alle Zeilen aus beiden Tabellen zurück, in denen eine Übereinstimmung vorliegt. d.h. in der resultierenden Tabelle haben alle Zeilen und Spalten Werte.

    In OUTER JOIN enthält die resultierende Tabelle möglicherweise leere Spalten. Die äußere Verbindung kann entweder LEFT oder RIGHT sein.

    LEFT OUTER JOIN gibt alle Zeilen aus der ersten Tabelle zurück, auch wenn die zweite Tabelle keine Übereinstimmungen enthält.

    RIGHT OUTER JOIN gibt alle Zeilen aus der zweiten Tabelle zurück, auch wenn die erste Tabelle keine Übereinstimmungen enthält.

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

     Dies ist eine gute Erklärung für Verknüpfungen

    Dies ist eine gute schematische Erklärung für alle Arten von Verknüpfungen.

    Quelle: http://ssiddique.info/understanding-sql- joins-in-easy-way.html

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

    INNER JOIN setzt voraus, dass beim Vergleich der beiden Tabellen mindestens eine Übereinstimmung vorliegt. Zum Beispiel Tabelle A und Tabelle B, die A ٨ B implizieren (Schnittpunkt B).

    LEFT OUTER JOIN und LEFT JOIN sind identisch. Es enthält alle Datensätze, die in beiden Tabellen übereinstimmen, sowie alle Möglichkeiten der linken Tabelle.

    In ähnlicher Weise sind RIGHT OUTER JOIN und RIGHT JOIN identisch. Es enthält alle Datensätze, die in beiden Tabellen übereinstimmen, sowie alle Möglichkeiten der richtigen Tabelle.

    FULL JOIN ist die Kombination aus LEFT OUTER JOIN und RIGHT OUTER JOIN ohne Duplizierung.

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

    Die Antwort ist in der Bedeutung jedes einzelnen, also in den Ergebnissen.

      

    Hinweis:
      In SQLite gibt es keine RIGHT OUTER JOIN oder FULL OUTER JOIN.
      Und auch in MySQL gibt es kein FULL OUTER JOIN.

    Meine Antwort basiert auf dem obigen Hinweis .

    Wenn Sie zwei Tabellen wie diese haben:

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

    CROSS JOIN /OUTER JOIN:
    Sie können alle diese Tabellendaten mit CROSS JOIN oder nur mit , wie folgt haben:

     
    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:
    Wenn Sie den obigen Ergebnissen einen Filter hinzufügen möchten, der auf einer Beziehung wie table1.id = table2.id basiert, können Sie INNER JOIN verwenden:

     
    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:
    Wenn Sie alle Zeilen einer Tabelle haben möchtenIm obigen Ergebnis können Sie - mit der gleichen Beziehung - LEFT JOIN verwenden:
    (Für RIGHT JOIN ändern Sie einfach die Position der Tabellen.)

     
    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
    

    KOMPLETTE AUSSENVERBINDUNG:
    Wenn Sie auch alle Zeilen der anderen Tabelle in Ihren Ergebnissen haben möchten, können Sie FULL OUTER JOIN:

    verwenden  
    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
    

    Nun, als Ihr Bedarf wählen Sie jeden aus, der Ihren Bedarf abdeckt;).

        
    39
    2017-09-12 08: 50: 33Z
    1. Sie können Ihrer Notiz hinzufügen, dass in MySQL auch kein full outer join vorhanden ist.
      2015-06-14 13: 34: 13Z

    Innerer Join.

    Ein Join kombiniert die Zeilen aus zwei Tabellen. Ein innerer Join versucht, die beiden Tabellen anhand der in der Abfrage angegebenen Kriterien abzugleichen, und gibt nur die übereinstimmenden Zeilen zurück. Wenn eine Zeile aus der ersten Tabelle im Join mit zwei Zeilen in der zweiten Tabelle übereinstimmt, werden in den Ergebnissen zwei Zeilen zurückgegeben. Wenn die erste Tabelle eine Zeile enthält, die nicht mit der zweiten übereinstimmt, wird sie nicht zurückgegeben. Wenn die zweite Tabelle eine Zeile enthält, die nicht mit der ersten übereinstimmt, wird sie ebenfalls nicht zurückgegeben.

    Außenverbindung.

    Ein Left Join versucht, eine Übereinstimmung der Zeilen aus der ersten Tabelle mit den Zeilen in der zweiten Tabelle zu finden. Wenn keine Übereinstimmung gefunden wird, werden die Spalten aus der ersten Tabelle zurückgegeben und die Spalten aus der zweiten Tabelle leer gelassen (null).

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

    Ich sehe in den anderen Antworten nicht viele Details zu Leistung und Optimierung.

    Manchmal ist es gut zu wissen, dass nur INNER JOIN assoziativ ist, was bedeutet, dass der Optimierer die meiste Option hat, damit zu spielen. Es kann die Verknüpfungsreihenfolge neu anordnen, um das Beibehalten des gleichen Ergebnisses zu beschleunigen. Das Optimierungsprogramm kann die meisten Verknüpfungsmodi verwenden.

    Im Allgemeinen empfiehlt es sich, INNER JOIN anstelle der verschiedenen Verknüpfungsarten zu verwenden. (Natürlich, wenn es unter Berücksichtigung der erwarteten Ergebnismenge möglich ist.)

    Es gibt einige gute Beispiele und Erklärungen für dieses seltsame assoziative Verhalten:

    25
    2017-05-23 12: 34: 48Z
    1. Es kann unmöglich eine "gute Praxis" sein, einen Join-Typ über einen anderen zu setzen. Welcher Join Sie verwenden, bestimmt die gewünschten Daten. Wenn Sie einen anderen verwenden, sind Sie falsch. Zumindest in Oracle ist diese Antwort völlig falsch. Es klingt für alles völlig falsch und Sie haben keinen Beweis. Haben Sie Beweise?
      2014-12-26 08: 51: 00Z
    2. 1. Ich meine, versuche es zu benutzen. Ich habe viele Leute gesehen, die LEFT OUTER ohne guten Grund überall mitmachen. (Die verknüpften Spalten waren 'nicht null'.) In diesen Fällen wäre es definitiv besser, INNER-Verknüpfungen zu verwenden. 2. Ich habe einen Link hinzugefügt, der das nicht assoziative Verhalten besser erklärt, als ich konnte.
      2014-12-26 11: 01: 45Z
    3. Wie ich weiß, ist INNER JOIN in den meisten Fällen langsamer als LEFT JOIN, und Benutzer können LEFT JOIN anstelle von INNER JOIN verwenden, indem sie WHERE hinzufügen, um unerwartete NULL-Ergebnisse zu entfernen /div>
      2015-05-13 03: 01: 51Z
    4. Diese Kommentare haben mich etwas unsicher gemacht. Warum ist INNER Ihrer Meinung nach langsamer?
      2015-05-13 08: 04: 42Z

    Die genauen Algorithmen für INNER JOIN und LEFT/RIGHT OUTER JOIN lauten wie folgt:

    1. Nehmen Sie jede Zeile aus der ersten Tabelle: a
    2. Betrachten Sie alle Zeilen aus der zweiten Tabelle daneben: (a, b[i])
    3. Bewerten Sie die ON ...-Klausel für jedes Paar: ON( a, b[i] ) = true/false?
      • Wenn die Bedingung true ergibt, geben Sie diese kombinierte Zeile (a, b[i]) zurück.
      • Wenn das Ende der zweiten Tabelle ohne Übereinstimmung erreicht ist und dies ein Outer Join ist, geben Sie ein (virtuelles) Paar mit Null für alle Spalten einer anderen Tabelle zurück: (a, Null) für LEFT Outer Join oder (Null, b) für RIGHT äußere Verbindung. Damit wird sichergestellt, dass alle Zeilen der ersten Tabelle in den endgültigen Ergebnissen vorhanden sind.

    Hinweis: Die in Klausel ON angegebene Bedingung kann eine beliebige sein. Die Verwendung von Primärschlüsseln ist nicht erforderlich (und Sie müssen nicht immer auf Spalten von verweisen beide Tabellen)! Zum Beispiel:

     Innerer Join vs. linker äußerer Join


     Bildbeschreibung hier eingeben

    Hinweis: Linke Verknüpfung = Linke äußere Verknüpfung, Rechte Verknüpfung = Rechte äußere Verknüpfung.

        
    22
    11.10.2018 14: 16: 16Z

    Nachdem ich das beliebte rot schattierte Venn-Diagramm kritisiert hatte, fand ich es nur fair, meinen eigenen Versuch zu veröffentlichen.

    Obwohl die Antwort von @Martin Smith bei weitem die beste ist, zeigt er nur die Schlüsselspalte aus jeder Tabelle an, während meines Erachtens idealerweise auch Nichtschlüsselspalten angezeigt werden sollten.

    Das Beste, was ich in der erlaubten halben Stunde tun konnte, zeigt meiner Meinung nach immer noch nicht ausreichend, dass die Nullen aufgrund fehlender Schlüsselwerte in TableB vorhanden sind oder dass OUTER JOIN tatsächlich eher eine Vereinigung als ein Join ist:

    p>

     Bildbeschreibung hier eingeben

        
    20
    2016-01-22 15: 23: 20Z
    1. Die Frage fragt nach dem Unterschied zwischen den Verknüpfungen INNER und OUTER, jedoch nicht unbedingt nach der Verknüpfung left outer lol
      2016-01-22 19: 32: 48Z
    2. @ LearnByReading: Mein Bild auf der rechten Seite ist eine rechte äußere Verknüpfung, d. h. ersetzen Sie TableA a LEFT OUTER JOIN TableB b durch TableB B RIGHT OUTER JOIN TableA a.
      2019-04-29 07: 58: 14Z

     Bildbeschreibung hier eingeben

    •  INNER JOIN Typischster Join für zwei oder mehr Tabellen. Es wird eine Datenübereinstimmung sowohl für die Tabelle ON (Primärschlüssel) als auch für die Fremdschlüsselbeziehung zurückgegeben.
    •  OUTER JOIN entspricht INNER JOIN, enthält jedoch auch NULL-Daten zu ResultSet.
      •  LEFT JOIN = INNER JOIN + Nicht übereinstimmende Daten der linken Tabelle mit Null Übereinstimmungen in der rechten Tabelle.
      •  RIGHT JOIN = INNER JOIN + Nicht übereinstimmende Daten der rechten Tabelle mit Null Übereinstimmungen in der linken Tabelle.
      •  FULL JOIN = INNER JOIN + Nicht übereinstimmende Daten in rechten und linken Tabellen mit Null Übereinstimmungen.
    • Selbstverknüpfung ist in SQL kein Schlüsselwort, wenn eine Tabelle selbst Daten referenziert, die als Selbstverknüpfung bezeichnet werden. Mit INNER JOIN und OUTER JOIN können wir Self-Join-Abfragen schreiben.

    Zum Beispiel:

     
    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 
    
        
    19
    2019-03-21 22: 19: 48Z

    Einfachst Definitionen

    Inner Join: Gibt übereinstimmende Datensätze aus beiden Tabellen zurück.

    Vollständige äußere Verknüpfung: Gibt übereinstimmende und nicht übereinstimmende Datensätze aus beiden Tabellen mit Null für nicht übereinstimmende Datensätze aus beiden Tabellen zurück.

    Left Outer Join: Gibt nur übereinstimmende und nicht übereinstimmende Datensätze aus der Tabelle auf der linken Seite zurück.

    Right Outer Join: Gibt nur übereinstimmende und nicht übereinstimmende Datensätze aus der Tabelle auf der rechten Seite zurück.

    In-Short

    Matched + Left Unmatched + Right Unmatched = Vollständige äußere Verknüpfung

    Matched + Left Unmatched = Linke äußere Verknüpfung

    Matched + Right Unmatched = Rechte äußere Verknüpfung

    Matched = Innerer Join

        
    17
    2016-04-28 09: 10: 48Z
    1. Dies ist hervorragend und erklärt, warum der Join für Zeitreihenindizes nicht wie erwartet funktioniert. Zeitstempel im Abstand von einer Sekunde sind unerreicht.
      2017-09-05 09: 22: 46Z
    2. @ yeliabsalohcin Sie erklären hier nicht "wie erwartet" oder "funktioniert" in Ihrem Kommentar zu der Frage. Es ist nur ein ungeklärter persönlicher Irrtum, den man seltsamerweise von anderen erwartet. Wenn Sie Wörter beim Lesen als schlampig behandeln - wenn Sie klares Schreiben falsch interpretieren und /oder unklares Schreiben akzeptieren -, wie wenn Sie hier schreiben, dann können Sie erwarten, dass Sie falsche Vorstellungen haben. Tatsächlich ist diese Antwort wie die meisten hier unklar & falsch. "Innerer Join: Gibt übereinstimmende Datensätze aus beiden Tabellen zurück" ist falsch, wenn sich die Eingabespaltensätze unterscheiden. Es versucht , ein bestimmtes Etwas zu sagen, aber es ist nicht . (Siehe meine Antwort.)
      2017-11-22 02: 52: 49Z

    Einfach ausgedrückt:

    1. INNER JOIN ODER EQUI JOIN: Gibt die Ergebnismenge zurück, die nur der Bedingung in beiden Tabellen entspricht.

    2. OUTER JOIN: Gibt die Ergebnismenge aller Werte aus beiden Tabellen zurück, auch wenn eine Bedingungsübereinstimmung vorliegt oder nicht.

    3. LEFT JOIN: Gibt die Ergebnismenge aller Werte aus der linken Tabelle und nur der Zeilen zurück, die der Bedingung in der rechten Tabelle entsprechen.

    4. RIGHT JOIN: Gibt die Ergebnismenge aller Werte aus der rechten Tabelle und nur der Zeilen zurück, die der Bedingung in der linken Tabelle entsprechen.

    5. FULL JOIN: Full Join und Full Outer Join sind identisch.

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

    1. Innerer Join: Wird auch als Join bezeichnet. Die Zeilen in der linken und der rechten Tabelle werden nur zurückgegeben, wenn eine Übereinstimmung vorliegt . Andernfalls werden keine Datensätze zurückgegeben.

    Beispiel:

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

     output1

    2. Vollständige äußere Verknüpfung: Wird auch als vollständige Verknüpfung bezeichnet. Es werden alle Zeilen zurückgegeben, die sowohl in der linken als auch in der rechten Tabelle vorhanden sind.

    Beispiel:

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

     output2

    3. Left Outer Join: Oder einfach als Left Join bezeichnet. Es werden alle in der linken Tabelle vorhandenen Zeilen und die übereinstimmenden Zeilen aus der rechten Tabelle (falls vorhanden) zurückgegeben.

    4. Right Outer Join: Wird auch als Right Join bezeichnet. Es werden übereinstimmende Zeilen aus der linken Tabelle (falls vorhanden) und alle in der rechten Tabelle vorhandenen Zeilen zurückgegeben.

     tritt bei

    Vorteile von Joins

    1. Wird schneller ausgeführt.
    4
    2017-07-28 04: 17: 49Z
    1. Dies ist nur korrekt, wenn die Tabellen th habenDer gleiche Säulensatz. (Es verwechselt die innere Verknüpfung mit der Schnittmenge und der vollständigen Verknüpfung mit der Vereinigung.) Außerdem ist "Übereinstimmung" undefiniert. Lesen Sie meine anderen Kommentare.
      2017-07-24 13: 02: 37Z
    • Innerer Join - Ein innerer Join unter Verwendung einer der entsprechenden Abfragen gibt den Schnittpunkt der beiden Tabellen an, dh der beiden Zeilen, die sie gemeinsam haben.

    • Linke äußere Verknüpfung - Eine linke äußere Verknüpfung gibt alle Zeilen in A sowie alle gemeinsamen Zeilen in B an.

    • Vollständige äußere Verknüpfung - Eine vollständige äußere Verknüpfung gibt Ihnen die Vereinigung von A und B, dh Alle Zeilen in A und alle Zeilen in B Wenn etwas in A kein entsprechendes Datum in B hat, ist der B-Anteil null und umgekehrt

    3
    2016-06-23 13: 55: 57Z
    1. Dies ist sowohl falsch als auch unklar. Join ist keine Schnittmenge, es sei denn, die Tabellen haben dieselben Spalten. Äußere Verknüpfungen haben keine Zeilen von A oder B, es sei denn, sie haben dieselben Spalten. In diesem Fall werden keine Nullen hinzugefügt. Sie versuchen etwas zu sagen, aber Sie sagen es nicht. Sie erklären nicht richtig oder nicht klar.
      2017-02-03 11: 15: 30Z
    2. @ philipxy: In Ihrer Aussage nicht einverstanden Join is not an intersection unless the tables have the same columns Nein. Sie können beliebige Spalten verknüpfen. Wenn der Wert übereinstimmt, werden sie zusammengefügt.
      2017-04-11 09: 23: 49Z
    3. Dieser Kommentar ist so unklar wie Ihre Antwort. (Ich nehme an, Sie denken etwa, die Menge der Unterzeilenwerte für die gemeinsamen Spalten des Ergebnisses ist die Schnittmenge der Unterzeilenwerte für die gemeinsamen Spalten der einzelnen Eingaben. Aber das haben Sie nicht geschrieben. Sie sind nicht klar.)
      2017-04-11 14: 24: 05Z

    left join on (auch bekannt als left outer join on) gibt inner join on Zeilen zurück union all nicht übereinstimmende linke Tabellenzeilen, die um Nullen erweitert wurden.

    right join (on (auch bekannt als right outer join on) gibt inner join on Zeilen zurück union all nicht übereinstimmende rechte Tabellenzeilen, die um Nullen erweitert sind.

    full join on (auch bekannt als full outer join on) gibt inner join on Zeilen zurück. union all nicht übereinstimmende linke Tabellenzeilen, erweitert um Nullen. union all nicht übereinstimmende rechte Tabellenzeilen, erweitert um Nullen.

    (SQL Standard 2006 SQL /Foundation 7.7 - Syntaxregeln 1, Allgemeine Regeln 1 b, 3 c und 5 b.)

    Machen Sie also erst mit outer join weiter, wenn Sie wissen, worum es bei inner join geht.


    Erfahren Sie, welche Zeilen inner join zurückgeben .

    Lies meine Kommentare dort zu den vielen verwirrten & schlechte Antworten.

    Dann lesen Sie hier meine Kommentare zu den vielen verwirrten & schlechte Antworten.

        
    3
    2018-07-23 05: 53: 22Z
    1. Ich habe in der Tat Ihre vielen Kommentare gelesen. Wenn Sie sagen, "ein Venn-Diagramm kann bei richtiger Interpretation einen inneren oder äußeren Join darstellen", meinen Sie dann, wenn es vom Beobachter oder dem Venn-Diagramm selbst richtig interpretiert wird? Wenn dies der Fall ist, zeichnen Sie es bitte:)
      2019-04-24 16: 08: 07Z
    2. Ich bin nicht sicher, was Sie sagen möchten. Ich spreche von der Standardinterpretation eines Venn-Diagramms als Mengen von Elementen. (Weil einige Verwendungen von Diagrammen das nicht einmal schaffen.) "Richtig" für eine Anwendung beinhaltet, zu sagen, was die Mengen und /oder Elemente sind. Siehe den Kommentar oben auf dieser Seite mit 50 Upvotes zu einem Venn-Diagramm für innere und äußere Joins. Ich werde einige meiner Kommentare zu dieser Frage bearbeiten. Ich möchte kein Venn-Diagramm in diesem Beitrag.
      2019-04-24 16: 31: 27Z
    3. Ich möchte auch keine Venn-Diagramme!
      25.04.2019 15: 52: 29Z
    4. Ich muss zugeben, dass SQL trotz meiner schnellen Formulierung in Kommentaren Taschen & Nullen und SQL-Kultur haben keine gemeinsame Terminologie für Name & zwischen relevanten Begriffen unterscheiden, ist es nicht trivial, auch klar zu erklären, wie Elemente eines Venn-Diagramms 1: 1 mit Ausgabe "Zeilen" sind, geschweige denn Eingabe "Zeilen". Oder was innere oder äußere Verbindungen tun, geschweige denn ihren Unterschied. "value" kann NULL enthalten oder nicht, "row" kann eine Liste von Werten gegenüber einem Slot in einem Tabellenwert oder einer Variablen & "=" kann SQL sein "=" vs equality.
      25.04.2019 17: 44: 05Z
    5. Ähnlich wie bei unserer Diskussion über kartesische Produkte im Vergleich zu relationalen Produkten ist es meines Erachtens der Fall, dass die Venn-Diagramme für Leute, die das bereits verstehen, sehr sinnvoll sind Unterschiede zwischen den Join-Typen!
      2019-04-29 07: 51: 15Z

    Der Unterschied zwischen innerem und äußerem Join ist wie folgt:

    1. Inner Join ist ein Join, der Tabellen basierend auf übereinstimmenden Tupeln kombiniert, während Outer Join ein Join ist, der Tabellen basierend auf übereinstimmenden und nicht übereinstimmenden Tupeln kombiniert.
    2. Innerer Join führt übereinstimmende Zeilen aus zwei Tabellen zusammen, in denen nicht übereinstimmende Zeilen weggelassen werden, wohingegen der äußere Join Zeilen aus zwei Tabellen zusammenführt und nicht übereinstimmende Zeilen mit dem Wert null gefüllt werden.
    3. Innerer Join ist wie eine Kreuzungsoperation, während äußerer Join wie eine Vereinigungsoperation ist.
    4. Es gibt zwei Arten der inneren Verknüpfung, während es sich bei der äußeren Verknüpfung um drei Arten handelt.
    5. Innerer Join ist langsamer, während äußerer Join schneller ist als innerer Join.
    1
    2017-10-17 12: 25: 56Z

    Betrachten Sie die folgenden 2 Tabellen:

    EMP

     
    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
    

    Abteilung

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

    Innerer Join:

    Meistens als JOIN in SQL-Abfragen geschrieben. Es werden nur die übereinstimmenden Datensätze zwischen den Tabellen zurückgegeben.

    Finden Sie alle Mitarbeiter und ihre Abteilungsnamen heraus:

     
    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
    

    Wie Sie oben sehen, wird Jose nicht von EMP in der Ausgabe gedruckt, da dept_id 6 keine Übereinstimmung in der Abteilungstabelle findet. Ebenso werden HR- und R&D-Zeilen nicht aus der Tabelle Abteilung gedruckt, da sie in der Emp-Tabelle keine Übereinstimmung gefunden haben.

    INNER JOIN oder nur JOIN gibt nur übereinstimmende Zeilen zurück.

    LEFT JOIN:

    Hiermit werden alle Datensätze aus der Tabelle LEFT und nur übereinstimmende Datensätze aus der Tabelle RIGHT zurückgegeben.

     
    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    
    

    Wenn Sie also die obige Ausgabe beobachten, werden alle Datensätze aus der LINKEN Tabelle (Emp) mit nur übereinstimmenden Datensätzen aus der RECHTEN Tabelle gedruckt.

    HR- und R&D-Zeilen werden nicht aus der Tabelle Abteilung gedruckt, da in der Emp-Tabelle in dept_id keine Übereinstimmung gefunden wurde.

    LEFT JOIN gibt also ALLE Zeilen aus der linken Tabelle und nur übereinstimmende Zeilen aus der rechten Tabelle zurück.

    Sie können DEMO hier überprüfen.

        
    0
    25.11.2018 15: 04: 40Z
    1. Hierin wird nicht klar beschrieben, was beide Verknüpfungen bewirken. (Es wird auch kein "Unterschied" zwischen ihnen angesprochen, außer zu sagen, dass sie unterschiedlich sind.) Dies fügt nichts zu den vielen Antworten (viele hochgestuft) einer 10 Jahre alten Frage hinzu - ist es "hilfreich"?
      2018-11-27 01: 19: 10Z
Quelle platziert Hier