it-swarm.com.de

Unterschied zwischen linkem und rechtem Join in SQL Server

Ich kenne Joins in SQL Server.

Zum Beispiel. Es gibt zwei Tabellen Table1, Table2.

Ihre Tabellenstrukturen sind die folgenden.

create table Table1 (id int, Name varchar (10))

create table Table2 (id int, Name varchar (10))

Tabelle1 Daten wie folgt:

    Id     Name     
    -------------
    1      A        
    2      B    

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

216
Pankaj Agarwal
Select * from Table1 left join Table2 ...

und

Select * from Table2 right join Table1 ...

sind ja komplett austauschbar. Versuchen Sie jedoch Table2 left join Table1 (oder sein identisches Paar, Table1 right join Table2) um einen Unterschied zu sehen. Diese Abfrage sollte mehr Zeilen enthalten, da Tabelle2 eine Zeile mit einer ID enthält, die in Tabelle1 nicht vorhanden ist.

71
Péter Török

Codeproject hat dieses Bild, das die einfachen Grundlagen von SQL-Joins erklärt. Es stammt aus: http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx SQL joins explained

997
Daan Timmer

Die Tabelle, aus der Sie Daten entnehmen, ist "LINKS".
Der Tisch, an dem Sie teilnehmen, ist "RICHTIG".
LEFT JOIN: Nimm alle Items vom linken Tisch UND (nur) die passenden Items vom rechten Tisch.
RIGHT JOIN: Nimm alle Items vom rechten Tisch UND (nur) die passenden Items vom linken Tisch.
Damit:

Select * from Table1 left join Table2 on Table1.id = Table2.id  

gibt:

Id     Name       
-------------  
1      A          
2      B      

aber:

Select * from Table1 right join Table2 on Table1.id = Table2.id

gibt:

Id     Name       
-------------  
1      A          
2      B   
3      C  

sie haben direkt eine Tabelle mit weniger Zeilen in einer Tabelle mit mehr Zeilen verbunden
UND
verließ erneut die Verbindungstabelle mit weniger Zeilen in der Tabelle mit mehr Zeilen
Versuchen:

 If Table1.Rows.Count > Table2.Rows.Count Then  
    ' Left Join  
 Else  
    ' Right Join  
 End If  
37
vbole

(INNER) JOIN: Gibt Datensätze zurück, deren Werte 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

Angenommen, wir haben zwei Tabellen mit folgenden Datensätzen:

Tabelle A

id   firstname   lastname
___________________________
1     Ram         Thapa
2     sam         Koirala
3     abc         xyz
6    sruthy       abc

Tabelle B

id2   place
_____________
1      Nepal
2      USA
3      Lumbini
5      Kathmandu

Inner Join

Hinweis: Es gibt den Schnittpunkt zweier Tabellen.

Inner Join

Syntax

SELECT column_name FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;

Wenden Sie es in Ihrer Beispieltabelle an:

SELECT TableA.firstName,TableA.lastName,TableB.Place FROM TableA INNER JOIN TableB ON TableA.id = TableB.id2;

Ergebnis wird sein:

firstName       lastName       Place
_____________________________________
  Ram         Thapa             Nepal
  sam         Koirala            USA
  abc         xyz              Lumbini

Left Join

Hinweis: Gibt alle ausgewählten Zeilen in Tabelle A sowie alle gemeinsamen ausgewählten Zeilen in Tabelle B an.

Left join

SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;

Wenden Sie es in Ihrer Probentabelle an

SELECT TableA.firstName,TableA.lastName,TableB.Place FROM TableA LEFT JOIN TableB ON TableA.id = TableB.id2;

Ergebnis wird sein:

firstName   lastName    Place
______________________________
 Ram         Thapa      Nepal
 sam         Koirala    USA
 abc         xyz        Lumbini
sruthy       abc        Null

Right Join

Hinweis: Gibt alle ausgewählten Zeilen in Tabelle B sowie alle gemeinsamen ausgewählten Zeilen in Tabelle A an.

Right Join

Syntax:

SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;

Wende es in deiner Samole-Tabelle an:

SELECT TableA.firstName,TableA.lastName,TableB.Place FROM TableA RIGHT JOIN TableB ON TableA.id = TableB.id2;

Ergebnis wird bw:

firstName   lastName     Place
______________________________
Ram         Thapa         Nepal
sam         Koirala       USA
abc         xyz           Lumbini
Null        Null          Kathmandu

Full Join

Hinweis: Es ist dasselbe wie bei einer Vereinigungsoperation, es werden alle ausgewählten Werte aus beiden Tabellen zurückgegeben.

Full join

Syntax:

SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;

