Seite 1 von 1

Übung 6 Aufgabe 6.2 f)

Verfasst: 9. Sep 2010 16:03
von Elementer
Hi,

wär als SQL Anfrage auch möglich:

SELECT DISTINCT Leser FROM Exemplar
WHERE Bibliothek ='Informatik‘ AND NOT Bibliothek='Mathematik';


?

gruß

Re: Übung 6 Aufgabe 6.2 f)

Verfasst: 10. Sep 2010 00:46
von henß
Schönen Abend,

Um es mit der Relationenalgebra zu verdeutlichen: Du selektierst hier erstmal
alle Exemplare mit Bibliothek = 'Informatik' AND NOT Bibliothek='Mathematik',
also schlichtweg alle Exemplare der Informatik-Bibliothek. Erst danach wählst
Du die Leser-Attribute aus dieser "neuen", "fertigen" Liste aus.

AND NOT bezieht sich somit nicht auf die Leser sondern auf die Exemplare
und Du bekommt blos alle Informatik-interessierten Leser :)

Re: Übung 6 Aufgabe 6.2 f)

Verfasst: 10. Sep 2010 23:42
von FGB
Ich hätte es so versucht:

SELECT Leser FROM Exemplar WHERE Bibliothek = "Informatik" AND Leser IS NOT NULL;

Achso das es nicht in der Mathematik-Bib sein soll versteht sich ja von alleine da ich ja nur ein Select auf Bibliothek="Informatik" setze.

geht das nicht? Er sollte doch so erstmal alle Leser-IDs Selectieren, die dem 1. Where Kriterium matchen,
dann entfernt er alle Leser-Attribute, die einen Wert haben. Denkfehler von mir?

Dank und Grüße

Re: Übung 6 Aufgabe 6.2 f)

Verfasst: 10. Sep 2010 23:57
von ice-breaker
Elementer hat geschrieben:SELECT DISTINCT Leser FROM Exemplar
WHERE Bibliothek ='Informatik‘ AND NOT Bibliothek='Mathematik';
Deine Abfrage bedeutet:
Liste mir alle Leser die ein Buch aus der Informatik-Bibiliothek ausgeliehen haben, welche nicht die Mathematik-Bibiliothek ist ;)


Deine Abfrage läuft so Datensatz für Datensatz und prüft jeden. Und da ist es klar, dass du Datensätze findest, die aus der Informatik-Bibiliothek stammen und somit können sie nicht mehr aus der Mathe-Bibi kommen ;)

Gefragt ist aber eben liste Leser, die Bücher aus der Informatik Bibiliothek ausgeliegen haben und keine aus der Mathematik-Bibiliothek, und das ist eben ohne Join oder Subquery nicht realisierbar. Mach dir dazu nochmal genau klar, wie ein SQL-Query abgearbeitet wird.

Mit der relationen Algebra würde deine Anfrage lauten:
Selektion: Attribut Bibliothek ='Informatik‘ und Attribut Bibliothek <> 'Mathematik' => wird optimiert zu: Attribut Bibliothek ='Informatik‘ (da 2. Bedingung bei Wahrheit der 1. automatisch wahr ist)
Projektion: Distinct Leser

Du möchtest also eigentlich 2 Mengen vergleichen ;)
1. Menge: alle Leser von Informatik-Bibi-Büchern
2. Menge: alle Nicht-Leser von Mathe-Bibi-Büchern
also den Schnitt beider Mengen.

Re: Übung 6 Aufgabe 6.2 f)

Verfasst: 11. Sep 2010 00:01
von FGB
stimmt meins wenigstens? :D

Also ich benutze SQL (ok ok My-SQL) schon sehr lange und würde intuitiv das so schreiben. Würde fast schon wetten, dass durch mein Query das richtige Ergebnis rauskommt.

Re: Übung 6 Aufgabe 6.2 f)

Verfasst: 11. Sep 2010 00:13
von henß
Schönen Abend,

FGB, es geht primär um die Leser, nicht um die Bücher. Wie ice-breaker schon sagte
sucht man also die Schnittmenge {Leser mit Informatik-Buch} ^ {Leser ohne Mathe-Buch}.

Re: Übung 6 Aufgabe 6.2 f)

Verfasst: 11. Sep 2010 00:20
von FGB
OK, habs verstanden. Also ist nicht das Ergebnis sondern das "wie" gefragt.

Dank dir und gute Nacht