Was ist der Unterschied zwischen "INNER JOIN" und "OUTER JOIN"?
Auch wie LEFT JOIN
RIGHT JOIN
und FULL JOIN
passen?
InformationsquelleAutor der Frage Chris de Vries | 2008-09-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Auch wie LEFT JOIN
RIGHT JOIN
und FULL JOIN
passen?
InformationsquelleAutor der Frage Chris de Vries | 2008-09-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, Sie treten auf Spalten mit keine Duplikate, das ist ein sehr häufiger Fall:
Einem inner join von A und B liefert das Ergebnis A intersect B, D. H. der innere Teil eines Venn-Diagramm Kreuzung.
Outer-join von A und B gibt die Ergebnisse Einer union-B, d.h. die äußeren Teile des Venn-Diagramm union.
Beispiele
Angenommen, Sie haben zwei Tabellen, wobei eine einzelne Spalte jeder, und Daten wie folgt:
Beachten Sie, dass (1,2) sind nur für Eine, (3,4) sind Häufig, und (5,6) sind eindeutig zu B.
Inner join
Einen inner join verwenden, eine der beiden äquivalenten Abfragen gibt die Schnittmenge der beiden Tabellen, d.h. die zwei Zeilen, die Sie gemeinsam haben.
Left outer join
Einen left-outer-join geben Sie alle Zeilen in A, sowie keine gemeinsamen Zeilen in B.
Right outer join
Einer rechten äußeren Verknüpfung geben Sie alle Zeilen in B, sowie keine gemeinsamen Zeilen in A.
Full outer join
Einen full outer join wird Ihnen die Vereinigung von A und B, d.h. alle Zeilen und alle Zeilen, die in B. Wenn etwas in Einem nicht mit einem entsprechenden datum in B, dann B-Teil wird null und Umgekehrt.
InformationsquelleAutor der Antwort Mark Harrison
Auch Sie können betrachten Sie Folgendes schema für die verschiedenen join-Typen;
Quelle: Visual-Vertretung-des-SQL-Joins im detail erläutert, die von C. L. Moffatt
InformationsquelleAutor der Antwort Teoman shipahi
Empfehle ich Jeffs blog-Artikel. Die beste Beschreibung, die ich je gesehen habe, und es ist eine Visualisierung, z.B.:
Inner Join:
Full Outer Join:
InformationsquelleAutor der Antwort ya23
Den Venn-Diagrammen nicht wirklich tun es für mich.
Zeigen Sie nicht, eine Unterscheidung zwischen einem cross join und inner join, zum Beispiel, oder mehr in der Regel zeigen keine Unterscheidung zwischen verschiedenen Typen von join-Prädikat oder bieten einen Rahmen für die Argumentation darüber, wie Sie funktionieren.
Es ist kein Ersatz für das Verständnis der logischen Verarbeitung und es ist relativ einfach zu fassen ist, sowieso.
on
Klausel gegen alle Zeilen aus Schritt 1 halten Sie diejenigen, in denen das Prädikat ausgewertet zutrue
(NB: In der Praxis der query optimiser kann die Suche nach effizienteren wegen der Ausführung der Abfrage als die rein logische Beschreibung oben, aber das Endergebnis muss dasselbe sein)
Werde ich beginnen mit einer animierten version des full outer join. Weitere Erklärung folgt.
Erklärung
Quelle Tabellen
Ersten start mit einem
CROSS JOIN
(AKA Kartesisches Produkt). Dies muss nicht eineON
- Klausel und gibt einfach jede Kombination von Zeilen aus den beiden Tabellen.WÄHLEN Sie A. Farbe B. die Farbe VON A CROSS JOIN B
Inner-und Outer-joins ein "ON" - Klausel-Prädikat.
Einige Beispiele
WÄHLEN Sie A. Farbe B. Farbe AUS EINEM INNER JOIN B ON A. Colour = B. Colour
Oben ist der klassische equi-join.
Animierte Version
WÄHLEN Sie A. Farbe B. Farbe AUS EINEM INNER JOIN B ON A. die Farbe und NICHT IN ('Grün','Blau')
Dem inner join-Bedingung muss nicht notwendigerweise eine Gleichheit Zustand und es müssen nicht auf Spalten verweisen, die von beiden (oder sogar beide) der Tabellen. Bewertung
A.Colour NOT IN ('Green','Blue')
auf jede Zeile des cross-join gibt.WÄHLEN Sie A. Farbe B. Farbe AUS EINEM INNER JOIN B ON 1 =1
Die join-Bedingung "true" für alle Zeilen in der cross join-Ergebnis, so ist dies genau das gleiche wie ein cross-join. Ich werde nicht wiederholen, das Bild des 16-Zeilen wieder.
WÄHLEN Sie A. Farbe B. Farbe AUS EINEM LEFT OUTER JOIN B ON A. Colour = B. Colour
Outer-Joins werden logisch ausgewertet, in der gleichen Weise wie inner joins, außer dass, wenn eine Zeile aus der linken Tabelle (left join) nicht beizutreten, mit der alle Zeilen aus der rechten Tabelle in allem ist es erhalten in der Folge mit
NULL
Werte für die rechten Spalten.WÄHLEN Sie A. Farbe B. Farbe AUS EINEM LEFT OUTER JOIN B ON A. Colour = B. Colour-WHERE B. Farbe IST NULL
Diese einfach, schränkt das Vorherige Ergebnis, um nur die Zeilen, in denen
B.Colour IS NULL
. In diesem speziellen Fall werden die Zeilen, die erhalten wurden, als hätten Sie keine Entsprechung in der rechten Tabelle und die Abfrage gibt die rote Zeile, die nicht aufeinander abgestimmt sind in TabelleB
. Dies ist bekannt als anti semi join.Ist es wichtig, wählen Sie eine Spalte für die
IS NULL
test, die weder null-Werte zulässt oder für die die join-Bedingung wird sichergestellt, dass alleNULL
Werte werden ausgeschlossen, damit dieses Muster, um korrekt zu arbeiten und zu vermeiden, einfach die hinteren Reihen, die zufällig von einerNULL
Wert für diese Spalte zusätzlich zu den Vereinten Nationen abgestimmt Zeilen.WÄHLEN Sie A. Farbe B. die Farbe VON EINEM RIGHT OUTER JOIN B ON A. Colour = B. Colour
Rechte äußere Verknüpfungen handeln, ähnlich wie left outer joins, außer Sie erhalten nicht entsprechenden Zeilen aus der rechten Tabelle und null erweitern Sie die linken Spalten.
WÄHLEN Sie A. Farbe B. die Farbe VON EINEM FULL OUTER JOIN B ON A. Colour = B. Colour
Full outer joins zu verbinden, das Verhalten von linken und rechten verbindet und bewahren Sie die nicht passenden Zeilen aus der linken und der rechten Tabellen.
WÄHLEN Sie A. Farbe B. die Farbe VON EINEM FULL OUTER JOIN B ON 1 = 0
Keine Zeilen in der cross join-match der
1=0
Prädikat. Alle Zeilen aus beiden Seiten sind erhalten mit normalen outer-join-Regeln mit NULL in den Spalten aus der Tabelle auf der anderen Seite.SELECT COALESCE(A. Farbe B. Farbe) Farbe AUS EINEM FULL OUTER JOIN B ON 1 = 0
Mit einer geringfügigen änderung zu der vorhergehenden Abfrage könnte man simulieren
UNION ALL
der beiden Tabellen.WÄHLEN Sie A. Farbe B. Farbe AUS EINEM LEFT OUTER JOIN B ON A. Colour = B. Colour-WHERE B. Farbe = 'Grün'
Beachten Sie, dass die
WHERE
- Klausel (falls vorhanden) logischerweise läuft nach dem join. Ein häufiger Fehler ist die Ausführung eines left outer join und dann eine WHERE-Klausel eine Bedingung auf der rechten Tabelle, die bis Ende ohne die nicht passenden Zeilen. Die oben endet der Durchführung der outer join...... Und dann das "Wo" - Klausel ausgeführt wird.
NULL= 'Green'
nicht zu true ausgewertet, so wird die Reihe erhalten, die durch den outer-join endet verworfen (zusammen mit den blauen) effektiv konvertieren die join wieder ein inner.Wenn das Absicht war, gehören nur die Zeilen aus B, wo die Farbe ist Grün und alle Zeilen aus Einer unabhängig von der syntax wäre
WÄHLEN Sie A. Farbe B. Farbe AUS EINEM LEFT OUTER JOIN B ON A. Colour = B. Colour UND B. Farbe = 'Grün'
SQL Fiddle
Siehe diese Beispiele führen Sie live bei SQLFiddle.com.
InformationsquelleAutor der Antwort Martin Smith
Der folgende Auszug wurde aus dem Artikel "MySQL LEFT JOIN und RIGHT JOIN, INNER JOIN und OUTER JOIN" von Graham Ellis auf seinem blog pferdemaul.
In einer Datenbank wie MySQL, Daten gliedert sich in eine Reihe von Tabellen, die sind dann angeschlossen (
Joined
) durchJOIN
imSELECT
Befehle zum Lesen der Datensätze aus mehreren Tabellen. Lesen Sie dieses Beispiel, um zu sehen, wie es funktioniert.Ersten, einige Beispiel-Daten:
REGELMÄßIGE JOIN
Wenn wir ein reguläres Mitglied werden (ohne die Schlüsselwörter INNER, OUTER, LEFT oder RIGHT), dann erhalten wir alle Datensätze in geeigneter Weise in den beiden Tabellen und Datensätze in beiden eingehenden Tabellen, die nicht übereinstimmen werden nicht berichtet:
LEFT JOIN
Wenn wir einen LEFT JOIN aus, erhalten wir alle Datensätze in der gleichen Art und Weise und ZUSÄTZLICH bekommen wir einen zusätzlichen Eintrag für jede unerreichten Rekord in der linken Tabelle des join - damit die (in diesem Beispiel), dass jede PERSON bekommt eine Erwähnung:
RIGHT JOIN
Wenn wir einen RIGHT JOIN, erhalten wir alle Datensätze und ZUSÄTZLICH eine extra-Eintrag für jede unerreichten Rekord in der rechten Tabelle des Joins - in meinem Beispiel bedeutet das, dass jede Eigenschaft bekommt eine Erwähnung, auch wenn wir nicht Verkäufer details:
Einem INNER JOIN funktioniert ein full join, genau wie das erste Beispiel, und das Wort OUTER kann Hinzugefügt werden, nachdem das Wort nach LINKS oder RECHTS in den letzten beiden Beispiele - es ist vorgesehen, für die ODBC-Kompatibilität und nicht eine extra-Funktionen.
InformationsquelleAutor der Antwort gtiwari333
Inner Join
Abrufen der übereinstimmende Zeilen nur, dass
A intersect B
.Left Outer Join
Wählen Sie alle Datensätze aus der ersten Tabelle und alle Datensätze in der zweiten
Tabelle entsprechen den verknüpften Schlüssel.
Full Outer Join
Wählen Sie alle Datensätze aus der zweiten Tabelle und alle Datensätze in der ersten
Tabelle entsprechen den verknüpften Schlüssel.
Referenzen
Inner-und outer-joins SQL-Beispiele und die Join-block
SQL: JOINS
InformationsquelleAutor der Antwort Tushar Gupta
Verbindet verwendet werden zum kombinieren der Daten aus zwei Tabellen, mit dem Ergebnis wird eine neue, temporäre Tabelle. Verknüpfungen ausgeführt werden, basierend auf etwas namens ein Prädikat, das gibt die Bedingung an, um zu verwenden, um führen Sie einen join. Der Unterschied zwischen einem inner join und einem outer join, inner join werden nur die Zeilen zurückzugeben, die eigentlich mit auf der Grundlage der join-Prädikat.
Betrachten wir Mitarbeiter und Standort Tabelle:
Inner Join:-
Inner join erzeugt ein neues Ergebnis der Tabelle durch die Kombination von Spalte Werte von zwei Tabellen (Mitarbeiter und Lage), basierend auf der join-Prädikat. Die Abfrage vergleicht jede Zeile der Mitarbeiter mit jeder Zeile von Lage zu finden, alle Paare von Zeilen, welche sowohl die join-Prädikat. Wenn das join-Prädikat erfüllt ist, durch die passenden nicht-NULL-Werte, Spalte Werte für jedes Paars von Zeilen von Mitarbeiter und Lage kombiniert werden, das Ergebnis in eine Zeile.
Hier ist, was SQL für ein inner-join wird dann z.B. so Aussehen:
Nun, hier ist, was das Ergebnis der Ausführung, SQL würde das so Aussehen:
Outer-Join:-
Ein outer-join nicht verlangen, dass jeder Datensatz in der zwei verknüpften Tabellen, um einen passenden Datensatz. Die verknüpfte Tabelle behält jeder Datensatz, auch wenn noch keine anderen passenden Datensatz vorhanden ist. Äußere Verknüpfungen unterteilen sich weiter in left outer Join und right outer joins, je nachdem, welche Tabelle die Zeilen, die erhalten bleiben (Links oder rechts).
Left-Outer-Join:-
Das Ergebnis einer linken äußeren Verknüpfung (oder einfach left join) Tabellen Mitarbeiter und Lage immer enthält alle Datensätze der "linken" Tabelle (Mitarbeiter), auch wenn die join-Bedingung findet keine übereinstimmenden Datensatz in die "richtige" Tabelle (Lage).
Hier ist, was SQL für eine linke äußere Verknüpfung Aussehen würde, mit den oben stehenden Tabellen:
Nun, hier ist, was das Ergebnis der Ausführung dieser SQL würde das so Aussehen:
Right Outer Join:-
Eine Rechte äußere Verknüpfung (oder right join) ähnelt einem left outer join, mit der Ausnahme der Behandlung von Tabellen rückgängig gemacht. Jede Zeile aus der "rechten" Tabelle (Lage) erscheint in der verbundenen Tabelle mindestens einmal. Wenn keine übereinstimmende Zeile aus der "linken" Tabelle (Mitarbeiter) vorhanden ist, wird NULL angezeigt, in den Spalten von Mitarbeiter für diejenigen Datensätze, die keine Entsprechung in Lage.
Dies ist, was die SQL sieht wie folgt aus:
Mithilfe der obigen Tabellen können wir zeigen, was das Ergebnis einer rechten äußeren Verknüpfung Aussehen würde:
Vollständige Äußere Verknüpfungen:-
Full Outer Join oder Full Join bleiben die nicht übereinstimmenden Informationen von einschließlich übereinstimmenden Zeilen in die Ergebnisse einer Verknüpfung, verwenden Sie einen full outer join. Es enthält alle Zeilen aus beiden Tabellen, unabhängig davon, ob oder nicht die andere Tabelle einen entsprechenden Wert.
Bildquelle
MySQL 8.0 Referenzhandbuch - Join-Syntax
Oracle-Join-Operationen
InformationsquelleAutor der Antwort ajitksharma
In einfachen Worten:
Einer inner join abrufen der übereinstimmende Zeilen nur.
In der Erwägung, dass eine outer join abrufen der übereinstimmenden Zeilen aus einer Tabelle und alle Zeilen in eine andere Tabelle ....das Ergebnis hängt davon ab, welche Sie verwenden:
Links: Übereinstimmenden Zeilen in der rechten Tabelle und alle Zeilen in der linken Tabelle
Recht: Übereinstimmenden Zeilen in der linken Tabelle und alle Zeilen in der rechten Tabelle oder
Voll: Alle Zeilen in allen Tabellen. Es spielt keine Rolle, ob es eine übereinstimmung gibt oder nicht
InformationsquelleAutor der Antwort vidyadhar
Einen inner join zeigt nur Zeilen, wenn es einen entsprechenden Datensatz auf der anderen (rechten) Seite des Joins.
A (Links) outer join zeigt Zeilen für jeden Datensatz auf der linken Seite, auch wenn es keine übereinstimmenden Zeilen, die auf der anderen (rechten) Seite des Joins. Wenn es keine übereinstimmenden Zeilen, die Spalten für die anderen (rechten) Seite, die zeigen würde, Null-Werte.
InformationsquelleAutor der Antwort 1800 INFORMATION
Inner joins erfordern, dass ein Datensatz mit einer verwandten-ID vorhanden, die in der verknüpften Tabelle.
Outer-joins werden Datensätze zurück, für die linke Seite, auch wenn nichts vorhanden ist, für die Rechte Seite.
Zum Beispiel, haben Sie eine Orders und OrderDetails-Tabelle. Sie stehen in Zusammenhang mit einem "Bestell-NR".
Bestellungen
OrderDetails
Antrag
werden nur Aufträge, die auch etwas in der OrderDetails-Tabelle.
Wenn Sie es ändern, um die ÄUßEREN LEFT JOIN
dann wird es wieder Datensätze aus der Tabelle Bestellungen, auch wenn Sie keine OrderDetails records.
Können Sie diese verwenden, um Aufträge, für die noch keine OrderDetails was auf eine mögliche verwaiste Bestellung durch hinzufügen einer where-Klausel wie
WHERE OrderDetails.OrderID IS NULL
.InformationsquelleAutor der Antwort Brian Boatright
In einfachen Worten :
Inner join -> Nehmen Sie NUR die gemeinsamen Datensätze von parent-und child-Tabellen, bei DENEN die Primärschlüssel der Übergeordneten Tabelle entspricht Fremdschlüssel in der Untergeordneten Tabelle.
Left join ->
pseudo-code
Right join : Genau das Gegenteil ist der left join . Setzen Sie den Namen der Tabelle in der LEFT JOIN auf der rechten Seite in der Rechten beitreten , erhalten Sie dieselbe Ausgabe wie LEFT JOIN.
Outer join : Zeige alle Datensätze in Beiden Tabellen
No matter what
. Wenn Datensätze in der Linken Tabelle sind nicht passend zu der rechten Tabelle basiert auf Primär -, Forieign-Taste , verwenden Sie NULL-Wert als Ergebnis beizutreten .Beispiel :
Lässt vermuten jetzt für 2 Tabellen
1.employees , 2.phone_numbers_employees
Hier , die Mitarbeiter-Tabelle ist Master-Tabelle , phone_numbers_employees ist child-Tabelle(Sie enthält
emp_id
als fremde Schlüssel, verbindetemployee.id
so seine untergeordneten Tabelle.)Inner joins
Nehmen die Datensätze von 2 Tabellen NUR, WENN Primärschlüssel der Tabelle Mitarbeiter(seine id) entspricht Fremdschlüssel der Untergeordneten Tabelle phone_numbers_employees(emp_id).
Also Abfrage wäre :
Hier nehmen nur die entsprechenden Zeilen auf Primärschlüssel = Fremdschlüssel, wie oben erklärt.Hier die nicht passenden Zeilen auf Primärschlüssel = Fremdschlüssel übersprungen werden als Ergebnis der Verknüpfung.
Links schließt sich :
Left join behält alle Zeilen der linken Tabelle, unabhängig davon, ob es eine Zeile, die passt auf der rechten Seite der Tabelle.
Outer-joins :
Diagramatically sieht es so aus :
InformationsquelleAutor der Antwort Pratik C Joshi
Verwenden Sie
INNER JOIN
um alle Zeilen aus beiden Tabellen, bei denen es eine übereinstimmung gibt. D. H. In der resultierenden Tabelle alle Zeilen und Spalten haben Werte.In
OUTER JOIN
die daraus resultierende Tabelle kann, müssen leere Spalten. Outer-join kann entwederLEFT
oderRIGHT
.LEFT OUTER JOIN
gibt alle Zeilen aus der ersten Tabelle, auch wenn es keine Spiele in der zweiten Tabelle.RIGHT OUTER JOIN
gibt alle Zeilen aus der zweiten Tabelle, auch wenn es keine Spiele in der ersten Tabelle.InformationsquelleAutor der Antwort vijikumar
Dies ist eine gute schematische Erklärung für alle Arten von joins
Quelle: http://ssiddique.info/understanding-sql-joins-in-easy-way.html
InformationsquelleAutor der Antwort Raghu K Nair
INNER JOIN
erfordert es mindestens eine übereinstimmung im Vergleich der beiden Tabellen. Zum Beispiel, Tabelle A und Tabelle B, was bedeutet ٨ B - (A Schnittmenge B).LEFT OUTER JOIN
undLEFT JOIN
sind die gleichen. Es gibt alle passenden Sätze in den beiden Tabellen, und alle Möglichkeiten der linken Tabelle.Ebenso
RIGHT OUTER JOIN
undRIGHT JOIN
sind die gleichen. Es gibt alle passenden Sätze in den beiden Tabellen, und alle Möglichkeiten der rechten Tabelle.FULL JOIN
ist die Kombination vonLEFT OUTER JOIN
undRIGHT OUTER JOIN
ohne überschneidungen.InformationsquelleAutor der Antwort naga
Die Antwort liegt in der Bedeutung der einzelnen ein, so dass in den Ergebnissen.
Meine Antwort basiert auf den oben Hinweis.
Wenn Sie zwei Tabellen wie diese:
CROSS JOIN /OUTER JOIN :
Sie können alle diese Tabellen-Daten mit
CROSS JOIN
oder nur mit,
wie diese:INNER JOIN :
Wenn Sie möchten, fügen Sie einen filter, um die oben genannten Ergebnisse basieren auf einem Verhältnis wie
table1.id = table2.id
können SieINNER JOIN
:LEFT [OUTER] JOIN :
Wenn Sie möchten, um alle Zeilen einer der Tabellen in die obigen Ergebnis -mit dem gleichen Bezug - Sie können
LEFT JOIN
:(Für RIGHT JOIN nur ändern Ort von Tabellen)
FULL OUTER JOIN :
Wenn Sie möchten, dass alle Zeilen der anderen Tabelle in Ihre Ergebnisse, die Sie verwenden können
FULL OUTER JOIN
:Naja, wie dem Ihren, müssen Sie wählen Sie jeden eine, die deckt Ihren Bedarf ;).
InformationsquelleAutor der Antwort shA.t
Der Unterschied ist die Art, wie Tabellen verknüpft werden, wenn es keine gemeinsamen Einträge.
JOIN
ist die gleiche wieINNER JOIN
und bedeutet, dass nur Datensätze in beiden Tabellen. Ob die Datensätze sind Häufig bestimmt, indem die Felder in der join-Klausel. Zum Beispiel:bedeutet, zeigen nur die Datensätze, in denen die gleichen
ID
Wert in beiden Tabellen vorhanden ist.LEFT JOIN
ist die gleiche wieLEFT OUTER JOIN
und Mittel, um zu zeigen Sie alle Datensätze aus der linken Tabelle (also die, die vor SQL-Anweisung) unabhängig von der Existenz von übereinstimmenden Datensätzen in der rechten Tabelle.RIGHT JOIN
ist die gleiche wieRIGHT OUTER JOIN
und bedeutet das Gegenteil vonLEFT JOIN
d.h. zeigt alle Datensätze aus der zweiten (rechten) Tabelle und nur die passenden Datensätze aus der ersten (linken) Tabelle ein.Quelle: Was ist der Unterschied zwischen LINKS, RECHTS, INNEN, AUßEN, BEITRETEN?
InformationsquelleAutor der Antwort Aldee
Inner join.
Join kombiniert die Zeilen von zwei Tabellen. Ein inner join versucht die beiden Tabellen auf der Grundlage der von Ihnen angegebenen Kriterien in der Abfrage aus und gibt nur die Zeilen, die übereinstimmen. Wenn eine Zeile aus der ersten Tabelle in der join entspricht zwei Zeilen in der zweiten Tabelle, dann zwei Zeilen werden in den Ergebnissen zurückgegeben. Wenn es eine Zeile in der ersten Tabelle, die nicht mit einer Zeile in der zweiten, ist es nicht zurückgegeben werden; ebenso, wenn es eine Zeile in der zweiten Tabelle, die nicht mit einer Zeile in der ersten, es wird nicht zurückgegeben.
Outer Join.
Einen left join versuche zu finden, passen die Zeilen aus der ersten Tabelle die Zeilen in der zweiten Tabelle. Wenn Sie nicht finden können, eine übereinstimmung, wird es die Rückkehr der Spalten aus der ersten Tabelle, und lassen Sie die Spalten der zweiten Tabelle ist leer (null).
InformationsquelleAutor der Antwort Kanwar Singh
Sehe ich nicht viel details über die performance und Optimierung in den anderen Antworten.
Manchmal ist es gut zu wissen, dass nur
INNER JOIN
ist assoziativ, das bedeutet, dass der optimizer hat die Möglichkeit, zu spielen mit ihm. Sie können die Reihenfolge der Verknüpfung, um es schneller zu machen, halten das gleiche Ergebnis. Die Optimierer können die meisten join-Modi.Generell ist es eine gute Praxis, um zu versuchen, zu verwenden
INNER JOIN
statt die verschiedenen Arten von joins. (Natürlich wenn es möglich ist, angesichts der erwarteten Ergebnis festlegen.)Gibt es ein paar gute Beispiele und die Erklärung zu dieser seltsamen assoziativen Verhalten:
InformationsquelleAutor der Antwort Lajos Veres
Der Unterschied ist die Art, wie Tabellen verknüpft werden, wenn es keine gemeinsamen Einträge.
JOIN
ist die gleiche wieINNER JOIN
und bedeutet, dass nur Datensätze in beiden Tabellen. Ob die Datensätze sind Häufig bestimmt, indem die Felder in der join-Klausel.Beispiel:
Bedeutet es zeigen nur die Datensätze, in denen die gleichen
ID
Wert in beiden Tabellen vorhanden ist.LEFT JOIN
ist die gleiche wieLEFT OUTER JOIN
und Mittel, um zu zeigen Sie alle Datensätze aus der linken Tabelle (also die, die vor SQL-Anweisung) unabhängig von der Existenz von übereinstimmenden Datensätzen in der rechten Tabelle.RIGHT JOIN
ist die gleiche wieRIGHT OUTER JOIN
und bedeutet das Gegenteil vonLEFT JOIN
d.h. zeigt alle Datensätze aus der zweiten (rechten) Tabelle und nur die passenden Datensätze aus der ersten (linken) Tabelle ein.InformationsquelleAutor der Antwort Rahul Parit
Kritisiert, dass die viel geliebten rot-schattiert Venn-Diagramm, dachte ich, dass es nur fair nach meinen eigenen Versuch.
Obwohl @Martin Smith s Antwort ist die beste von dieser Reihe durch einen langen Weg, seine zeigt nur die Schlüssel-Spalte aus jeder Tabelle, wobei ich denke, dass im Idealfall nicht-Schlüssel-Spalten, die sollten auch gezeigt werden.
Die besten, die ich tun könnte in der halben Stunde erlaubt, die ich immer noch glaube nicht, dass es angemessen zeigt, dass die null-Werte gibt es aufgrund der Abwesenheit der wichtigsten Werte in
TableB
oder dassOUTER JOIN
ist eigentlich eine union eher als ein join:InformationsquelleAutor der Antwort onedaywhen
Inner Join
Ein inner join konzentriert sich auf die Gemeinsamkeiten zwischen zwei Tabellen. Bei der Verwendung einer inneren Verknüpfung, es müssen mindestens einige übereinstimmende Daten zwischen zwei (oder mehr) Tabellen, die verglichen werden. Eine inner join-sucht-Tabellen nach übereinstimmenden oder sich überschneidenden Daten. Auf der Suche nach es, der inner join verbindet und gibt die Informationen in eine neue Tabelle.
Outer Join
Ein outer join liefert einen Satz von Datensätzen (oder Zeilen), die beinhalten, was eine innere Verknüpfung zurückkehren würde, aber es enthält auch andere Zeilen, für die keine entsprechende übereinstimmung gefunden wird, in der anderen Tabelle.
Gibt es drei Arten von outer joins:
Left-Outer-Join (oder Left Join)
Right Outer Join " (oder Right Join)
Full Outer Join " (oder Full Join)
Jede dieser outer-joins bezieht sich auf den Teil der Daten, die verglichen, zusammengefasst und zurückgegeben. Manchmal Nullen produziert werden in diesem Prozess einige Daten weitergegeben werden, während andere Daten nicht.
InformationsquelleAutor der Antwort Sumudu De Zoysa
Einfachsten Definitionen
Inner Join: Liefert abgestimmt Datensätze aus beiden Tabellen.
Full Outer Join: Liefert abgestimmt und nicht übereinstimmende Datensätze aus beiden Tabellen mit null-Wert für nicht übereinstimmende Datensätze von Beiden Tabellen.
Left Outer Join: Liefert abgestimmt und nicht übereinstimmende Datensätze nur aus der Tabelle auf Linken Seite.
Right Outer Join: Liefert abgestimmt und nicht übereinstimmende Datensätze nur aus der Tabelle auf Rechten Seite.
In Kurzen
Abgestimmt + Links Unerreicht + Rechts Unerreichte = Full Outer Join
Abgestimmt + Links Unerreichte = Left Outer Join
Abgestimmt + Rechts Unerreichte = Right Outer Join
Abgestimmt = Inner Join
InformationsquelleAutor der Antwort Akshay Khale
Den genauen Algorithmus für die
INNER JOIN
LEFT/RIGHT OUTER JOIN
sind wie folgt:a
(a, b[i])
ON clause
gegen jedes paar:ON(a, b[i]) = true/false?
true
zurück.Outer Joins
: wenn erreichen Ende der zweiten Tabelle ohne Spiel, Rückkehr ein (virtuellen) paar mitNull
für alle Spalten der zweiten Tabelle:(a, Null)
. Dies ist, um sicherzustellen, dass alle Zeilen der ersten Tabelle vorhanden ist, in die endgültigen Ergebnisse.Hinweis: die Bedingung in
ON
Klausel könnte alles sein, es ist nicht erforderlich, um Primärschlüssel und Sie brauchen nicht immer auf Spalten verweisen, die in den beiden Tabellen! Zum Beispiel:... ON T1.title = T2.title AND T1.version < T2.version
( => siehe diesen Beitrag als ein Beispiel für die Nutzung: Wählen Sie nur Zeilen mit max-Wert für eine Spalte)... ON T1.y IS NULL
... ON 1 = 0
(nur als Beispiel)Kann man auch sehen, diese Antwort in der aktuellen Seite, um weitere Proben.
InformationsquelleAutor der Antwort S.Serpooshan
INNER JOIN
Einem inner join erzeugt eine Ergebnismenge, die ist begrenzt auf die Zeilen, in denen es eine übereinstimmung in beiden Tabellen für das, was wir suchen. Wenn Sie nicht wissen, welche Art der Verknüpfung, die Sie brauchen, in der Regel wird dies Ihre beste Wette.
LEFT OUTER JOIN
Einem left outer join oder left join, Ergebnisse in einem Satz, in dem alle Zeilen aus der ersten, oder auf der linken Seite, Tabelle erhalten bleiben. Die Zeilen aus der zweiten oder rechten Seite der Tabelle nur angezeigt, wenn Sie ein match mit den Zeilen aus der ersten Tabelle. Wo gibt es Werte aus der linken Tabelle, nicht aber von der rechten Seite, wird die Tabelle Lesen null, was bedeutet, dass der Wert nicht gesetzt wurde.
RIGHT OUTER JOIN
Einem right outer join oder right join ist das gleiche wie ein left join, außer die Rollen vertauscht sind. Alle Zeilen aus der rechten Seite der Tabelle zeigen, bis in der Folge, aber die Zeilen aus der Tabelle auf der linken Seite sind nur da, wenn Sie mit der Tabelle auf der rechten Seite. Leere Räume sind null, ebenso wie mit den linken beitreten.
FULL OUTER JOIN
Einen full outer join, oder einfach nur outer-join produziert eine Ergebnismenge mit allen Zeilen beider Tabellen, unabhängig davon, ob es irgendwelche Spiele. Ähnlich wie die Links und rechts verbindet, nennen wir die leeren Räume null.
Weitere Referenz
InformationsquelleAutor der Antwort AVI
INNER JOIN
typische join für zwei oder mehr Tabellen.Es gibt Daten passen auf beide Tabelle AUF den Primärschlüssel und forignkey Bezug.
OUTER JOIN
ist die gleiche wieINNER JOIN
aber es gehören auchNULL
Daten über die Ergebnismenge.LEFT JOIN
=INNER JOIN
+ Unerreichte Daten der linken Tabelle mit Null Spiel auf der rechten Tabelle.RIGHT JOIN
=INNER JOIN
+ Unerreichte Daten der rechten Tabelle mit Null-match auf dem linken Tisch.FULL JOIN
=INNER JOIN
+ Unerreichte Daten auf beiden rechts und Links Tische mit null Treffern.INNER JOIN
undOUTER JOIN
können wir schreiben self-join-Abfragen.Beispiel:
InformationsquelleAutor der Antwort Premraj
Sind Sie die am häufigsten verwendeten existentiellen Operatoren in SQL, wo
INNER JOIN
ist für 'existiert' undLEFT OUTER JOIN
ist für 'nicht vorhanden'.Betrachten Sie diese Abfragen:
Menschen, die sich für set-basierte Lösungen (ein Fachbegriff) zu erkennen wäre, die jeweiligen Abfragen wie:
Übersetzen diese in standard-SQL:
Andere denken, die sich am Vorbild der set-Aufnahme:
Übersetzen diese in standard-SQL:
Einige werden denken, im Sinne von 'Existenz' in legt z.B.
Übersetzen diese in standard-SQL (Hinweis: wir müssen nun die range-Variablen, d.h.
p
v
b
):Allerdings habe ich festgestellt, dass die "Industrie-standard" - Ansatz ist ausschließlich die Verwendung von joins. Ich weiß nicht, was die denken ist hier (Gesetz des Instruments? Vorzeitige Optimierung?), also werde ich gehen Sie direkt zu der syntax:
Dinge zu beachten:
Users
aber wir müssen noch all jene Reihe von Variablen (p
v
b
) für die Suchbedingungen.UserId IS NULL
Suchbedingung 'gehört' , die dieOUTER JOIN
aber getrennt ist, in der Abfrage.LEFT
ist der Industrie-standard: Profis umschreiben einer Abfrage zu vermeiden, mitRIGHT
!OUTER
Schlüsselwort ausLEFT OUTER JOIN
weggelassen wird.Schlusswort:
Manchmal joins in Abfragen verwendet ausschließlich, um festzustellen, ob Werte vorhanden sind oder nicht existiert, in einen anderen Satz. Lernen Sie, sorgfältig zu prüfen, die Attribute projiziert wird (die Spalten in der
SELECT
- Klausel): wenn es keine aus der verknüpften Tabelle dann werden Sie einfach benutzt, als existenzielle Operatoren. Zusätzlich sind für outer-join, suchen Sie nach Instanzen von<key_column> IS NULL
imWHERE
- Klausel.InformationsquelleAutor der Antwort onedaywhen
Inner join - Ein inner join mit einer der äquivalenten Abfragen gibt die Schnittmenge der beiden Tabellend.h. die zwei Zeilen, die Sie gemeinsam haben.
Left outer join - Ein left outer join geben Sie alle Zeilen in A, sowie keine gemeinsamen Zeilen in B.
Full outer join - Ein full outer join geben Sie die Vereinigung von A und B, d.h. Alle Zeilen und alle Zeilen, die in B. Wenn etwas in Einem nicht mit einem entsprechenden datum in B, dann auf der B-Teil ist null, und vice versay
InformationsquelleAutor der Antwort Sandesh
Sowohl inner-und outer-joins verwendet werden, kombinieren, um Zeilen aus zwei oder mehr Tabellen in einem einzigen Ergebnis. Dies geschieht mit Hilfe einer join-Bedingung. Die join-Bedingung legt fest, wie Spalten aus jeder Tabelle sind aufeinander abgestimmt. In den meisten Fällen das Ziel ist, zu finden, die gleichen Werte zwischen Tabellen, und zählen die Spiele.
Der häufigste Fall für diese ist, wenn Sie passend zu den Fremdschlüssel einer Tabelle auf den Primärschlüssel des anderen, wie bei der Verwendung und der ID-lookup-Wert.
Obwohl beide inner und die outer-joins enthalten Zeilen aus beiden Tabellen, wenn die match-Bedingung erfolgreich ist, Sie unterscheiden sich in, wie Sie behandeln ein false-match-Bedingung.
Inner joins enthalten keine nicht-übereinstimmenden Zeilen; in der Erwägung, dass die outer-joins enthalten. Lassen Sie Graben ein wenig tiefer in die mechanik der einzelnen
Inner Join Mechanik
Einen inner join verwendet, um Ergebnisse durch die Kombination von Zeilen von zwei oder mehr Tabellen.
In seiner einfachsten Fall, wo es keine join-Bedingung, die eine innere Verknüpfung kombinieren würde alle Zeilen aus einer Tabelle mit denen einer anderen. Wenn die erste Tabelle, die drei Zeilen, die zweite, aus vier, dann ist das Endergebnis enthält zwölf (3 x 4 = 12) !
Den Zweck der join-Bedingung ist die Begrenzung, welche Zeilen zusammengefasst werden. In den meisten Fällen limitieren wir die Zeilen entsprechen einer Spalte.
Wenn eine person mehr als eine Telefonnummer, dann mehr als ein Spiel ist. Aus diesem können Sie sehen, kriegen wir vielleicht mehr Zeilen zurückgegeben, als haben wir für jede person.
Tabellen Beitreten, Umgekehrt, wenn eine person hat keine Telefonnummer, dann gibt es keinen Eintrag in PersonPhone, und kein match gemacht. Die jeweilige person wird nicht in den Ergebnissen enthalten, da nur diejenigen mit den spielen enthalten sind.
Nehmen wir ein Beispiel.
Nehme an, dass die HR-Manager erstellen möchte ein Telefonbuch. Sie möchten eine person mit Vornamen, Nachnamen, Titel und Telefonnummern. Wie Sie die Abfrage könnte Sie verwenden, um dies zu erstellen?
Hier ist eine, die den trick tun:
Dem INNER JOIN gibt an, welche Tabellen zu verbinden und die match-Bedingung zu tun. Der Zustand der PH-Wert.Telefon NumberTyeID = 3 beschränkt die Abfrage auf Arbeit zahlen.
Wenn Sie die oben genannten, Sie erhalten die folgenden Ergebnisse:
Inner Join-Ergebnisse im Auge zu Behalten, inner join gibt nur die Zeile, wo die match-Bedingung wahr ist. In diesem Beispiel werden Zeilen, wo die BusinessEntityID - nicht entsprechen, nicht enthalten sind. Dies könnte ein Problem sein, wenn eine person nicht über eine Telefonnummer, da diese Mitarbeiter wäre nicht auf der Liste.
Wollen Sie diese Mitarbeiter können Sie einen Outer join.
Outer-Join-Mechanik
Outer-join wird verwendet, um Ergebnisse durch die Kombination von Zeilen von zwei oder mehr Tabellen. Aber im Gegensatz zu einem inner join, outer join zurückkehren wird jede Zeile aus einer angegebenen Tabelle, auch wenn die join-Bedingung nicht.
Nehmen Sie das Telefon-Verzeichnis-Beispiel oben. Wenn der HR-manager wollte die Liste jedes Mitarbeiters unabhängig davon, ob Sie eine Telefon-Nummer, dann mit einem äußeren join würde es so machen.
Erfahren Sie mehr über die linke und Rechte äußere Verknüpfungen in diesem Artikel, für den jetzt nur noch verstehen, dass, wenn eine LEFT-OUTER-JOIN werden alle Zeilen für die Tabelle in der FROM-Klausel enthalten sind, in das Ergebnis, auch wenn eine übereinstimmung nicht gefunden wird, mit der anderen Tabelle.
Wenn eine übereinstimmung nicht gefunden wird, dann wird ein NULL in der Spalte.
Sie können dies in Aktion zu sehen unter:
Outer-Join-Ergebnisse Beachten Sie in dem Beispiel die Telefonnummer für Katharina Abel ist NULL. Dies ist, weil Catherine ' s Arbeit Nummer nicht aufgeführt ist, und keine übereinstimmung gefunden wurde, während der Verknüpfung.
Hätte man einen inner join, dann diese Zeile hätte nicht in den Ergebnissen enthalten.
InformationsquelleAutor der Antwort Nitin Kumar
In Einfachen Worten,
1.INNER JOIN ODER EQUI JOIN : Gibt das resultset, das passt nur zu der Bedingung in beiden Tabellen.
2.OUTER JOIN : Gibt die Ergebnismenge, die alle Werte aus beiden Tabellen, auch wenn es Bedingung übereinstimmen oder nicht.
3.LEFT JOIN : Gibt die Ergebnismenge, die alle Werte aus der linken Tabelle und nur die Zeilen, die der Bedingung entsprechen, in der rechten Tabelle.
4.RIGHT JOIN : Gibt die Ergebnismenge, die alle Werte aus der rechten Tabelle und nur die Zeilen, die der Bedingung entsprechen, die in der linken Tabelle.
5.FULL JOIN : Full Join und Full outer Join sind die gleichen.
InformationsquelleAutor der Antwort Anands23
1.Inner Join: Auch als Join. Es gibt die Zeilen in der Linken Tabelle, und aus der rechten Tabelle nur wenn es eine übereinstimmung gibt. Andernfalls gibt es null Datensätze.
Beispiel:
2.Full Outer Join: Auch als Full Join. Es gibt alle Zeilen in der Linken Tabelle, und aus der rechten Tabelle.
Beispiel:
3.Left Outer join: Oder einfach als wie bei Left Join. Es gibt alle Zeilen vorhanden, in die Linke Tabelle und die passenden Zeilen aus der rechten Tabelle (falls vorhanden).
4.Right Outer Join: Auch als Right Join. Es gibt übereinstimmende Zeilen aus der linken Tabelle (falls vorhanden), und alle Zeilen vorhanden, in der Rechten Tabelle.
Vorteile von Verknüpfungen
InformationsquelleAutor der Antwort Laxmi