ich komme noch nicht so ganz mit den SQL-Abfragen klar und hoffe, dass mir hier jemand ein bissel auf die Sprünge helfen kann:\
Wenn ich Daten aus mehreren Relationen brauche, muss ich dann zwischen allen Relationen eine „Verbindung“ herstellen? Manchmal gibt es ja Abfragen, bei denen man aus drei oder mehr Relationen Daten abfrägt bzw. zur Abfrage benötigt. Muss ich dann immer eine Verbindung über ein gleiches Attribut zwischen allen Relationen herstellen? Ich hoffe man versteht, was ich meine; wie gesagt, ich habe noch nicht so den Durchblick.\
Muss ich immer den Namen der Relation vor das Attribut schreiben (in der Form Relation.Attribut), auch wenn ich mich nur in einer Relation befinde? Dann nicht oder? Aber ab zwei Relationen dann schon? Ich hab da bisher noch keine Systematik erkennen können.
Kennt jemand einen Link, wo diese Abfragen verständlich/gut erklärt werden?
Ich bedanke mich schonmal für Antworten.\
Viele Grüße
Comments
Lucifer
Contributions on this page: 3
View profileich versuche mal ein bisschen deine Fragen zu beantworten.
Wenn du zwei Relationen hast, musst in einer Form angeben, wie diese zusammen gehören. In der Regel hast du in einer der beiden Relationen einen Fremdschlüssel, welcher auf die andere Verweist.
z.B.: zwei Relationen. Auto(Id, Farbe, Marke, Modell, Km, PS) und Fahrer(Id, Name, Alter, Auto)
Willst du jetzt alle Fahrer mit dem passenden Auto haben, musst du der DBMS sagen wie die beiden zusammen gehören. In diesem Fall
Select Fahrer.*, Auto.* FROM Auto, Fahrer WHERE Auto.Id = Fahrer.Id
Hast du mehr als eine Relation in deiner Abfrage, musst du sicher gehen, dass die Bezeichnungen für die Attribute eindeutig sind. In meinem Beispiel oben, müsste ich beide Relationen voll angeben, weil z.b. die Bezeichnung ID nicht eindeutig wäre. Hättest du zwei Relationen, bei denen kein Attribut gleich heißt, könntest du auch die Relationen weglassen.
z.b.: Auto(Kz, Marke, Type) Fahrer(Name, Alter, fahrzeug)
SELECT kz, marke, type, name, alter FROM auto, fahrer WHERE kz=fahrzeug
Ich hoffe das hilft dir ein bisschen weiter
LG Lucifer
Nils Wrase
Contributions on this page: 1
View profileIn Moodle gibt es richtig viele Übungsaufgaben mit Lösungen vom Lehrstuhl zu diesem Thema. Damit kannst du dich optimal vorbereiten für die Klausur. Je mehr man das übt, desto mehr erschließt sich einem dann auch die Logik.
adrian1981
Contributions on this page: 1
View profileWenn diese Daten zusammenhängen also z.B. Lieferungen und dazugehörige Artikel muss eine "Verbindung" hergestellt werden. Hängen diese nicht zusammen, z.B. du berechnest irgendwelche Summen (Anzahl der Artikel, Anzahl der Bestellungen) über nicht abhängige Daten und gibst sie aus, dann wird keine Verbindung erforderlich.
Das musst du nur machen, wenn der Attributname nicht eindeutig ist. Wenn also in einer Tabelle und einer anderen eine Spalte mit Namen "Anzahl" existiert. Dann weiß ja SQL nicht welches Attribut gemeint ist.
Kann auch nur auf Google verweisen.
misscrie
Contributions on this page: 4
View profilehätte da auch mal ne Frage.. Ich versteh nicht, warum manchmal im FROM-Teil mehrere Relationen angegeben sind, und manchmal nur dieselbe wie im SELECT-Teil. Damit komm ich nicht klar. Wann steht da nur eine drin, und wann mehrere??
misscrie
Contributions on this page: 4
View profileLeser (Lesernummer, Name, Vorname, Wohnort, Geburtsdatum)
Buch (ISBN, Titel, Seitenzahl, Verlag, Erscheinungsjahr, Anzahl_Exemplare)
Exemplar (ISBN, Exemplarnummer, Inventarnummer, Standort)
Ausleihe (Lesernummer, ISBN, Exemplarnummer, Datum)
SELECT Buch.Titel
FROM Buch
WHERE Buch.ISBN = Ausleihe.ISBN
AND Ausleihe.Lesernummer = Leser.Lesernummer
AND Leser.Name = 'Meyer'
AND Leser.Vorname = 'Otto';
Gefragt war nach der Liste aller Bücher, die Herr Otoo Meyer ausgeliehen hat. Und die ML lautet:
SELECT Buch.Titel
FROM Buch, Ausleihe, Leser
WHERE Leser.Vorname = 'Otto'
AND Leser.Name = 'Meyer'
AND Ausleihe.Lesernummer = Leser.Lesernummer
AND Buch.ISBN = Ausleihe.ISBN;
meiner Meinung nach komm ich doch auch so über die Schlüsselattribute zurecht, ohne Ausleihe und Leser bei From anzugeben, oder nicht?
Lucifer
Contributions on this page: 3
View profileMisscrie,
es ist gar nicht so schwer. Im Select-Teil stehen alle Relationen von denen du was abfragen möchtest, also wirklich Daten bekommen willst. Möchtest du aber deine Kriterien auf mehr Relationen setzten als nur auf jene im SELECT-Teil müssen auch weitere im FROM angegeben werden.
Zu deinem Beispiel:
Das ist meiner Meinung nach das richtige. Nur die Relationen in der WHERE-Liste stehen zu haben reicht nicht aus. Es ist möglich Relationen in der FROM-Liste auch mit Alias zu versehen und andere Namen zu geben. Für die DBMS muss angegeben werden, auf welche Relationen alles zugegriffen wird.
misscrie
Contributions on this page: 4
View profiledanke erstmal lucifer.
jedoch dass ich das richtig verstanden habe: Es muss IMMER JEDE Relation im From-Teil angeben sein, die ich auch verwende.?
Lucifer
Contributions on this page: 3
View profileRichtig, es muss jede Relation angeben werden auf die zugegriffen werden soll.
[url=https://de.wikipedia.org/wiki/SQL#Abfrage_mit_verkn.C3.BCpften_Tabellen]SQL – Wikipedia[/url]
misscrie
Contributions on this page: 4
View profileDanke dir, damit ist mir echt schon sehr geholfen =)