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

Bei Verwendung vonleft joinwenn,onundwhereDer Unterschied zwischen den Bedingungen ist wie folgt:

1, onDie ON-Bedingung wird beim Generieren der temporären Tabelle verwendet; es ist unerheblichon, ob die Bedingung in ON wahr ist, sie gibt Datensätze aus der linken Tabelle zurück.

2. Die WHERE-Bedingung ist eine Bedingung zum Filtern der temporären Tabelle, nachdem sie generiert wurde. An diesem Punkt gibt es nicht mehrleft joindie Bedeutung von LEFT JOIN (muss Datensätze aus der linken Tabelle zurückgeben); alle Datensätze, für die die Bedingung nicht wahr ist, 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:

1、select * from tab1 left join tab2 on tab1.size = tab2.size where tab2.name='AAA'
2、select * from tab1 left join tab2 on tab1.size = tab2.size and tab2.name='AAA'

Der 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

Der Ablauf der zweiten SQL-Anweisung:

1. Zwischentabelle

on-Bedingung:

tab1.size = tab2.size and tab2.name='AAA'
(条件不为真也会返回左表中的记录) tab1.id tab1.size tab2.size tab2.name
1 10 10 AAA
2 20 (null) (null)
3 30 (null) (null)

Tatsächlich ist der entscheidende Grund für die obigen Ergebnisseleft join,right join,full joindie besondere Eigenschaft von LEFT JOIN.

Unabhängig davon, ob die Bedingung in ON wahr ist, werden Datensätze aus der LEFT- oder RIGHT-Tabelle zurückgegeben; FULL hat die Vereinigung der Eigenschaften von LEFT und RIGHT.

Aber INNER JOIN hat diese Besonderheit nicht; ob die Bedingung in ON oder WHERE steht, ist die zurückgegebene Ergebnismenge dieselbe.