PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : WHERE Verknüpfung



Getzi
15.04.2005, 14:50
Hallo Leute,
hat vll jemand von euch schonmal ne Präzi zum Thema Tabellenverknüpfung mit der WHERE Bedingung gemacht. Also die das Prinzip und die vorgehensweise erklärt. Mein Lehrer hat mir nämlich so etwas unter dem Thema "Schüler schulen Schüler" aufgedrückt. Ich soll den neuen das auf eine vll spielerische, aber verständliche Art und Weise beibringen und ich weiß nicht wie ?( .... Also wenn Ihr mir irgendwie helfen könnt, wäre ich euch sehr dankbar ;)
MfG
Getzi

lordlamer
15.04.2005, 15:02
naja im prinzip verknüpfst du ja die tabellen so mit select:

select felder FROM tabelle1 as t1, tabelle2 as t2 WHERE t1.id = t2.fid;

t1.id ist der primärschlüssel und t2.fid is der fremdschlüssel


nun kannst du das so erklären das du zb 2 exceltabellen nebeneinander hälst und schaust wo die felder der beiden tabellen gleich sind. und wenn die felder gleich sind wird halt der datensatz ausgegeben ;) *G*

man kann es ja auch mit mutter und kinder erklären. eine mutter kann n kinder haben. aber ein kind halt nur eine mutter. dann gibts ne tabelle mutter und ne tabelle kinder. ;) *G*

oder mit musiktiteln von künstlern. der fantasie sind keine grenzen gesetzt.

mfg frank

hehejo
15.04.2005, 23:10
UUU das ist aber nicht so toll:
WHERE macht nur eine Datensatzauswahl.

Nimm lieber einen JOIN


SELCET felder FROM Tabelle1
INNER JOIN Tabelle2 on Tabelle2.Personal_Nr = Tabelle1.Personal_ID
WHERE Nachname LIKE 'M???er';

Hier sieht du es noch mal schön: Die Tabellen werden mit JOIN verknüpft und mit WHERE machst du dann eine Datensatzauswahl.

Damit du den Unterschied erkennst:
Feuer mal diese beiden Statements ab und schau die die Results an:


select felder FROM tabelle1 tabell,e2;
SELCET felder FROM Tabelle1
INNER JOIN Tabelle2 on Tabelle2.Personal_Nr = Tabelle1.Personal_ID

Beim ersten Statement bildet die Datenbank das Kreuzprodukt. D.h. jede Zeile aus Tabelle1 wird mit jedem Feld aus Tabelle2 verbunden und angezeigt. Aus diesem riesen Resultset nimmst du dir dann mit WHERE die richtigen raus.
Mit dem zweiten Statement sagt du aber gleich der Datenbank, dass du nur die Zeilenkombinationen als Resultset haben möchtest in welchen die Bedingung nach "on" zutrifft. ->> viel besser.

Gute Datenbanksysteme sollten eigentlich aus dem WHERE einen JOIN formen können.

Nimm lieber JOINS! Auch wenn die die Verknüpfung per Datensatzauswahl (WHERE) einfacher erscheint: Joins sind übersichtlicher und du kannst die Verknüpfung bestimmen!

//edit
Hab vorhin nur den SELECT überflogen und da hat's mich gerissen!
Nimm meinen SELECT und die Erklärung vom Vordermann. Das ist dann richtig erklärt!

TenBaseT
16.04.2005, 13:35
Hää? Wieso ist FROM Tabelle, Tabelle2 WHERE Tabelle2.Personal_Nr = Tabelle1.Personal_ID kein inner join? Ich sehe da keinen Unterschied (ausser in der Schreibwiese)

Hans

MadJoe
16.04.2005, 15:18
Hää? Wieso ist FROM Tabelle, Tabelle2 WHERE Tabelle2.Personal_Nr = Tabelle1.Personal_ID kein inner join? Ich sehe da keinen Unterschied (ausser in der Schreibwiese)

Hans

der unterschied ist, dass ohne INNER JOIN zuerst ein gesamtes kreuzprodukt mit allen möglichen kombinationen gebildet wird und erst dann die überflüssigen zeilen mit der where bedingung entfernt werden. theoretisch kann das mehr rechenzeit und mehr ramspeicher am dbms server fordern. nur sollten, wie glaub ich im laufe dieses threads schon erwähnt, gute server diese queries intern automatisch in "bessere queries" umformen, bevor sie ausgeführt werden, wodurch das meistens nicht auffällt. aber abgesehen davon, ist die schreibweise wirklich um einiges übersichtlicher mit der JOIN syntax.

Getzi
18.04.2005, 11:00
@lordlamer
Kannst du mir das Beispiel mit der Mutter und den Kindern mal näher erklären, da ich diesen Vorschlag sehr interessant finde und ihn auch vll verwenden werde ;)
Kannst dazu sonst auch noch ein Beispiel machen ... ^^
Danke im voraus
MfG
Getzi

TenBaseT
19.04.2005, 22:21
@MadJoe

Jo, hast recht. Das kommt davon, wenn man alles in Self Study macht :rtfm: Komme gerade heute von ner Schulung und die haben mir genau das gleiche erzählt :think:

Hans

MadJoe
19.04.2005, 22:45
@TenBaseT

wieso das? datenbankmäßig hab ich auch alles in "self study" gemacht, eigentlich fast alles was ich weiss, kompetente lehrer findet man ja eh selten. hatte aber auch das glück oracle original unterlagen zu verfügung zu haben, wie ich mit sql angefangen habe, naja oracle kennt aber JOINs in der form glaub ich gar nicht, bin aber nicht am neuesten stand, da sich die meisten firmen und schulen dann doch kein oracle leisten können :))

joe