• left join: LEFT JOIN gibt alle Datensätze aus der linken Tabelle und Datensätze aus der rechten Tabelle zurück, bei denen die Join-Felder gleich sind.
  • right join: RIGHT JOIN gibt alle Datensätze aus der rechten Tabelle und Datensätze aus der linken Tabelle zurück, bei denen die Join-Felder gleich sind.
  • inner join: INNER JOIN, auch Equi-Join genannt, gibt nur Zeilen zurück, bei denen die Join-Felder in beiden Tabellen gleich sind.
  • full join: OUTER JOIN, gibt Zeilen aus beiden Tabellen zurück: LEFT JOIN + RIGHT JOIN.
  • cross join: Das Ergebnis ist ein kartesisches Produkt, d. h., die Anzahl der Zeilen in der ersten Tabelle multipliziert mit der Anzahl der Zeilen in der zweiten Tabelle.

Schlüsselwort ON

Wenn die Datenbank Datensätze durch Verknüpfen von zwei oder mehr Tabellen zurückgibt, erzeugt sie eine temporäre Zwischentabelle und gibt diese temporäre Tabelle dann an den Benutzer zurück.

Bei Verwendung von [LEFT JOIN]left join,onandwhereist der Unterschied zwischen den Bedingungen wie folgt:

  • 1, onDie [ON]-Bedingung ist die Bedingung, die beim Erzeugen der temporären Tabelle verwendet wird. Unabhängig davon,onob die Bedingung in [ON] wahr ist, werden Datensätze aus der linken Tabelle zurückgegeben.
  • 2, whereDie [WHERE]-Bedingung ist die Bedingung, die zum Filtern der temporären Tabelle verwendet wird, nachdem sie erzeugt wurde. An diesem Punkt gibt es nicht mehr dieleft joinBedeutung von [LEFT JOIN] (dass Datensätze aus der linken Tabelle zurückgegeben werden müssen); alle Datensätze, die die Bedingung nicht erfüllen, werden herausgefiltert.

Angenommen, es gibt zwei Tabellen:

Tabelle 1: tab1

id size
1 10
2 20
3 30

Tabelle 2: tab2

size name
10 AAA
20 BBB
20 CCC

Zwei SQL-Anweisungen:

select * from tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name='AAA'

select * from tab1 left join tab2 on (tab1.size = tab2.size and tab2.name='AAA')
Ablauf der ersten SQL-Anweisung:

 

1. Zwischentabelle
ON-Bedingung:
tab1.size = tab2.size
tab1.id tab1.size tab2.size tab2.name
1 10 10 AAA
2 20 20 BBB
2 20 20 CCC
3 30 (null) (null)

 

   
2. Dann die Zwischentabelle filtern
WHERE-Bedingung:
tab2.name='AAA'
tab1.id tab1.size tab2.size tab2.name
1 10 10 AAA

 

   

 

Ablauf der zweiten SQL-Anweisung:

 

1. Zwischentabelle
ON-Bedingung:
tab1.size = tab2.size and tab2.name='AAA'
(Datensätze aus der linken Tabelle werden auch dann zurückgegeben, wenn die Bedingung nicht wahr ist)
tab1.id tab1.size tab2.size tab2.name
1 10 10 AAA
2 20 (null) (null)
3 30 (null) (null)

 

 

Tatsächlich ist der Hauptgrund für die obigen Ergebnisseleft join、right join、full joindie besondere Eigenschaft von [LEFT JOIN]: unabhängig davon,onob die Bedingung bei [ON] wahr ist, wird esleft zurückgebenoderrightDatensätze aus der [LEFT]-Tabelle,full[FULL JOIN] hatleftundrightdie Vereinigung der Eigenschaften von [LEFT JOIN und RIGHT JOIN]. Allerdings hatinner jion[WHERE] diese besondere Eigenschaft nicht, daher ist es unerheblich, ob die Bedingung inon platziert wird[ON] oder inwhere[WHERE], sind die zurückgegebenen Ergebnismengen dieselben.

Adresse des Originalartikels: https://www.cnblogs.com/wlzhang/p/4532587.html