Inner Join Vs Outer Join: Exakter Unterschied mit Beispielen

Inner Join Vs Outer Join: Machen Sie sich bereit, die genauen Unterschiede zwischen Inner und Outer Join zu erforschen

Bevor wir die Unterschiede zwischen Inner Join Vs Outer Join erforschen, lassen Sie uns zuerst sehen, was ein SQL JOIN ist?

Eine Join-Klausel wird verwendet, um Datensätze zu kombinieren oder um Datensätze aus zwei oder mehr Tabellen durch eine Join-Bedingung zu manipulieren. Die Join-Bedingung gibt an, wie Spalten aus jeder Tabelle miteinander abgeglichen werden.

Der Join basiert auf einer verwandten Spalte zwischen diesen Tabellen. Ein gängiges Beispiel ist die Verknüpfung zwischen zwei Tabellen über die Primärschlüsselspalte und die Fremdschlüsselspalte.

INNER JOIN VS OUTER JOIN

Angenommen, wir haben eine Tabelle, die das Gehalt eines Mitarbeiters enthält, und eine andere Tabelle, die Mitarbeiterdetails enthält.

In diesem Fall gibt es eine gemeinsame Spalte wie die Mitarbeiter-ID, die diese beiden Tabellen verbindet. Diese Spalte mit der Mitarbeiter-ID wäre der Primärschlüssel der Tabelle mit den Mitarbeiterdetails und der Fremdschlüssel in der Tabelle mit dem Mitarbeitergehalt.

Es ist sehr wichtig, einen gemeinsamen Schlüssel zwischen den beiden Entitäten zu haben. Man kann sich eine Tabelle als Entität vorstellen und den Schlüssel als gemeinsames Bindeglied zwischen den beiden Tabellen, das für die Join-Operation verwendet wird.

Grundsätzlich gibt es zwei Arten von Join in SQL, nämlich Inner Join und Outer Join. Der Outer Join wird weiter in drei Typen unterteilt, nämlich Left Outer Join, Right Outer Join und Full Outer Join.

In diesem Artikel werden wir den Unterschied zwischen Inner Join und Outer Join im Detail betrachten. Cross Joins und Unequal Joins werden in diesem Artikel nicht behandelt.

Was ist ein Inner Join?

Ein Inner Join gibt nur die Zeilen zurück, die übereinstimmende Werte in beiden Tabellen haben (wir betrachten hier den Join zwischen den beiden Tabellen).

Was ist ein Outer Join?

Der Outer Join umfasst sowohl die übereinstimmenden als auch einige der nicht übereinstimmenden Zeilen zwischen den beiden Tabellen. Ein Outer Join unterscheidet sich vom Inner Join im Wesentlichen dadurch, wie er die Bedingung der falschen Übereinstimmung behandelt.

Es gibt 3 Arten von Outer Join:

  • Left Outer Join: Liefert alle Zeilen aus der LINKEN Tabelle und passende Datensätze zwischen den beiden Tabellen.
  • Right Outer Join: Liefert alle Zeilen aus der Tabelle RECHTS und übereinstimmende Datensätze zwischen den beiden Tabellen.
  • Full Outer Join: Kombiniert das Ergebnis des Left Outer Join und des Right Outer Join.

Unterschied zwischen Inner und Outer Join

Unterschied zwischen INNER JOIN und OUTER JOIN

Wie im obigen Diagramm dargestellt, gibt es zwei Entitäten, d.h. Tabelle 1 und Tabelle 2, und beide Tabellen haben einige gemeinsame Daten.

Ein Inner Join gibt den gemeinsamen Bereich zwischen diesen Tabellen zurück (der grün schattierte Bereich im obigen Diagramm), d.h. alle Datensätze, die Tabelle 1 und Tabelle 2 gemeinsam sind.

Ein Left Outer Join gibt alle Zeilen aus Tabelle 1 und nur die Zeilen aus Tabelle 2 zurück, die auch Tabelle 1 gemeinsam sind. Ein Right Outer Join bewirkt genau das Gegenteil. Er liefert alle Datensätze aus Tabelle 2 und nur die entsprechenden übereinstimmenden Datensätze aus Tabelle 1.

Außerdem liefert ein Full Outer Join alle Datensätze aus Tabelle 1 und Tabelle 2.

