2016-04-17 16 views
0

Ich versuche, von relationalen Algebra zu SQL Query zu übersetzen:Was macht diese Relationale Algebra-Anweisung? (Umwandlung in SQL-Abfrage)

ρ(R1, ΠroomId((ΠguestIdσage<35Guest) Natural Join Reservation)) 
ρ(R2, ΠroomIdσprice≤100∨numberOfBeds>2Room) 
R1 ∧ R2 

Ich verstehe, dass es um die Ausgabe zu R1 und R2 für den zweiten Teil wird die Umbenennung und dann führt er R1 uND R2

Allerdings ist meine Verwirrung auf die Abfrage von der relationalen Algebra Umwandlung

Kann jemand helfen oder einen kleinen Einblick zu geben, wie dies würde geschehen?

Antwort

0

Die erste Aussage ist selecting aus der Beziehung Guest alle Datensätze, in denen age niedriger als 35, projecting nur die guestId Spalte.

Diese resultierende Beziehung ist dann naturally joined mit einem anderen Tisch Reservation, projecting das Ergebnis auf den roomId und rief das Ergebnis R1.

Die zweite Aussage ist selecting aus der Beziehung Zimmer alle Zeilen, die price kleiner oder gleich 100 oder mehr als 2 Betten, projecting die Ergebnisse mit dem roomId, dieses zweite Ergebnis Aufruf R2.

Wenn ich das richtig gelesen, es ist die Übersetzung in SQL etwas sein sollte wie:

SELECT roomId AS R1 
FROM (
    SELECT guestId 
    FROM Guest 
    WHERE age < 35 
) AS YoungGuests NATURAL JOIN Reservation 
WHERE roomId IN (
    SELECT roomId AS R2 
    FROM Room 
    WHERE price <= 100 OR numberOfBeds > 2 
); 

Die Idee, alle Zimmer für die Gäste jünger als 35 reserviert auszuwählen ist, die mindestens zwei Betten oder einem niedrigeren Preis haben als 100. Here ein Arbeitsbeispiel (mit einigen Dummy-Daten).

+0

Könnten Sie erklären, woher die Union kam? Ist das "^" nicht ein UND? – RandomMath

+0

@RandomMath Ja, ich habe es falsch gelesen. Fixed :) – Cynical

+0

Ich habe diese Abfrage versucht - aber das war nicht die richtige Übersetzung, da es Fehler produziert – RandomMath