2016-10-10 4 views
-1

ich diese SQL-Anweisung geschrieben und möchte seine relationale Algebra, um herauszufinden:Konvertieren von SQL in relationale Algebra Beispiel

SELECT S.Oid 
FROM Shipment S 
WHERE EXISTS (SELECT W.Wid 
FROM Warehouse W 
WHERE W.City = ‘Pittsburgh’ AND S.Wid = W.Wid) 

Ist dies der richtige relationale Algebra für die Aussage?

(π S.Oid (Sendungs ​​S)) U (π W.City = 'Pittsburgh', S.Wid = W.Wid (Lager W))

+0

BITTE: * Welche * Version der relationalen Algebra? – philipxy

Antwort

2

Ihr Algebra Ausdruck nicht richtig.

Um die richtige Antwort finden Sie, dass die SQL-Abfrage in einen Join entspricht beachten können:

SELECT DISTINCT S.Oid 
FROM Shipment S, Warehouse W 
WHERE S.Wid = W.Wid AND W.City = ‘Pittsburgh’ 

so in der relationalen Algebra dies entspricht:

π S.Oid (Sendungs s ⨝ S.Wid = W.Wid σ W.City = (Lager W) 'Pittsburgh')

+0

Vielen Dank. Okay für etwas ähnliches wie das, wäre es so? SELECT I.Iid, I.Unit_Price FROM Artikel I, Bestellungen O WHERE O.Oid = ‚13452'' Da dies: π I.Iid, I.Unit_Price (Artikel I ⨝ σ O.Oid = '13452' (Orders O)) – SummerDays

+0

In der SQL-Abfrage fehlt die Join-Bedingung, daher ist die Query ein produktübergreifendes Produkt anstelle eines Joins. Ihr relationaler Ausdruck ist korrekt, ein Teil, den Sie mit dem Produkt × anstatt mit Join ⨝ verwenden sollten. – Renzo

+0

Renzo bedeutet, dass Ihr Kommentar SQL sollte etwas wie "... UND I.Iid = O.Iid" sein. @Renzo Es macht keinen Sinn, Join vs Produkt hier oder sogar den korrekten Algebra-Ausdruck zu diskutieren, weil es nicht klar ist, wie Spaltennamen von den OP-Operatoren gehandhabt werden: Es gibt keine gebräuchliche Algebra, deren Syntax so SQLy ist wie die OPs oder " Algebra "-Ausdrücke, und das OP hat nicht eine referenziert. – philipxy

Verwandte Themen