2012-12-24 15 views
5

, was der Unterschied zwischen diesen beiden SQL-Anweisungen istJOIN/Wo KONZEPTE

a) select * from T1,T2 where T1.A=T2.A ;

b) select * from T1,T2 where T2.A=T1.A ;

ich die gleiche Leistung in beiden Fällen bekommen, ist es Unterschiede zwischen den beiden Aussagen?

c) select * from T1 inner join T2 on T1.A=T2.A ;

Was die diffence zwischen Statement C ist und a? In diesem Fall auch die gleiche Leistung wie von a und b bekommen ...

Kann Inner auch als SQL-Anweisung geschrieben werden Joins ein?

Antwort

8

Sie sind alle im Wesentlichen verschiedene Möglichkeiten, zwei Tabellen zu verknüpfen Zustand der gleiche beitreten werden.

Zwischen 1 und 2 gibt es absolut keinen Unterschied, was die Datenbank betrifft.

Die letzte Option ist die standardisierte Joinsyntax - das sollten Sie verwenden, um sicherzustellen, dass Ihr SQL lesbar ist - das erwarten die Leute, die Ihr SQL lesen, wenn Sie Tabellen beitreten.

1

SQL ist wie Mathematik so; Gleichheit ist symmetrisch. Wenn A = B, dann ist B = A. Dort sollte kein Unterschied sein.

Die JOIN/ON-Notation ist nur eine andere Möglichkeit, dasselbe zu schreiben. Die Notation ist unterschiedlich, um den Join visuell zu betonen.

Die Ausgabe sagt Ihnen die Antwort besser als eine beliebige Anzahl von SO-Benutzern. Warum glaubst du deinen eigenen Augen nicht?

1

Alle sind gleich es keinen Unterschied

ist

Dies sind diiferent Wege

0

(a) und (c) sind die gleichen, außer der zweite ist ANSI-92 SQL-Syntax und der erste ist die ältere SQL-Syntax, die die Join-Klausel nicht enthalten. Sie sollten genau denselben internen Abfrageplan erstellen, obwohl Sie dies gerne überprüfen möchten.

Sie sollten die ANSI-92-Syntax für mehrere Gründe

  • Die Verwendung der JOIN-Klausel verwenden, trennt die Beziehung Logik von der Filterlogik (WHERE) und ist damit sauberer und leichter zu verstehen .
  • Es funktioniert nicht mit dieser speziellen Abfrage Rolle, aber es gibt ein paar Umstände, unter denen die ältere äußere Join-Syntax (mit +) ist mehrdeutig und die Abfrageergebnisse sind daher abhängig von der Implementierung - oder die Abfrage kann nicht aufgelöst werden alle. Diese treten nicht mit ANSI-92
  • auf Es ist gute Praxis, da die meisten Entwickler und dba's ANSI-92 heutzutage verwenden werden, und Sie sollten dem Standard folgen. Sicherlich werden alle modernen Abfrage-Tools ANSI-92 generieren.