2013-03-15 19 views
38

Ich habe Joins namens LEFT OUTER JOIN oder RIGHT OUTER JOIN gesehen. An manchen Orten habe ich LEFT JOIN oder RIGHT JOIN gesehen. Ich bin dadurch verwirrt.Sind links außen und links links gleich?

Ich habe eine question vor 2 Tagen gepostet, aber ich bin nicht in der Lage zu verstehen, die Links, die die Lösungen bieten.

Sind diese Arten von Joins beide gleich, oder besteht ein Unterschied zwischen den beiden?

+10

sind sie gleich. – EmCo

+5

'LEFT JOIN' ist das gleiche wie' LEFT OUTER JOIN'. Das Schlüsselwort "OUTER" ist * optional *. –

+0

@ JW. Ich sah die Verbindung, was auch immer Sie vorgeschlagen haben. Es ist sehr nützlich. Aber es erfüllte noch nicht alle meine Zweifel. http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html – PSR

Antwort

2

In MySQL Syntax LEFT OUTER JOIN und LEFT JOIN identisch sind: (von http://dev.mysql.com/doc/refman/5.0/en/join.html)

| table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_condition 
| table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor 

beachten, dass das Schlüsselwort OUTER optional ist für links/rechts JOIN.

LINKE und RECHTE Verbindungen sind beide äußere Verbindungen. Ich glaube, es gibt einige Varianten von SQL, die das Schlüsselwort OUTER erfordern, aber MySQL nicht. Das heißt, dass zuweilen LEFT JOIN möglicherweise nicht gültig ist.

18

Der erste Link sie zitierte gibt Ihnen:

INNER JOIN: gibt Zeilen, wenn es eine Übereinstimmung in beiden Tabellen.

LEFT JOIN/LEFT OUTER JOIN: gibt alle Zeilen aus der linken Tabelle zurück, auch wenn in der rechten Tabelle keine Übereinstimmungen vorhanden sind.

RIGHT JOIN/RIGHT OUTER JOIN: Gibt alle Zeilen aus der rechten Tabelle zurück, auch wenn in der linken Tabelle keine Übereinstimmungen vorhanden sind.

FULL JOIN/FULL OUTER JOIN/OUTER JOIN: gibt Zeilen zurück, wenn eine Übereinstimmung in einer der Tabellen vorhanden ist.

SELF JOIN: wird verwendet, um eine Tabelle mit sich selbst zu verknüpfen, als ob die Tabelle aus zwei Tabellen besteht, die mindestens eine Tabelle in der SQL-Anweisung vorübergehend umbenennen.

CARTESIAN JOIN: Gibt das kartesische Produkt der Datensätze aus den zwei oder mehr verknüpften Tabellen zurück.

Die self join ist eigentlich kein special join. Es spiegelt nur die Tatsache wider, dass Sie sich einer Tabelle mit sich selbst anschließen können. Wenn Sie dies tun, müssen Sie einen Alias ​​erstellen, um der Tatsache Rechnung zu tragen, dass sie mehrmals in derselben Anweisung erscheint.

Die cartesian join kann als inner join ohne einschränkende Bedingung betrachtet werden. Oder Sie können einen inner join als cartesian join mit einer zusätzlichen Einschränkung anzeigen (die Join-Bedingung).

3

Wenn Sie JOIN bei der manuellen Seite betrachten, werden Sie die folgenden Zeilen sehen:

join_table: 

    table_reference [INNER | CROSS] JOIN table_factor [join_condition] 

    | table_reference STRAIGHT_JOIN table_factor 

    | table_reference STRAIGHT_JOIN table_factor ON conditional_expr 

| tabellen_verweis {LEFT | RIGHT} [OUTER] JOIN tabellen_verweis join_bedingung

| table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor 

Die fette Linie zeigt deutlich, dass das Schlüsselwort OUTER ist optional.

+0

@Luv - Jetzt macht die letzte Zeile keinen Sinn mit Ihrer Formatierung! –

1

Ich arbeite in SQL Server und nach meiner Nutzung und Erfahrung gibt es absolut keinen Unterschied zwischen LEFT JOIN und LEFT OUTER JOIN. Dasselbe gilt für RIGHT JOIN und RIGHT OUTER JOIN. Wenn Sie in SQL Server das Schlüsselwort LEFT JOIN verwenden, bedeutet dies nur LEFT OUTER JOIN. Also meiner Meinung nach ist es die generische Regel, die für alle Datenbank-Engines gleich ist.

see here und here