Lassen Sie uns mit einem Beispiel beginnen, um dies zu verdeutlichen.

Angenommen, wir haben zwei Tabellen: EmpDetails und EmpSalary.

Tabelle EmpDetails:

EmployeeID EmployeeName
1 John
2 Samantha
3 Hakuna
4 Silky
5 Ram
6 Arpit
7 Lily
8 Sita
9 Farah
10 Jerry

Gehaltsliste:

MitarbeiterID Mitarbeitername MitarbeiterGehalt
1 John 50000
2 Samantha 120000 3 Hakuna 75000
4 Silky 25000
5 Ram 150000
6 Arpit 80000
11 Rose 90000
12 Sakshi 45000
13 Jack 250000

Lassen Sie uns einen Inner Join auf diesen beiden Tabellen durchführen und das Ergebnis beobachten:

Abfrage:

SELECT EmpDetails. EmployeeID, EmpDetails. EmployeeName, EmpSalary. EmployeeSalaryFROM EmpDetails INNER JOIN EmpSalaryON EmpDetails. EmployeeID = EmpSalary. EmployeeID;

Ergebnis:

MitarbeiterID MitarbeiterName MitarbeiterGehalt
1 John 50000
2 Samantha 120000
3 Hakuna 75000
4 Silky 25000
5 Ram 150000
6 Arpit 80000

In der obigen Ergebnismenge, können Sie sehen, dass Inner Join die ersten 6 Datensätze zurückgegeben hat, die sowohl in EmpDetails als auch in EmpSalary vorhanden waren und einen übereinstimmenden Schlüssel haben, d. h.d. h. EmployeeID. Wenn also A und B zwei Entitäten sind, wird der Inner Join die Ergebnismenge zurückgeben, die gleich „Datensätze in A und B“ ist, basierend auf dem übereinstimmenden Schlüssel.

Lassen Sie uns nun sehen, was ein Left Outer Join bewirkt.

Abfrage:

SELECT EmpDetails. EmployeeID, EmpDetails. EmployeeName, EmpSalary. EmployeeSalaryFROM EmpDetails LEFT JOIN EmpSalaryON EmpDetails. EmployeeID = EmpSalary. EmployeeID;

Ergebnis:

MitarbeiterID Mitarbeitername MitarbeiterGehalt
1 John 50000
2 Samantha 120000
3 Hakuna 75000
4 Silky 25000
5 Ram 150000
6 Arpit 80000
7 Lily NULL
8 Sita NULL
9 Farah NULL
10 Jerry NULL

In der obigen Ergebnismenge, können Sie sehen, dass die linke äußere Verknüpfung alle 10 Datensätze aus der Tabelle LEFT, d. h.Da die ersten 6 Datensätze übereinstimmen, wurde das Mitarbeitergehalt für diese übereinstimmenden Datensätze zurückgegeben.

Da die restlichen Datensätze keinen übereinstimmenden Schlüssel in der Tabelle RECHTS, d. h. in der Tabelle „EmpSalary“, haben, wurde für diese Datensätze NULL zurückgegeben. Da Lily, Sita, Farah und Jerry keine übereinstimmende Mitarbeiter-ID in der Tabelle EmpSalary haben, wird ihr Gehalt als NULL in der Ergebnismenge angezeigt.

Wenn also A und B zwei Entitäten sind, gibt der linke äußere Join die Ergebnismenge zurück, die gleich „Datensätze in A NICHT B“ ist, basierend auf dem übereinstimmenden Schlüssel.

Nun wollen wir beobachten, was der rechte äußere Join tut.

Abfrage:

SELECT EmpDetails. EmployeeID, EmpDetails. EmployeeName, EmpSalary. EmployeeSalaryFROM EmpDetails RIGHT join EmpSalaryON EmpDetails. EmployeeID = EmpSalary. EmployeeID;

Ergebnis:

MitarbeiterID Mitarbeitername MitarbeiterGehalt
1 John 50000
2 Samantha 120000
3 Hakuna 75000
4 Silky 25000
5 Ram 150000
6 Arpit 80000
NULL NULL 90000
NULL NULL 250000
NULL NULL 250000

In der obigen Ergebnismenge, können Sie sehen, dass der Right Outer Join genau das Gegenteil des Left Join bewirkt hat. Er hat alle Gehälter aus der rechten Tabelle, d. h. der Tabelle EmpSalary, zurückgegeben.