Wende es in deinem Samp an [le table:

SELECT TableA.firstName,TableA.lastName,TableB.Place FROM TableA FULL JOIN TableB ON TableA.id = TableB.id2;

Ergebnis wird sein:

firstName   lastName    Place
______________________________
 Ram         Thapa      Nepal
 sam         Koirala    USA
 abc         xyz        Lumbini
sruthy       abc        Null
 Null         Null      Kathmandu

Einige Fakten

Für INNER ist die Reihenfolge egal

Für (LINKS, RECHTS oder VOLL) OUTER ist die Reihenfolge wichtig

Mehr finden Sie unter w3schools

14
select fields 
from tableA --left
left join tableB --right
on tableA.key = tableB.key

Die Tabelle in der from in diesem Beispiel tableA befindet sich auf der linken Seite der Beziehung.

tableA <- tableB
[left]------[right]

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 "left 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 die Zeichenfolge right join.

Daher entspricht die folgende Abfrage der oben verwendeten.

select fields
from tableB 
right join tableA on tableB.key = tableA.key
12
Moraes

Sie scheinen zu fragen: "Wenn ich einen RIGHT OUTER JOIN Mit einer LEFT OUTER JOIN - Syntax umschreiben kann, warum dann überhaupt eine RIGHT OUTER JOIN - Syntax?" Ich denke, die Antwort auf diese Frage ist, dass die Designer der Sprache den Benutzern keine solche Einschränkung auferlegen wollten (und ich denke, sie wären in diesem Fall kritisiert worden), was die Benutzer dazu zwingen würde, die Reihenfolge der Tabellen zu ändern unter bestimmten Umständen in der FROM -Klausel, wenn lediglich der Verknüpfungstyp geändert wird.

10
onedaywhen

Ihre beiden Aussagen sind gleichwertig.

Die meisten Leute benutzen nur LEFT JOIN da es intuitiver zu sein scheint und eine universelle Syntax hat - ich glaube nicht, dass alle RDBMS-Unterstützung RIGHT JOIN.

8
JNK

Ich bin der Meinung, dass wir möglicherweise die AND Bedingung in der where Klausel der letzten Ziffer von Outer Excluding JOIN Benötigen, damit wir das gewünschte Ergebnis von A Union B Minus A Interaction B Erhalten. Ich bin der Meinung, dass die Abfrage aktualisiert werden muss

SELECT <select_list>
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.Key = B.Key
WHERE A.Key IS NULL AND B.Key IS NULL

Wenn wir OR verwenden, erhalten wir alle Ergebnisse von A Union B

0
vinsinraw

Wählen Sie * aus Tabelle1, und verbinden Sie Tabelle2 in Tabelle1.id = Tabelle2.id

In der ersten Abfrage Linke Verknüpfung vergleicht linke Seite Tabelle Tabelle1 mit rechte Seite Tabelle Tabelle2).

Wobei alle Eigenschaften von table1 angezeigt werden, wohingegen in table2 nur die Eigenschaften angezeigt werden, bei denen die Bedingung wahr ist.

Wählen Sie * in Tabelle2 aus, und verbinden Sie Tabelle1 in Tabelle1.id = Tabelle2.id

In der ersten Abfrage Rechtsverknüpfung vergleicht rechtsseitig Tabelle Tabelle1 mit linksseitig Tabelle Tabelle2).

Wobei alle Eigenschaften von table1 angezeigt werden, wohingegen in table2 nur die Eigenschaften angezeigt werden, bei denen die Bedingung wahr ist.

Beide Abfragen führen zu demselben Ergebnis, da die Reihenfolge der Tabellendeklaration in der Abfrage unterschiedlich ist. So wie Sie table1 und table2 in deklarieren. left und right jeweils in first left join abfragen und auch table1 und table2 in right und left deklarieren = bzw. in zweiter rechter Join abfragen.

Dies ist der Grund, warum Sie in beiden Abfragen das gleiche Ergebnis erhalten. Wenn Sie also ein anderes Ergebnis wünschen, führen Sie die beiden folgenden Abfragen aus:

Wählen Sie * aus Tabelle1, und verbinden Sie Tabelle2 in Tabelle1.id = Tabelle2.id

Wählen Sie * in Tabelle1 aus, und verbinden Sie Tabelle2 in Tabelle1.id = Tabelle2.id

0
Nisarg Shah

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 werden per Definition: Rechtsverknüpfung alle Spalten ausgewählt, die mit dem Schlüsselwort "select" aus Tabelle 2 und den Spalten aus Tabelle 1 erwähnt werden, 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 erhalten Sie vier Spalten mit den Spalten id und name von first) und zweite Tabellen in 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 vom obigen Ausdruck alle Datensätze (Zeilen) aus Tabelle 1 und Spalten mit übereinstimmenden IDs aus Tabelle 1 und Tabelle 2 aus Tabelle 2 verwendet Alle Spalten aus Tabelle2 und nicht aus Tabelle1 werden berücksichtigt.

0
user5837472