mysql: verschiedene joins
kleinerChemiker 13.01.2005 - 21:57 867 9
kleinerChemiker
Here to stay
|
gleich mal vorbweg, ich bin kein programierer, sondern beschöftige mich nur mit php/mysql als hobby. was ich mich schon länger frage, mysql hat verschiedene join's. was ist da der unterschied? da gibts lt. docu: tabellen_verweis, tabellen_verweis tabellen_verweis [CROSS] JOIN tabellen_verweis tabellen_verweis INNER JOIN tabellen_verweis join_bedingung tabellen_verweis STRAIGHT_JOIN tabellen_verweis tabellen_verweis LEFT [OUTER] JOIN tabellen_verweis join_bedingung tabellen_verweis LEFT [OUTER] JOIN tabellen_verweis tabellen_verweis NATURAL [LEFT [OUTER]] JOIN tabellen_verweis { oder tabellen_verweis LEFT OUTER JOIN tabellen_verweis ON bedingungs_ausdruck } tabellen_verweis RIGHT [OUTER] JOIN tabellen_verweis join_bedingung tabellen_verweis RIGHT [OUTER] JOIN tabellen_verweis tabellen_verweis NATURAL [RIGHT [OUTER]] JOIN tabellen_verweis aus den erklärungen werd ich nicht wirklich klug, verstehe also nciht was der untershcied da ist. tia MIK
|
watchout
Legendundead
|
in der Erklärung steht aber genau drinnen was was is...
edit: Soll heissen: ich könnts jetzt auf anhieb nicht genauer/besser erklären, vielleicht kannst du sagen, was genau du nicht verstehst?
Bearbeitet von watchout am 14.01.2005, 00:19
|
kleinerChemiker
Here to stay
|
erklrät sind eigentlich nur NATURAL [LEFT] JOIN, RIGHT JOIN und STRAIGHT_JOIN. was ist mit INNER JOIN, oder [CROSS] JOIN oder was hat es mit dem OUTER wie in LEFT [OUTER] JOIN auf sich? hier die erklärungen von mysql.com: # Der NATURAL [LEFT] JOIN zweier Tabellen ist definiert als semantisch identisch äquivalent zu einem INNER JOIN oder einem LEFT JOIN mit einer USING-Klausel, die alle Spalten nennt, die in beiden Tabellen existieren. und was ist ein INNER JOIN? das selbe wie ein normales JOIN bzw. wie ein WHERE tab1.id=tab2.id? # RIGHT JOIN funktioniert analog wie LEFT JOIN. Um Code zwischen Datenbanken portabel zu halten, wird empfohlen, LEFT JOIN anstelle von RIGHT JOIN zu benutzen. ok, das kapier sogar ich ^^ # STRAIGHT_JOIN ist identisch mit JOIN, ausser dass die linke Tabelle immer vor der rechten Tabelle gelesen wird. Das kann in den (wenigen) Fällen benutzt werden, wo der Optimierer die Tabellen in die falsche Reihenfolge bringt. was heißt linke tabelle & rechte tabelle? hat was damit zu tun, ich welcher reihenfolge ich die tabellen in "SELECT * FROM tab1, tab2, tab3" schreibe? vermutlich ist für jemanden, der SQL und auch MySQL richtig gelernt hat, ganz klar was da gemeint ist. Aber wenn man manche Grundbegriffe nicht kennt, dann ist manches was darauf aufbaut nicht so leicht zu verstehen. aber thx, wenn man versucht es mir zu erklären. MIK
|
watchout
Legendundead
|
ich hab (My)SQL auch nicht "gelernt" -> habs auch nur von diversen seiten gelernt... Also, es gibt im Prinzip nur zwei formen von joins: den INNER und den OUTER JOIN der unterschied der beiden liegt darin, dass beim inner join tatsächlich nur die zeilen vorhanden sind, bei denen die join-condition zutrifft wobei beim outer join die zeilen der linken (oder rechte, abhängig ob LEFT oder RIGHT outer join) tabelle komplett vorhanden sind, und dort wo die join-condition nicht zutrifft die felder der rechten (oder halt linken bei right) NULL sind LEFT JOIN ist immer ein OUTER join ich hoffe ich habe deine frage jetzt halbwegs verständlich beantwortet...
|
kleinerChemiker
Here to stay
|
ja, ich glaube jetzt hab ichs halbwegs verstanden. thx
MIK
|
gerhardtt
Big d00d
|
Hi, ich würd dir dieses Buch empfehlen: Datenbankbuchhaben wir auf der Uni verwendet und ich muss sagen das is echt was wert. dauert vieleicht eine Woche bist man sich ordentlich reingelesen hat, aber es is sicher 100mal besser als dein bisheriger Weg (nicht böse gemeint aber: learning by doing bringt in diesem bereich wirklich nicht) grüsse
|
watchout
Legendundead
|
(nicht böse gemeint aber: learning by doing bringt in diesem bereich wirklich nicht)
grüsse sorry, das halte ich für absolut falsch. learning by doing ist das einzige was auf die dauer was bringt, denn was man nicht anfassen kann vergisst man schnell wieder.  Und Performance-Tipps - die das einzige sind was man nicht sehr schnell durch probieren herausfindet (Obwohl im Endeffekt in der jeweiligen DB-Engine wahrscheinlich nur so) bekommt man sehr viel aktuellere (bessere?) immer im netz - und schwer zu finden is es auch nicht...
|
gerhardtt
Big d00d
|
sorry, das halte ich für absolut falsch. learning by doing ist das einzige was auf die dauer was bringt, denn was man nicht anfassen kann vergisst man schnell wieder.  da hast mich jetzt aber ganz falsch verstanden. is is gut wenn er sich gleich auf ein projekt stürzt aber ohne theortischen hintergrund sinnlos. warum das rad neu erfinden wenn sich zigtausend leute schon damit beschäftigt haben. die ganze energie besteht bei dem streben ohne lehrer in dem verstehen wie dbs funktionieren... dabei gibts ein paar dinge die nur gelesen werden müssten und *ZACK* die erleuchtung wäre da. das is wie wenn man ein auto zum ersten mal sieht und nichts drüber weiss. im ersten gang wird man vorankommen (nur beschränkt schnell) aber es braucht nur gesagt werden dass es verschiedene gänge gibt die für verschiedene geschwindigkeiten gedacht sind voila! bis man selbst drauf kommt dauerts ewig und ma hat von dieser langen lernphase nichts. lieber die lernenergie dann drauf auslegen bei welcher drehzahl es am besten ist zu schalten. got it? grüsse
|
@lbert
geistig divergent
|
Also ich versuch mal zu helfen: hth.... wenn nicht, dann kauf dir das Buch mfg
|
kleinerChemiker
Here to stay
|
jo, das ist hilfreich. thx  aber mal schaun, vielleicht find ich das buch ja in der uni-bibliothek.
|