Da aber Rose, Sakshi und Jack keine übereinstimmende Mitarbeiter-ID in der linken Tabelle, d. h. der Tabelle EmpDetails, haben wir ihre Mitarbeiter-ID und ihren Mitarbeiternamen als NULL aus der linken Tabelle erhalten.

Wenn also A und B zwei Entitäten sind, gibt die rechte äußere Verknüpfung die Ergebnismenge zurück, die gleich „Datensätze in B NICHT A“ ist, basierend auf dem übereinstimmenden Schlüssel.

Lassen Sie uns auch sehen, was die Ergebnismenge sein wird, wenn wir eine Auswahloperation für alle Spalten in beiden Tabellen durchführen.

Abfrage:

SELECT *FROM EmpDetails RIGHT JOIN EmpSalaryON EmpDetails. EmployeeID = EmpSalary. EmployeeID;

Ergebnis:

MitarbeiterID Mitarbeitername MitarbeiterID Mitarbeitername MitarbeiterGehalt
1 John 1 John 50000
2 Samantha 2 Samantha 120000
3 Hakuna 3 Hakuna 75000
4 Silky 4 Silky 25000
5 Ram 5 Ram 150000
6 Arpit 6 Arpit 80000
NULL NULL 11 Rose 90000
NULL NULL 12 Sakshi 250000
NULL NULL 13 Jack 250000

Nun, lassen Sie uns zum Full Join übergehen.

Ein Full Outer Join wird durchgeführt, wenn wir alle Daten aus beiden Tabellen benötigen, unabhängig davon, ob es eine Übereinstimmung gibt oder nicht. Wenn ich also alle Mitarbeiter haben möchte, auch wenn ich keinen übereinstimmenden Schlüssel finde, führe ich eine Abfrage wie unten gezeigt aus.

Abfrage:

SELECT *FROM EmpDetails FULL JOIN EmpSalaryON EmpDetails. EmployeeID = EmpSalary. EmployeeID;

Ergebnis:

MitarbeiterID Mitarbeitername MitarbeiterID Mitarbeitername MitarbeiterGehalt
1 John 1 John 50000
2 Samantha 2 Samantha 120000
3 Hakuna 3 Hakuna 75000
4 Silky 4 Silky 25000
5 Ram 5 Ram 150000
6 Arpit 6 Arpit 80000
7 Lily NULL NULL NULL
8 Sita NULL NULL NULL
9 Farah NULL NULL NULL
10 Jerry NULL NULL NULL
NULL NULL 11 Rose 90000
NULL NULL 12 Sakshi 250000
NULL NULL 13 Jack 250000

In der obigen Ergebnismenge können Sie sehen, dass die ersten sechs Datensätze in beiden Tabellen übereinstimmen, wir alle Daten ohne NULL erhalten haben. Die nächsten vier Datensätze sind in der linken Tabelle vorhanden, aber nicht in der rechten Tabelle, so dass die entsprechenden Daten in der rechten Tabelle NULL sind.

Die letzten drei Datensätze sind in der rechten Tabelle vorhanden und nicht in der linken Tabelle, so dass die entsprechenden Daten in der linken Tabelle NULL sind. Wenn also A und B zwei Entitäten sind, gibt der Full Outer Join die Ergebnismenge zurück, die gleich „Datensätze in A UND B“ ist, unabhängig vom übereinstimmenden Schlüssel.

Theoretisch handelt es sich um eine Kombination aus Left Join und Right Join.

Leistung

Lassen Sie uns einen Inner Join mit einem Left Outer Join im SQL-Server vergleichen. Wenn wir über die Geschwindigkeit der Operation sprechen, ist ein Left Outer JOIN offensichtlich nicht schneller als ein Inner Join.

Der Definition nach muss ein Outer Join, sei es der linke oder der rechte, die gesamte Arbeit eines Inner Joins zusammen mit der zusätzlichen Arbeit der Nullerweiterung der Ergebnisse durchführen. Es ist zu erwarten, dass ein Outer Join eine größere Anzahl von Datensätzen zurückgibt, was die Gesamtausführungszeit aufgrund der größeren Ergebnismenge weiter erhöht.

Daher ist ein Outer Join langsamer als ein Inner Join.

