web-dev-qa-db-de.com

Unterschied zwischen innerem Join und Where in Select Join-SQL-Anweisung

Ich habe zwei Select Join SQL-Anweisungen:

select a.id from table_a as a, table_b as b where a.id=b.id;
select a.id from table_a as a inner join table_b as b on a.id=b.id;

Offensichtlich sind sie im Ergebnis gleich. Gibt es jedoch einen Unterschied zwischen ihnen, wie z. B. Leistung, Portabilität?.

18
爱国者

Ein Unterschied besteht darin, dass die erste Option die Absicht verbirgt, indem sie die Join-Bedingung in der where-Klausel ausdrückt.

Die zweite Option, bei der die Verknüpfungsbedingung ausgeschrieben ist, ist für den Benutzer, der die Abfrage liest, klarer. Es zeigt die genaue Absicht der Abfrage.

Was die Leistung oder einen anderen Unterschied betrifft, sollte es keinen geben. Beide Abfragen sollten genau dasselbe Ergebnis zurückgeben und unter den meisten RDBMS dasselbe ausführen.

20
Icarus

Die innere Verknüpfungssyntax wurde in den 90er Jahren zu SQL hinzugefügt. Es ist möglich, aber unwahrscheinlich, dass der Optimierer damit bessere Ergebnisse erzielen kann als mit der alten Syntax, in der die where-Klausel für die Join-Bedingung verwendet wurde.

Sie sollten beide in hohem Maße portabel sein, wie es jetzt der Fall ist.

Die innere Verknüpfungssyntax ist vorzuziehen, da sie für den Leser einfacher ist, wie andere bereits bemerkt haben.

3
Walter Mitty

Beide sind Standard-SQL. Unterschiedliche DB-Systeme können sie unterschiedlich optimieren, aber weil sie so einfach sind, wäre ich ein wenig überrascht, wenn sie dies tun. Aber das ist die Natur von SQL: Es ist deklarativ, was der Implementierung viel Spielraum bei der Ausführung Ihrer Abfrage gibt. Es gibt keine Garantie, dass diese die gleiche Leistung erbringen, oder, falls sie unterschiedlich sind, eine schnellere.

0
Ned Batchelder

Sie sind in SQL Server genau gleich. Es gibt keinen Leistungsunterschied.

0
Bishnu Paudel