Probleme bei SQL-Abfragen

Dr Franke Ghostwriter
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
 
ich 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
 
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?
Wenn 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.

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.
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.

Kennt jemand einen Link, wo diese Abfragen verständlich/gut erklärt werden?
Kann auch nur auf Google verweisen.
 
Leser (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?
 
Misscrie,

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:
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;
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.
 
Oben