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.