Übung 6 Aufgabe 6.2 f)

Elementer
Mausschubser
Mausschubser
Beiträge: 49
Registriert: 14. Mär 2009 14:56

Übung 6 Aufgabe 6.2 f)

Beitrag von Elementer »

Hi,

wär als SQL Anfrage auch möglich:

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


?

gruß

henß
Mausschubser
Mausschubser
Beiträge: 45
Registriert: 18. Nov 2009 14:50

Re: Übung 6 Aufgabe 6.2 f)

Beitrag 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 :)

FGB
Mausschubser
Mausschubser
Beiträge: 45
Registriert: 21. Jan 2006 14:41
Wohnort: Darmstadt
Kontaktdaten:

Re: Übung 6 Aufgabe 6.2 f)

Beitrag 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

ice-breaker
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 216
Registriert: 14. Okt 2008 17:56

Re: Übung 6 Aufgabe 6.2 f)

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

FGB
Mausschubser
Mausschubser
Beiträge: 45
Registriert: 21. Jan 2006 14:41
Wohnort: Darmstadt
Kontaktdaten:

Re: Übung 6 Aufgabe 6.2 f)

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

henß
Mausschubser
Mausschubser
Beiträge: 45
Registriert: 18. Nov 2009 14:50

Re: Übung 6 Aufgabe 6.2 f)

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

FGB
Mausschubser
Mausschubser
Beiträge: 45
Registriert: 21. Jan 2006 14:41
Wohnort: Darmstadt
Kontaktdaten:

Re: Übung 6 Aufgabe 6.2 f)

Beitrag von FGB »

OK, habs verstanden. Also ist nicht das Ergebnis sondern das "wie" gefragt.

Dank dir und gute Nacht

Antworten

Zurück zu „Archiv“