2016-10-10 83 views
-1

我寫這條SQL語句,並想弄清楚它的關係代數:轉換SQL到關係代數例

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

這是該語句的正確關係代數?

(πS.Oid(運費S))U(πW.City = '匹茲堡',S.Wid = W.Wid (倉庫W))

+0

請:*哪個版本的關係代數? – philipxy

回答

2

你的代數表達式是不正確。

要找到正確的答案,你可以注意到,SQL查詢相當於一個連接:

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

所以在關係代數這相當於:

π S.Oid(裝運s⨝ S.Wid = W.Widσ W.City ='匹茲堡'(倉庫W))

+0

非常感謝。好的,類似這樣的事情,會是這樣嗎? 'SELECT I.Iid,I.Unit_Price FROM項目I,級O WHERE O.Oid =「13452'' 作爲該: πI.Iid,I.Unit_Price(項目我⨝σO.Oid ='13452'(Orders O)) – SummerDays

+0

在SQL查詢中缺少連接條件,所以查詢是交叉產品而不是連接。您的關係表達式是正確的,您應該使用產品×而不是連接part。 – Renzo

+0

Renzo意味着你的評論SQL應該像'... AND I.Iid = O.Iid'。 @Renzo在這裏討論連接和產品,甚至是正確的代數表達式是沒有意義的,因爲不清楚OP操作符如何處理列名:不存在常用的代數,它的語法與OP的SQLy或你的「代數「表達式,並且OP沒有引用一個。 – philipxy