2010-12-14 6 views
5

Mögliche Duplizieren:
(self,left outer,right outer,full outer) join - real world examplesWas ist der Unterschied zwischen LEFT, RIGHT, INNER und OUTER JOINs?

Hallo, liebe SO-Community!

Ich habe mit SQL-Datenbanken seit einiger Zeit gearbeitet, aber ein Aspekt ist immer noch sehr verwirrend für mich - Tabellen Joins. Ich verstehe sehr klar, was passiert, wenn ich eine Multitable-Abfrage schreibe, aber wenn ein JOIN ins Spiel kommt, habe ich das Gefühl, dass ich einfach nichts verstehe.

Bitte helfen Sie mir zu verstehen, was Tabelle beitreten ist, und was ist der Unterschied zwischen LINKS, RECHTS, INNER und OUTER JOINs? Was ist ein Self-Join?

Ich wäre Ihnen dankbar, wenn Sie ein Beispiel für die Verwendung in dieser einfachen Tabellenstruktur zur Verfügung stellen könnte:

Tabelle Autoren

id |name 
--------------- 
1 |John 
2 |Bob 
3 |Richard 

Tabelle Bücher

id |author_id |title  |rating 
----------------------------------------- 
1 |1   |book A  |5 
2 |1   |book B  |4.8 
3 |3   |book C  |3 

Thank Sie!

+0

Ich googelte diese genaue Frage und kam mit mehreren Treffern auf der Titelseite, die die Unterschiede veranschaulichen. Könnte schneller sein als hier zu fragen. Um ehrlich zu sein, muss ich normalerweise mein Gedächtnis auffrischen, wenn ich mich selbst besuche! – DarinH

+1

"Ich verstehe sehr klar, was passiert, wenn ich eine Multitable-Abfrage schreibe, aber wenn ein JOIN ins Spiel kommt, habe ich das Gefühl, dass ich einfach nichts verstehe." Huh? Ein Join ist immer im Spiel, wenn Multitable-Abfragen geschrieben werden. Sie verwenden nicht die implizite Joinsyntax (die mit den Kommas zwischen den Tabellen)? Wenn dies der Fall ist, schreiben Sie niemals einen anderen Code, der diese nicht standardisierte und sehr schlechte Syntax verwendet. Wenn Sie diese schlechte Syntax verwenden, ist es kein Wunder, dass Sie Joins nicht verstehen. – HLGEM

+0

HLGEM, warum ist es veraltet und arm? –

Antwort

3

VON EINEM {Join-Typ} B ON {Joinbedingung}

Inner: Wird nur die Ergebnisse zeigen, wo die Join-Bedingung erfüllt ist. Wenn für eine Zeile in A keine echte Bedingung vorliegt, wird sie aus den Ergebnissen entfernt.

Links: Wird nicht herausfiltern Reihen von A, die

Rechts beitreten auf B keine passende haben: Wird herauszufiltern Reihen von A, die nicht über eine passende beitreten auf B

Außen: links und rechte Joins werden als äußere Joins betrachtet, wobei inner ein innerer Join ist. Registriert

3

Inner:

SELECT 
    a.*, 
    b.* 
FROM 
    authors a 
    INNER JOIN books b ON 
     a.id = b.author_id 

in diese führen:

id |name  |id |author_id |title  |rating 
--------------------------------------------------------- 
1 |John  |1 |1   |book A  |5 
1 |John  |1 |1   |book B  |4.8 
3 |Richard |3 |3   |book C  |3 

Beachten Sie, dass Bob nicht gezeigt wurde - ein inner join immer Elemente entfernt, die in beiden Quellen nicht vorhanden sind (unter Berücksichtigung der Verknüpfungskriterien In unserem Fall a.id = b.author_id.

LEFT JOIN:

SELECT 
    a.*, 
    b.* 
FROM 
    authors a 
    LEFT JOIN books b ON 
     a.id = b.author_id 

in diese führen:

id |name  |id |author_id |title  |rating 
--------------------------------------------------------- 
1 |John  |1 |1   |book A  |5 
1 |John  |1 |1   |book B  |4.8 
2 |Bob  |null |null  |null  |null 
3 |Richard |3 |3   |book C  |3 

Nun sind alle Autoren gezeigt werden - ein LEFT JOIN (oder LEFT OUTER JOIN, es ist das gleiche) werden alle Aufzeichnungen "links" (Autoren) und ersetzt die "richtigen" Datensätze, die nicht mit null gefunden wurden.

Über "Right Joins" - es ist das gleiche wie "Links Joins", aber mit einer umgekehrten Beziehung. Die folgende Abfrage die gleichen Datensätze als die letzten (beachten Sie, dass die Tabellen in einer umgekehrten Reihenfolge sind, die Verwendung von rechts zu kompensieren beitreten) Ergebnis:

SELECT 
    a.*, 
    b.* 
FROM 
    books b 
    RIGHT JOIN authors a ON 
     a.id = b.author_id 

Hoffen, dass es jetzt klarer ist.

PS: es gibt auch FULL OUTER JOIN. Denken Sie an eine Linke und eine Rechte Verknüpfung kombiniert - wenn es Bücher ohne Autor gäbe, würden sie auch angezeigt werden, wenn Sie eine vollständige äußere Verknüpfung verwenden.

+0

Liebe es. Es malt nur das Bild so klar. –

Verwandte Themen