2010-08-05 23 views
5

Ich erstelle eine Abfrage, die Informationen für einen Datensatz anzeigen wird, der aus 8 Tabellen abgeleitet ist. Der Entwickler, der die Abfrage ursprünglich geschrieben hat, verwendete eine Kombination aus "wo dies gleich ist" und "dies entspricht dem", um die Verknüpfungen zu erstellen.SQL INNER JOIN Frage

Ich habe seit der Abfrage geändert, INNER JOINS zu verwenden. Ich fragte mich, ob meine Vorgehensweise besser war als eine Kombination von WHERE-Operatoren.

Auf ein Maß der guten Praxis, ist eine Kombination von INNEREN VERBINDUNGEN eine gute Wahl oder sollte ich eine andere Technik einsetzen.

Antwort

3

Von der Leistung Sicht, es wird keinen Unterschied geben ... zumindest nicht auf prominenten RDBMS wie Sql-Server/Oracle ... Diese Datenbank-Engine, sind in der Lage zu erkennen, die beiden Muster und die gleichen Derselbe Ausführungsplan für beide ...

In meiner bescheidenen Meinung sind beide gleichermaßen gute Praxis, aber Sie sollten Konsistenz und korrekte Ausrichtung beibehalten ... Irgendwo habe ich gehört, dass where-Klausel im Allgemeinen von Oracle-Entwicklern verwendet wird, und innere beitreten Sql-Server ... Bin mir nicht sehr sicher ... Inzwischen sind die meisten Programmierer in der Lage, beide Arten von Abfragen zu verstehen ...

+0

genannt wurde MySQL und generell bevorzugen INNER JOIN einfach weil ich. Der Code sieht sauberer aus und es scheint einfacher zu verstehen. Ich bin richtig in der Annahme, dass ein Innerer Join verwendet werden soll, wenn es einen Datensatz in beiden Tabellen gibt. –

+0

Ja ... Innerer Join wird nur die Datensätze abrufen, die einen übereinstimmenden Datensatz in der untergeordneten Tabelle enthalten ... Wenn in der untergeordneten Tabelle kein übereinstimmender Datensatz vorhanden ist, wird diese bestimmte Zeile vom Abfrageergebnis ausgeschlossen. –

+0

Ich frage mich, ob Sie mir bei der Frage helfen können, die ich mache? Es gibt viel zu viele Platten, die ich erwartet hatte. –

0

Beide werden sich gleich verhalten (wie The King sagte). Persönlich bevorzuge ich die Syntax INNER/OUTER/LEFT JOIN, weil sie intuitiver/expliziter ist. Wenn Sie in LINKE VERBINDUNGEN mit Join-Bedingungen in der WHERE-Klausel kommen, dann müssen Sie Plus-Zeichen verwenden und dann müssen Sie sich daran erinnern, auf welcher Seite Sie sie platzieren sollen. Urgghh.

Es scheint auch (wieder wie der König sagte) wahr zu sein, dass Oracle Entwickler die Join-Bedingungen in die WHERE-Klausel setzen.

-Jamiet

1

Ich glaube, dass es keinen Unterschied in der Leistung zwischen den beiden ist:

ANSI-Art
SELECT * FROM Table1 a JOIN TABLE2 b on a.id = b.id

Old Style
SELECT * FROM Table1 a , TABLE2 b
WHERE a.id = b.id

Der ANSI-Stil ist neuer und lesbarer und hübscher, ich bevorzuge den alten Stil, besonders wenn es darum geht, mehr als 4/5 Tabellen zu verbinden ... vielleicht weil ich ein Oracle Dev bin, wie es vor o