2010-11-29 12 views
3

Mögliche Duplizieren:
Is there something wrong with joins that don't use the JOIN keyword in SQL or MySQL?SQL - Vorteile von JOINs?

Hallo,

i'ave immer abgerufenen Daten ohne verbindet ...

aber ist es ein Vorteil für ein Verfahren über das andere?

select * from a INNER JOIN b on a.a = b.b; 

select a.*,b.* from a,b where a.a = b.b; 

Vielen Dank!

+1

ähnlich (falls nicht identisch) diese Frage: http://stackoverflow.com/questions/128965/is-there-something-wrong-with-joins-that-dont-use-the-join-keyword- in-sql-or-mys – ZoFreX

+3

das sind beide Joins ... – Donnie

Antwort

0

Dies sind beide Joins. Sie sind nur zwei verschiedene syntaktische Darstellungen für Joins. Die erste, (unter dem Stichwort „Join“ ist die aktuelle ANSI-Norm (ab 1992 glaube ich).

Im Falle innerer schließt sich nur, die beiden differeent Darstellungen funktional identisch sind, aber letztere ANSI SQL92 Standardsyntax ist viel Moire-lesbar, sobald Sie sich daran gewöhnt haben, da jede einzelne Join-Bedingung mit dem Paar der dazwischenliegenden Ergebnismengen verknüpft ist. In der älteren Darstellung sind die Join-Bedingungen alle zusammen mit den gesamten Abfragen Filter Bedingungen, in der Where-Klausel, und es ist nicht so klar, was ist.Dies macht das Identifizieren schlechter Join-Bedingungen (wo beispielsweise ein nicht beabsichtigtes kartesisches Produkt erzeugt wird) viel schwieriger.

Aber wichtiger ist vielleicht, dass, wenn ein äußeren Join, in bestimmten Szenarien durchgeführt wird, die ältere Syntax NICHT equivilent wird, und in der Tat wird das FALSCH resultset erzeugen.

Sie sollten für alle Ihre Abfragen in die neuere Syntax wechseln.

0

Sie haben die Daten immer mit Joins abgerufen. Die zweite Abfrage verwendet alte Syntax, aber im Hintergrund ist es immer noch beitreten :)

2

Ich würde sagen, der größte Vorteil ist die Lesbarkeit. Die Version mit den explizit genannten Join-Typen ist für mich viel einfacher zu verstehen.

8

Die erste Methode, die INNER JOIN Schlüsselwort ist:

  • ANSI SQL-Standard
  • viel sauberer und ausdrucks

Deshalb habe ich immer zusammenzucken, wenn ich die zweite Option gebraucht - es bläht nur Ihre WHERE-Klausel, und Sie können nicht wirklich auf einen Blick sehen, wie die Tabellen verbunden sind (auf welchen Feldern).

Sollten Sie eine der JOIN-Bedingungen in einer langen Liste von WHERE-Klauselausdrücken vergessen, erhalten Sie plötzlich ein unordentliches kartesisches Produkt ..... das kann nicht mit dem Schlüsselwort INNER JOIN (Sie müssen das Feld ausdrücken (s), um mitzumachen).

+0

Nun, es gibt Situationen, wo alte Syntax tatsächlich lesbarer ist. Und normalerweise ist es nur eine Frage der persönlichen Vorlieben. –

1

Sie verwenden grundsätzlich eine andere Syntax für eine JOIN. Aus Gründen der Best Practices empfiehlt es sich, die erste Syntax (explizit JOIN) zu verwenden, da die Absicht der Abfrage klarer ist und der Code einfacher zu pflegen ist.

0

Das hängt vom RDBMS ab, aber im Fall von SQL Server verstehe ich, dass die Verwendung der früheren Syntax eine bessere Optimierung ermöglicht. Dies ist weniger eine SQL-Frage und eher eine herstellerspezifische Frage.

Sie können auch die EXPLAIN (SQL Server: Query Execution Plan) Art Funktionen verwenden, um zu verstehen, ob es einen Unterschied gibt. Jede Abfrage ist einzigartig und ich stelle mir vor, dass die gespeicherten Statistiken das Verhalten ändern können (und werden).