2009-02-19 17 views
708

Beides verbindet gibt mir die gleichen Ergebnisse:Unterschied zwischen JOIN und INNER JOIN

SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK 

vs

SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK 

Gibt es einen Unterschied zwischen den Aussagen in der Leistung oder auf andere Weise?

Unterscheidet es sich zwischen verschiedenen SQL-Implementierungen?

+0

diese Frage finden:

+1

Als Randbemerkung: CROSS JOIN a Gut zu wissen Join-Typ (es unterscheidet sich von INNER JOIN). – Serge

+5

Sollte wieder geöffnet werden, da die andere Frage nicht als gleichwertig signalisiert wird. Das OP fragt, ob es einen Unterschied beim Schreiben von JOIN oder INNER JOIN gibt –

Antwort

789

sie funktionell äquivalent ist, aber INNER JOIN kann ein wenig klarer, insbesondere zu lesen, wenn die Abfrage anderen Typen hat verbinden (d.h. LEFT oder RIGHT oder CROSS) darin enthalten.

+4

Gilt das für alle Datenbanken (z. B. SQL, Postgres?) Kennt jemand einen Link zu der Dokumentation, die das erklärt? – Chogg

+1

Es ist ANSI SQL-Standard. Siehe mehr: http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt; https://en.wikipedia.org/wiki/SQL-92 – Indian

195

Nein, es gibt keinen Unterschied, rein syntactic sugar.

+11

Ich würde diesen syntaktischen Zucker nicht nennen. "Standard" Join-Typ, "Kurzschrift" oder "Alias", vielleicht. – mk12

+34

* In der Informatik ist syntaktischer Zucker eine Syntax in einer Programmiersprache, die dazu dient, Dinge leichter lesbar zu machen oder auszudrücken *. Ich glaube, die Fähigkeit, "INNER" wegzulassen, fällt unter diese Definition. – Quassnoi

+6

Wenn Sie die Definition sehr wörtlich anwenden, ja, aber ich habe es immer für interessantere Arten von Syntax reserviert, nicht nur alternative Namen für Dinge. – mk12

43

Ähnlich ist es mit OUTER JOINs das Wort "OUTER" ist optional, seine die LEFT oder RIGHT Schlüsselwort, das die JOIN ein "OUTER" JOIN macht.

aber aus irgendeinem Grund habe ich immer "OUTER" wie in LEFT OUTER JOIN verwenden und nie LEFT JOIN, aber ich INNER JOIN nie benutzen, sondern benutze ich nur "JOIN"

SELECT ColA, ColB, ... 
FROM MyTable AS T1 
    JOIN MyOtherTable AS T2 
     ON T2.ID = T1.ID 
    LEFT OUTER JOIN MyOptionalTable AS T3 
     ON T3.ID = T1.ID 
+14

Ich bin das Gegenteil von dir: Ich sage immer "INNER JOIN", aber ich benutze nie OUTER; also "LINKE VERBINDUNG" und "RECHTE VERBINDUNG". Schätze, ich halte meine Charakterzahlen konstant! –

+0

Sie können also keine linke oder rechte innere Verbindung haben? –

+3

@ Jonathan.Es gibt kein Konzept der Richtung auf einer inneren Verbindung. Outer-Joins können nicht angepasste Ergebnissätze erzeugen, und diese können basierend auf der Richtung variieren. Innerer Requirement Matching, so dass die Richtung keine Rolle spielt. –

108

INNER JOIN = JOIN:

INNER JOIN ist die Standard, wenn Sie den Typ nicht angeben, wenn Sie das Wort JOIN verwenden.

Sie können auch LEFT OUTER JOIN oder RIGHT OUTER JOIN verwenden. In diesem Fall ist das Wort OUTER optional, , oder Sie können CROSS JOIN angeben.

OR

für eine innere verbinden, die Syntax ist:

SELECT ...
FROM TableA
[INNER] JOIN TableB

(in anderen Worten, das Schlüsselwort "INNER" ist optional - Ergebnisse sind gleich mit oder ohne)

37

Unterschiede zwischen den verschiedenen SQL-Implementierungen?

Ja, MS Access erlaubt es nicht nur join es erfordert inner join.

591

Wenn Sie einfach JOIN eingeben, wird standardmäßig INNER JOIN ausgeführt.

Für alle anderen ist ein Bild manchmal mehr wert als Hunderte von Wörtern:

enter image description here

Foto mit freundlicher Genehmigung von CodeProject


+296

In diesem Fall könnten Hunderte von Wörtern tatsächlich die Frage beantwortet haben. Dieses Bild enthält einfach nicht die Antwort auf die Frage. Die Frage war für den Unterschied zwischen JOIN und INNER JOIN und dieses Bild hat kein Beispiel für JOIN allein. Das sagte ich weiß und mag dieses Bild sehr, aber es ist als Antwort unangemessen. – konqi

+31

Ich kam hierher, um herauszufinden, wofür der JOIN eine Abkürzung war.Ich weiß, was INNER, LINKER ÄUSSERER und RECHTER ÄUSSERER tun. –

+0

Sind es richtige Bilder? Ich habe Fehler gefunden –

20

Wie die anderen Antworten angeben, schon gibt es keinen Unterschied in Ihr Beispiel.

Das entsprechende Bit der Grammatik ist documented here

<join_type> ::= 
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ] 
    JOIN 

Zeige, dass alle sind optional. Die Seite verdeutlicht weiter, dass

INNER Gibt alle übereinstimmenden Paare von Zeilen zurückgegeben werden. Verwirft nicht übereinstimmende Zeilen aus beiden Tabellen. Wenn kein Verbindungstyp angegeben ist, ist der Standardwert.

Die Grammatik funktioniert zeigen auch, dass es eine Zeit, wo die INNER obwohl erforderlich ist. Wenn ein Join-Hinweis angegeben wird.

Siehe nachstehendes Beispiel

CREATE TABLE T1(X INT); 
CREATE TABLE T2(Y INT); 

SELECT * 
FROM T1 
     LOOP JOIN T2 
     ON X = Y; 

SELECT * 
FROM T1 
     INNER LOOP JOIN T2 
     ON X = Y; 

enter image description here