Darüber hinaus kann es einige spezifische Situationen geben, in denen der Left Join schneller ist als ein Inner Join, aber wir können sie nicht gegeneinander austauschen, da ein Left Outer Join funktional nicht gleichwertig mit einem Inner Join ist.

Lassen Sie uns einen Fall diskutieren, in dem der Left Join schneller sein könnte als der Inner Join. Wenn die Tabellen, die an der Join-Operation beteiligt sind, zu klein sind, d.h. weniger als 10 Datensätze haben und die Tabellen keine ausreichenden Indizes besitzen, um die Abfrage abzudecken, ist in diesem Fall der Left Join im Allgemeinen schneller als der Inner Join.

Lassen Sie uns als Beispiel die beiden folgenden Tabellen erstellen und einen INNER JOIN und einen LEFT OUTER JOIN zwischen ihnen durchführen:

CREATE TABLE #Table1(ID int NOT NULL PRIMARY KEY,Name varchar(50) NOT NULL)INSERT #Table1 (ID, Name) VALUES (1, 'A')INSERT #Table1 (ID, Name) VALUES (2, 'B')INSERT #Table1 (ID, Name) VALUES (3, 'C')INSERT #Table1 (ID, Name) VALUES (4, 'D')INSERT #Table1 (ID, Name) VALUES (5, 'E')CREATE TABLE #Table2(ID int NOT NULL PRIMARY KEY,Name varchar(50) NOT NULL)INSERT #Table2 (ID, Name) VALUES (1, 'A')INSERT #Table2 (ID, Name) VALUES (2, 'B')INSERT #Table2 (ID, Name) VALUES (3, 'C')INSERT #Table2 (ID, Name) VALUES (4, 'D')INSERT #Table2 (ID, Name) VALUES (5, 'E')SELECT *FROM #Table1 t1INNER JOIN #Table2 t2ON t2.Name = t1.Name
ID Name ID Name
1 1 A 1 A
2 2 B 2 B
3 3 C 3 C
4 4 D 4 D
5 5 E 5 E
SELECT * FROM (SELECT 38 AS bah) AS foo JOIN (SELECT 35 AS bah) AS barON (55=55);
ID Name ID Name
1 1 A 1 A
2 2 B 2 B
3 3 C 3 C
4 4 D 4 D
5 5 E 5 E

Wie Sie oben sehen können, haben beide Abfragen die gleiche Ergebnismenge geliefert. Wenn Sie sich in diesem Fall den Ausführungsplan beider Abfragen ansehen, werden Sie feststellen, dass die innere Verknüpfung mehr gekostet hat als die äußere Verknüpfung. Das liegt daran, dass der SQL-Server für eine innere Verknüpfung einen Hash-Abgleich durchführt, während er für die linke Verknüpfung verschachtelte Schleifen durchführt.

Ein Hash-Abgleich ist normalerweise schneller als die verschachtelten Schleifen. Aber in diesem Fall, da die Anzahl der Zeilen so klein ist und es keinen Index zu verwenden gibt (da wir eine Verknüpfung über die Namensspalte durchführen), hat sich die Hash-Operation als eine sehr teure innere Verknüpfungsabfrage herausgestellt.

Wenn Sie jedoch den übereinstimmenden Schlüssel in der Verknüpfungsabfrage von Name in ID ändern und wenn es eine große Anzahl von Zeilen in der Tabelle gibt, dann werden Sie feststellen, dass die innere Verknüpfung schneller ist als die linke äußere Verknüpfung.

MS Access Innerer und Äußerer Join

Wenn Sie mehrere Datenquellen in einer MS Access-Abfrage verwenden, wenden Sie JOINs an, um die Datensätze zu kontrollieren, die Sie sehen möchten, je nachdem, wie die Datenquellen miteinander verknüpft sind.

Bei einem inneren Join werden nur die verwandten Datensätze aus beiden Tabellen in einer einzigen Ergebnismenge kombiniert. Dies ist ein Standard-Join in Access und auch der am häufigsten verwendete. Wenn Sie eine Verknüpfung anwenden, aber nicht explizit angeben, um welche Art von Verknüpfung es sich handelt, geht Access davon aus, dass es sich um eine innere Verknüpfung handelt.

Bei äußeren Verknüpfungen werden alle verwandten Daten aus beiden Tabellen korrekt kombiniert, plus alle übrigen Zeilen aus einer Tabelle. Bei Full Outer Joins werden alle Daten so weit wie möglich kombiniert.

