Ich kenne Joins in SQL Server.
Beispielsweise. Es gibt zwei Tabellen Tabelle1, Tabelle2.
Ihre Tabellenstrukturen sind die folgenden.
create table Table1 (id int, Name varchar (10))
create table Table2 (id int, Name varchar (10))
Tabelle 1 Daten wie folgt:
Id Name
-------------
1 A
2 B
Tabelle 2 Daten wie folgt:
Id Name
-------------
1 A
2 B
3 C
Wenn ich beide unten genannten SQL-Anweisungen ausführe, sind beide Ausgaben gleich
select *
from Table1
left join Table2 on Table1.id = Table2.id
select *
from Table2
right join Table1 on Table1.id = Table2.id
Bitte erläutern Sie den Unterschied zwischen linkem und rechtem Join in den obigen SQL-Anweisungen.
sql
sql-server
join
left-join
right-join
Pankaj Agarwal
quelle
quelle
RIGHT JOIN
wenn wir mit nur ein gewünschtes Ergebnis erzielen könnenLEFT JOIN
? : PSelect * from Table1 left join Table 2
gibt ALLE Datensätze von Tabelle 1 plus übereinstimmende Datensätze von Tabelle 2 zurück. Das GegenteilSelect * from Table1 right join Table 2
würde ALLE Datensätze aus Tabelle 2 und übereinstimmende Datensätze von Tabelle 1 zurückgeben. Hoffentlich hilft es.Codeproject enthält dieses Bild, in dem die einfachen Grundlagen von SQL-Joins erläutert werden: http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx
quelle
JOIN Table_B b ON A.Key = B.Key
. Die OP-Bedingung funktioniert einwandfrei.Die Tabelle, aus der Sie Daten entnehmen, ist 'LINKS'.
Die Tabelle, der Sie beitreten, ist "RECHTS".
LINKS VERBINDEN: Nehmen Sie alle Elemente aus der linken Tabelle UND (nur) übereinstimmende Elemente aus der rechten Tabelle.
RECHTS BEITRETEN: Nehmen Sie alle Gegenstände vom rechten Tisch UND (nur) passende Gegenstände vom linken Tisch.
So:
gibt:
aber:
gibt:
Sie haben die Tabelle rechts mit weniger Zeilen in der Tabelle mit mehr Zeilen verbunden
UND
wieder die Tabelle links mit weniger Zeilen in der Tabelle mit mehr Zeilen verbunden.
Versuchen Sie:
quelle
(INNER) JOIN: Gibt Datensätze zurück, deren Tabellen in beiden Tabellen übereinstimmen.
LEFT (OUTER) JOIN: Gibt alle Datensätze aus der linken Tabelle und die übereinstimmenden Datensätze aus der rechten Tabelle zurück.
RIGHT (OUTER) JOIN: Gibt alle Datensätze aus der rechten Tabelle und die übereinstimmenden Datensätze aus der linken Tabelle zurück.
FULL (OUTER) JOIN: Gibt alle Datensätze zurück, wenn eine Übereinstimmung in der linken oder rechten Tabelle vorliegt
Nehmen wir zum Beispiel an, wir haben zwei Tabellen mit folgenden Datensätzen:
Inner Join
Syntax
Wenden Sie es in Ihrer Beispieltabelle an:
Ergebnis wird sein:
Links beitreten
Wenden Sie es in Ihrer Beispieltabelle an
Ergebnis wird sein:
Right Join
Syntax:
Wende es in deiner Samoletabelle an:
Ergebnis wird bw:
Vollständige Teilnahme
Syntax:
Wenden Sie es in Ihrem Samp an [le table:
Ergebnis wird sein:
Für INNER-Joins spielt die Reihenfolge keine Rolle
Bei (LEFT, RIGHT oder FULL) OUTER-Joins spielt die Reihenfolge eine Rolle
Weitere Informationen finden Sie unter w3schools
quelle
Die Tabelle in
from
diesem BeispieltableA
befindet sich auf der linken Seite der Beziehung.Wenn Sie also alle Zeilen aus der linken Tabelle (
tableA
) übernehmen möchten , auch wenn die rechte Tabelle (tableB
) keine Übereinstimmungen enthält , verwenden Sie den "linken Join".Und wenn Sie alle Zeilen aus der rechten Tabelle (
tableB
) übernehmen möchten , auch wenn die linke Tabelle (tableA
) keine Übereinstimmungen enthält , verwenden Sie dieright join
.Daher entspricht die folgende Abfrage der oben verwendeten.
quelle
Sie scheinen zu fragen : „Wenn ich ein umschreiben kann
RIGHT OUTER JOIN
mitLEFT OUTER JOIN
dann Syntax , warum eine habeRIGHT OUTER JOIN
überhaupt Syntax?“ Ich denke, die Antwort auf diese Frage lautet, weil die Designer der Sprache den Benutzern keine solche Einschränkung auferlegen wollten (und ich denke, sie wären kritisiert worden, wenn sie dies getan hätten), was die Benutzer dazu zwingen würde, die Reihenfolge der Tabellen zu ändern in derFROM
Klausel unter bestimmten Umständen, wenn lediglich der Join-Typ geändert wird.quelle
Ihre beiden Aussagen sind gleichwertig.
Die meisten Leute verwenden nur,
LEFT JOIN
weil es intuitiver erscheint und es eine universelle Syntax ist - ich denke nicht, dass alle RDBMS unterstützt werdenRIGHT JOIN
.quelle
LEFT
aber nichtRIGHT
, geben Sie bitte an, welche.RIGHT
undFULL OUTER JOIN
: sqlite.org/omitted.htmlIch bin der Meinung, dass wir möglicherweise eine
AND
Bedingung inwhere
Klausel der letzten Zahl von benötigen ,Outer Excluding JOIN
damit wir das gewünschte Ergebnis von erhaltenA Union B Minus A Interaction B
. Ich bin der Meinung, dass die Abfrage aktualisiert werden mussWenn wir verwenden
OR
, erhalten wir alle Ergebnisse vonA Union B
quelle
Wählen Sie * aus Tabelle1 und verbinden Sie Tabelle2 mit Tabelle1.id = Tabelle2.id
In der ersten Abfrage LEFT JOIN vergleicht linksseitigen Tabelle table1 zu rechtsseitigen Tabelle table2 .
In dem werden alle Eigenschaften von Tabelle1 angezeigt, während in Tabelle2 nur die Eigenschaften angezeigt werden, in denen die Bedingung erfüllt ist.
Wählen Sie * aus Tabelle2 aus und verbinden Sie Tabelle1 mit Table1.id = Table2.id
In der ersten Abfrage vergleicht Right Join die rechtsseitige Tabelle table1 mit der linksseitigen Tabelle table2 .
In dem werden alle Eigenschaften von Tabelle1 angezeigt, während in Tabelle2 nur die Eigenschaften angezeigt werden, in denen die Bedingung erfüllt ist.
Beiden Abfragen werden das gleiche Ergebnis , da die Reihenfolge der Tabellendeklaration in Abfrage unterschiedlich ist wie erklären Sie Tabelle1 und Tabelle2 in links und rechts jeweils in ersten LEFT JOIN Abfrage, und auch erklärt tabelle1 und table2 in rechts und links jeweils in der zweiten Straße rechts beitreten Abfrage.
Dies ist der Grund, warum Sie in beiden Abfragen das gleiche Ergebnis erhalten. Wenn Sie also ein anderes Ergebnis wünschen, führen Sie diese beiden Abfragen aus.
Wählen Sie * aus Tabelle1 und verbinden Sie Tabelle2 mit Tabelle1.id = Tabelle2.id
Wählen Sie * aus Tabelle1 aus und verbinden Sie Tabelle2 mit Table1.id = Table2.id
quelle
Select * from Table1 t1 Left Join Table2 t2 on t1.id=t2.id
Per Definition: Left Join wählt alle Spalten aus, die mit dem Schlüsselwort "select" aus Tabelle 1 und den Spalten aus Tabelle 2 erwähnt wurden, die den Kriterien nach dem Schlüsselwort "on" entsprechen.In ähnlicher Weise wählt Per Definition: Right Join alle Spalten aus, die mit dem Schlüsselwort "select" aus Tabelle 2 und den Spalten aus Tabelle 1 erwähnt wurden, die den Kriterien nach dem Schlüsselwort "on" entsprechen.
In Bezug auf Ihre Frage werden die IDs in beiden Tabellen mit allen Spalten verglichen, die für die Ausgabe benötigt werden. Daher sind die IDs 1 und 2 in beiden Tabellen gleich. Als Ergebnis haben Sie vier Spalten mit ID- und Namensspalten aus der ersten und zweiten Tabelle in der angegebenen Reihenfolge.
*select * from Table1 left join Table2 on Table1.id = Table2.id
Mit dem obigen Ausdruck werden alle Datensätze (Zeilen) aus Tabelle 1 und Spalten mit übereinstimmenden IDs aus Tabelle 1 und Tabelle 2 aus Tabelle 2 übernommen.
select * from Table2 right join Table1 on Table1.id = Table2.id**
In ähnlicher Weise werden aus dem obigen Ausdruck alle Datensätze (Zeilen) aus Tabelle 1 und Spalten mit übereinstimmenden IDs aus Tabelle 1 und Tabelle 2 aus Tabelle 2 übernommen. (Denken Sie daran, dies ist eine richtige Verknüpfung, sodass alle Spalten aus Tabelle 2 und nicht aus Tabelle1 wird berücksichtigt).
quelle