# SQL Join



## ultralight_kn (24. April 2007)

hallo zusammen

könnt ihr einem sql neuling (vielleicht anhand eines beispiels - northwind) den befehl "join" erklären?

danke


----------



## m3000 (25. April 2007)

SQL in 21 Tagen hat gesagt.:
			
		

> Zu den leistungsfähigsten Merkmalen von SQL gehört die Fähigkeit, Daten über mehrere Tabellen hinweg abzurufen und zu manipulieren. Wenn man auf diese Mechanismen nicht zurückgreifen könnte, müßte man alle für eine Anwendung erforderlichen Datenelemente in einer einzelnen Tabelle speichern. Bei mehreren Anwendungen müßte man ohne gemeinsame Tabellen die gleichen Daten in mehreren Tabellen ablegen. Stellen Sie sich den riesigen Aufwand vor, wenn man Datenbanken und Tabellen neu entwerfen, aufbauen und füllen müßte, nur weil der Benutzer eine Abfrage mit einem neuen Datenelement benötigt. Durch die JOIN-Anweisung von SQL lassen sich kleinere und speziellere Tabellen erstellen, die außerdem leichter zu warten sind als große Tabellen.



Details und Beispiele in unzähligen online-Quellen, etwa http://www.computerjockey.de/mcdba/SQL_in_21_Tagen/kap06.htm


----------



## melmager (25. April 2007)

Die Erlärung ist aber nichtssagend :-(

JOIN ist ein SQL Befehl um zwei Tabellen mit einander zu verbinden.

Jetzt gibt es verschiedene JOINS
select * from a join b
ist ein cross join
jede Tabellenzeile der a Tabelle wird mit der b tabelle verknüpft 
Tabelle A 
a1
a2
Tabelle B
b1
b2

ergibt
a1 b1
a1 b2
a2 b1
a2 b2

oder drastischer wenn Tabelle a 100 Einträge hat und b ebenso ergibt das
10000 Datensätze

also sollte man alles tun um crossjoin zu vermeiden
Wann immer es geht sollte man auf Schlüsselfelder zurückgreifen
Die Schlüsselfelder können beim left oder right join benutzt werden um dem Join anzugeben wann eine Verküpfung gemacht werden soll

Tabelle a feld data,index
a1,1
a2,1
a3,2

Tabelle b feld data,fremdindex
b1,1
b2,2
b3,3

select * from a left join b on a.index = b.fremdindex
verknüpft nur die Datenzeilen bei überienstimmung des index mit fremdindex
Ergebnis:
a1,1,b1,1
a2,1,b1,1
a3,2,b2,2

also deutlich weniger

das nur mal ganz ganz kurz zu join


----------



## DarthShader (3. Mai 2007)

melmager hat gesagt.:


> Jetzt gibt es verschiedene JOINS



Ich verstehe gerade den Unterschied zwischen right join und left join nicht. Und dann gibt es ja noch inner join und outer join, sind das alles Arten und Weisen, wie die Joins bzw. Tabellen zusammengeführt werden?


----------



## lmarkus31 (3. Mai 2007)

Hallo,

erstmal *LEFT JOIN * ist nur ein Synonym für *LEFT OUTER JOIN* , das gleiche gilt für *RIGHT JOIN* bzw. *RIGHT OUTER JOIN* 

<Tabelle A> *LEFT JOIN * <Tabelle B>  ON ....
Dieser Join liefert alle Ergebnisse aus Tabelle A, auch wenn keine entsprechenden Daten in Tabelle B enthalten sind

<Tabelle A> *RIGHT JOIN * <Tabelle B>  ON ....
Dieser Join liefert alle Ergebnisse aus Tabelle B, auch wenn keine entsprechenden Daten in Tabelle A enthalten sind

<Tabelle A> *FULL JOIN *<Tabelle B>  ON ....
Dieser Join liefert alle Ergebnisse aus Tabelle A, auch wenn keine entsprechenden Daten in Tabelle B enthalten sind UND alle Ergebnisse aus Tabelle B, auch wenn es keine entsprechenden Daten in Tabelle A gibt.

*INNER JOIN* dagegen liefern nur dann Daten, wenn in beiden Tabellen Daten zu einer Bedingung vorhanden sind.

Markus


----------



## Busi (3. Mai 2007)

Hallo,

unter Wiki findet man unter http://de.wikipedia.org/wiki/SQL#Abfrage:_SELECT wuderbare Beispiele für verschiedenste Join Arten. Vielleicht Hilft dir das ein wenig.

rigth join und left join bewirken, wenn ich mich recht entsinne, das alle einträger der rechten Tabelle angezeigt werden, auch wenn sie mit der linken nicht verknüpft werden können. Und umgekehret. 

SELECT * FROM table_a RIGHT JOIN table_b
ON table_a.keyfield = table_b.foreign_keyfield

<zusatz>oder du nimmst das was mein Vorgänger geschrieben hat wärend ich tippte</zusatz>


----------

