Heim  >  Artikel  >  Datenbank  >  Eine Erklärung des Unterschieds in der Verwendung von on und where in SQL-Anweisungen

Eine Erklärung des Unterschieds in der Verwendung von on und where in SQL-Anweisungen

巴扎黑
巴扎黑Original
2017-07-17 09:37:217063Durchsuche

Dieser Blog bezieht sich auf das Internet. Ich weiß nicht, welcher Artikel das Originalmanuskript ist, daher erkläre ich es hiermit.

Wenn die Datenbank durch Verbinden von zwei oder mehr Tabellen Datensätze zurückgibt, wird eine temporäre Zwischentabelle generiert und diese temporäre Tabelle dann an den Benutzer zurückgegeben.

Empfohlene verwandte MySQL-Video-Tutorials: „MySQL-Tutorial

Bei Verwendung von Left Jion ist der Unterschied zwischen On- und Where-Bedingungen wie folgt:

1. Die Ein-Bedingung ist eine Bedingung, die beim Generieren einer temporären Tabelle verwendet wird. Sie gibt die Datensätze in der linken Tabelle zurück, unabhängig davon, ob die Bedingung in Ein erfüllt ist.

2. Die Where-Bedingung ist die Bedingung zum Filtern der temporären Tabelle, nachdem die temporäre Tabelle generiert wurde. Zu diesem Zeitpunkt hat der linke Join keine Bedeutung (die Datensätze der linken Tabelle müssen zurückgegeben werden). Wenn die Bedingung nicht wahr ist, werden alle herausgefiltert.

Angenommen, es gibt zwei Tabellen:

Tabelle 1: tab2

tbody>

id

size

1

10

2

20

3

30

id

size

size

name

10

AAA

20

BBB

20

CCC

1


10
1、select * form tab1 left join tab2 on (tab1.size =
tab2.size) where tab2.name=’AAA’
2、select * form tab1 left join tab2 on (tab1.size =
tab2.size and tab2.name=’AAA’)
2

第一条SQL的过程:

1、中间表on条件: tab1.size = tab2.sizetab1.idtab1.sizetab2.sizetab2.name11010AAA22020BBB22020CCC330(null)(null)||2、再对中间表过滤where 条件(此时不为真的行会被过滤掉):tab2.name=’AAA’tab1.idtab1.sizetab2.sizetab2.name11010AAA 

第二条SQL的过程:

1、中间表on条件: tab1.size = tab2.size and tab2.name=’AAA’(条件不为真也会返回左表中的记录)tab1.idtab1.sizetab2.sizetab2.name11010AAA220(null)(null)330(null)(null)
20

3 30
Tabelle 2: tab2
Größe Name
10 AAA
20

BBB
20 CCC

Zwei SQLs:

Der erste SQL-Prozess:

1. Zwischentabelle unter der Bedingung: tab1.size = tab2.sizetab1.idtab1.sizetab2.sizetab2.name11010AAA22020BBB22020CCC330(null)(null)|| 2. Dann Filtern Sie die Where-Bedingung in der Zwischentabelle (Zeilen, die zu diesem Zeitpunkt nicht wahr sind, werden herausgefiltert): tab2.name='AAA'tab1.idtab1.sizetab2.sizetab2.name11010AAA
Zweiter SQL-Prozess: 1. Mittelstufe Tabelle unter Bedingung: tab1.size = tab2.size und tab2.name='AAA' (die Datensätze in der linken Tabelle werden zurückgegeben, wenn die Bedingung nicht wahr ist) tab1.idtab1.sizetab2.sizetab2.name11010AAA220(null)(null ) 330(null)(null)
Tatsächlich ist der Hauptgrund für die obigen Ergebnisse die Besonderheit von Left Join, Right Join und Full Join. Unabhängig davon, ob die Bedingung auf 🎜>auf wahr ist oder nicht, wird links oder rechts in der Tabelle Record , full hat die Vereinigung der Merkmale von links und rechts. Das innere Jion weist diese Besonderheit nicht auf, daher werden die Bedingungen in on und where platziert und die zurückgegebene Ergebnismenge ist dieselbe Zusammenfassung: Im Allgemeinen filtert die where-Anweisung die Anzahl der Zeilen heraus, die NULL enthalten (die Anzahl der Zeilen mit einer falschen Bedingung). Daher sind in der FULL JOIN-Anweisung die Ergebnisse der where-Anweisung und der on-Anweisung am unterschiedlichsten; in der JOIN/INNER JOIN-Anweisung gibt es keinen Unterschied zwischen LEFT JOIN und RIGHT JOIN, der Unterschied hängt vom Ausdruck ab und die Daten in der Tabelle.

Das obige ist der detaillierte Inhalt vonEine Erklärung des Unterschieds in der Verwendung von on und where in SQL-Anweisungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn