1125 Stimmen

INNER JOIN ON vs WHERE-Klausel

Der Einfachheit halber nehmen wir an, dass alle relevanten Felder NOT NULL .

Das können Sie tun:

SELECT
    table1.this, table2.that, table2.somethingelse
FROM
    table1, table2
WHERE
    table1.foreignkey = table2.primarykey
    AND (some other conditions)

Oder aber:

SELECT
    table1.this, table2.that, table2.somethingelse
FROM
    table1 INNER JOIN table2
    ON table1.foreignkey = table2.primarykey
WHERE
    (some other conditions)

Funktionieren diese beiden auf dieselbe Weise in MySQL ?

2 Stimmen

@Marco: hier ist es

2 Stimmen

32 Stimmen

Wenn ich es richtig verstanden habe, handelt es sich bei der ersten Variante um die implizite ANSI-SQL-89-Syntax und bei der zweiten Variante um die explizite ANSI-SQL-92-Join-Syntax. Beide führen in konformen SQL-Implementierungen zum gleichen Ergebnis und beide führen in gut gemachten SQL-Implementierungen zum gleichen Abfrageplan. Ich persönlich bevorzuge die SQL-89-Syntax, aber viele Leute bevorzugen die SQL-92-Syntax.

3voto

Kviz Majster Punkte 90

Wenn Sie häufig dynamische gespeicherte Prozeduren programmieren, werden Sie sich in Ihr zweites Beispiel (mit where) verlieben. Wenn Sie verschiedene Eingabeparameter und viel Morph-Chaos haben, dann ist das die einzige Möglichkeit. Ansonsten führen beide denselben Abfrageplan aus, so dass es bei klassischen Abfragen definitiv keinen offensichtlichen Unterschied gibt.

1voto

Thomas Klier Punkte 291

Ich habe zwei Punkte für die implizite Verknüpfung (das zweite Beispiel):

  1. Sagen Sie der Datenbank, was Sie wollen, nicht was sie tun soll.
  2. Sie können alle Tabellen in eine übersichtliche Liste schreiben, die nicht durch Join-Bedingungen überfrachtet ist. Dann können Sie viel leichter lesen, welche Tabellen alle erwähnt werden. Die Bedingungen kommen alle in den WHERE-Teil, wo sie auch alle untereinander aufgereiht sind. Die Verwendung des JOIN-Schlüsselworts bringt Tabellen und Bedingungen durcheinander.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X