Left Join vs Left Outer Join

In SQL Server ist das Schlüsselwort Outer optional, wenn Sie Left Outer Join anwenden. Es macht also keinen Unterschied, ob Sie ‚LEFT OUTER JOIN‘ oder ‚LEFT JOIN‘ schreiben, da beide das gleiche Ergebnis liefern.

A LEFT JOIN B ist eine gleichwertige Syntax zu A LEFT OUTER JOIN B.

Nachfolgend finden Sie eine Liste der äquivalenten Syntaxen im SQL Server:

Äquivalente Syntaxen im SQL Server

Left Outer Join vs Right Outer Join

Wir haben diesen Unterschied bereits in diesem Artikel gesehen. Sie können sich die Abfragen Left Outer Join und Right Outer Join und die Ergebnismenge ansehen, um den Unterschied zu erkennen.

Der Hauptunterschied zwischen Left Join und Right Join liegt in der Einbeziehung der nicht übereinstimmenden Zeilen. Der Left Outer Join schließt die nicht übereinstimmenden Zeilen aus der Tabelle ein, die sich links von der Join-Klausel befindet, während der Right Outer Join die nicht übereinstimmenden Zeilen aus der Tabelle einschließt, die sich rechts von der Join-Klausel befindet.

Die Leute fragen, was besser ist, d.h. Left Join oder Right Join zu verwenden? Im Grunde genommen handelt es sich um dieselbe Art von Operationen, nur mit umgekehrten Argumenten. Wenn Sie also fragen, welche Verknüpfung Sie verwenden sollen, fragen Sie eigentlich, ob Sie a<b oder b>a schreiben sollen. Es ist nur eine Frage der Vorliebe.

Im Allgemeinen bevorzugen die Leute die Verwendung von Left join in ihrer SQL-Abfrage. Ich würde vorschlagen, dass Sie in der Art und Weise, in der Sie die Abfrage schreiben, konsistent bleiben sollten, um jegliche Verwirrung bei der Interpretation der Abfrage zu vermeiden.

Wir haben bisher alles über Inner join und alle Arten von Outer joins gesehen. Lassen Sie uns kurz den Unterschied zwischen Inner Join und Outer Join zusammenfassen.

Unterschied zwischen Inner Join und Outer Join im Tabellenformat

Inner Join Outer Join
Gibt nur die Zeilen zurück, die übereinstimmende Werte in beiden Tabellen haben. Einschließlich der übereinstimmenden Zeilen sowie einiger nicht übereinstimmender Zeilen zwischen den beiden Tabellen.
Für den Fall, dass eine große Anzahl von Zeilen in den Tabellen vorhanden ist und ein Index verwendet werden muss, ist ein INNER JOIN im Allgemeinen schneller als ein OUTER JOIN. Im Allgemeinen ist ein OUTER JOIN langsamer als ein INNER JOIN, da er im Vergleich zum INNER JOIN mehr Datensätze zurückgeben muss. Es kann jedoch einige spezifische Szenarien geben, in denen OUTER JOIN schneller ist.
Wenn eine Übereinstimmung nicht gefunden wird, wird nichts zurückgegeben. Wenn eine Übereinstimmung nicht gefunden wird, wird ein NULL in den zurückgegebenen Spaltenwert gesetzt.
Verwenden Sie INNER JOIN, wenn Sie detaillierte Informationen zu einer bestimmten Spalte nachschlagen möchten. Verwenden Sie OUTER JOIN, wenn Sie die Liste aller Informationen in den beiden Tabellen anzeigen möchten.
INNER JOIN wirkt wie ein Filter. Es muss eine Übereinstimmung in beiden Tabellen geben, damit ein innerer Join Daten zurückgibt. Sie wirken wie Daten-Add-ons.
Es gibt eine implizite Join-Notation für den inneren Join, die die zu verbindenden Tabellen in der FROM-Klausel kommagetrennt aufführt.
Beispiel: SELECT * FROM produkt, kategorie WHERE produkt.kategorieID = kategorie.kategorieID;
Für die äußere Verknüpfung gibt es keine implizite Join-Notation.
Nachfolgend ist die Visualisierung eines Inner Joins:
Visualisierung eines Inner Join
Unten ist die Visualisierung eines Outer Join
Visualisierung eines Outer Join

Inner und Outer Join vs Union

Manchmal verwechseln wir Join und Union und dies ist auch eine der am häufigsten gestellten Fragen in SQL-Interviews. Wir haben bereits den Unterschied zwischen Inner Join und Outer Join gesehen. Nun wollen wir sehen, wie sich ein JOIN von einer UNION unterscheidet.

UNION stellt eine Reihe von Abfragen hintereinander, während Join ein kartesisches Produkt erzeugt und es unterteilt. UNION und JOIN sind also völlig unterschiedliche Operationen.

Lassen Sie uns die beiden folgenden Abfragen in MySQL ausführen und ihr Ergebnis sehen.

UNION Abfrage:

SELECT 28 AS bahUNIONSELECT 35 AS bah;

Ergebnis:

Bah
1 28
2 35

JOIN Abfrage:

SELECT * FROM(SELECT 38 AS bah) AS fooJOIN(SELECT 35 AS bah) AS barON (55=55);

Ergebnis:

foo Bar
1 38 35

Eine UNION-Operation stellt das Ergebnis von zwei oder mehr Abfragen in eine einzige Ergebnismenge. Diese Ergebnismenge enthält alle Datensätze, die durch alle an der UNION beteiligten Abfragen zurückgegeben werden. Eine UNION-Operation kombiniert also im Grunde die beiden Ergebnismengen miteinander.

Eine Join-Operation holt Daten aus zwei oder mehr Tabellen auf der Grundlage der logischen Beziehungen zwischen diesen Tabellen, d.h. auf der Grundlage der Join-Bedingung. In einer Join-Abfrage werden Daten aus einer Tabelle verwendet, um Datensätze aus einer anderen Tabelle auszuwählen. Sie ermöglicht die Verknüpfung ähnlicher Daten, die in verschiedenen Tabellen vorhanden sind.

Um es ganz einfach zu verstehen, kann man sagen, dass eine UNION Zeilen aus zwei Tabellen kombiniert, während ein Join Spalten aus zwei oder mehr Tabellen kombiniert. Beide werden also verwendet, um die Daten aus n Tabellen zu kombinieren, aber der Unterschied liegt darin, wie die Daten kombiniert werden.

Nachfolgend sind die bildlichen Darstellungen von UNION und JOIN.

UNION und JOIN1

Das obige Bild zeigt eine Join-Operation, bei der jeder Datensatz in der Ergebnismenge Spalten aus beiden Tabellen enthält, d. h. aus Tabelle A und Tabelle B. Dieses Ergebnis wird auf der Grundlage der in der Abfrage angewandten Join-Bedingung zurückgegeben.

Eine Verknüpfung ist im allgemeinen das Ergebnis einer Denormalisierung (das Gegenteil einer Normalisierung) und verwendet den Fremdschlüssel einer Tabelle, um die Spaltenwerte mit Hilfe des Primärschlüssels in einer anderen Tabelle nachzuschlagen.

UNION und JOIN2

Das obige Bild zeigt eine UNION-Operation, bei der jeder Datensatz in der Ergebnismenge eine Zeile aus einer der beiden Tabellen ist. Das Ergebnis der UNION hat also die Zeilen aus Tabelle A und Tabelle B kombiniert.

Weiterlesen =>> MySQL UNION erklärt mit Beispielen

Abschluss

In diesem Artikel haben wir die Hauptunterschiede zwischen Inner Join und Outer Join in SQL gesehen. Wir haben auch die Klassifizierung eines Outer Join gesehen, d.h. Left Join, Right Join und Full Join. Wir haben gesehen, wie jeder dieser Join-Typen funktioniert und wie sie sich voneinander unterscheiden.

Wir haben auch einen Leistungsvergleich zwischen diesen Join-Typen durchgeführt. Wir haben auch besprochen, wie sich ein Join von einer Union unterscheidet.

Lesen Sie auch =>> MySQL Join Types

Hoffentlich hat Ihnen dieser Artikel geholfen, Ihre Zweifel bezüglich der Unterschiede zwischen den verschiedenen Join-Typen zu beseitigen. Wir sind sicher, dass Sie dadurch entscheiden können, welchen Join-Typ Sie auf der Grundlage der gewünschten Ergebnismenge wählen sollten.