Relational-Division
寫SQL查詢相當於關係代數的關係除法?
這些是 3 個表的列表
EMPLOYEE (Ssn#, Fname, Lname, Bdate, Address, Sex, Salary, Super_ssn) WORKS_ON (Essn#, Pno, Hours) PROJECT (Pnumber#, Pname, Plocation)
問題一:編寫SQL查詢(相當於關係代數的關係除法),檢索所有員工貢獻的項目名稱
問題2:編寫SQL查詢(相當於關係代數的關係除法)來檢索每個項目工作的所有員工的名字和姓氏
然後有6個表的列表
ITEM (Item#, Item_Name, Unit_Price) ORDER (Order#, Ord_Date, Cust#, Ord_Amt) ORDER_ITEM (Order#, Item#, Qty) WAREHOUSE (Warehouse#, Warehouse_City) SHIPMENT (Order#, Warehouse#, Ship_Date) WAREHOUSE_ITEM (Item#, Warehouse#, Qty)
問題3:編寫SQL查詢(相當於關係代數的關係除法)列出儲存在悉尼所有倉庫中的Item_Name和Quantity
這3道題都是作業題。但是,我已經嘗試並回答了它們,如下所示:
問題 1 的答案:
SELECT Pname FROM PROJECT WHERE EXISTS (SELECT Pname FROM PROJECT, EMPLOYEE WHERE PROJECT.Pnumber = WORKS_ON.Pno);
問題 2 的答案:
SELECT Fname, Lname FROM EMPLOYEE WHERE EXISTS (SELECT Fname, Lname FROM EMPLOYEE, WORKS_ON, PROJECT WHERE EMPLOYEE.Ssn = WORKS_ON.Essn AND WORKS_ON.Pno = PROJECT.Pnumber);
問題 3 的答案:
SELECT Item_Name, Qty FROM ITEM, ORDER_ITEM WHERE ITEM.Item# = ORDER_ITEM.Item# AND EXISTS(SELECT * FROM WAREHOUSE WHERE Warehouse_City = 'Sydney');
我只是想確認我對這 3 個問題的 SQL 查詢邏輯是否正確。
如果它是正確的,那麼我將能夠繼續並將它們轉換為具有關係除法的關係代數,如果我的 SQL 查詢邏輯正確,我可以自己完成。
如果不正確,請在適用的情況下更正我的 SQL 查詢邏輯中的錯誤,這對我非常有幫助。
第三個似乎是正確的。第一個和第二個讓我覺得錯了。您正在尋找任何員工做出貢獻的項目,而不是所有員工做出貢獻的項目。從本質上講,您是根據 ANY 而不是 ALL 標准進行劃分。
在這些情況下,您需要更改查詢以使用
NOT EXISTS
並查找不匹配項。
這是一篇簡短而簡潔的文章,描述了 SQL 中關係劃分的各種技術,其中有一個類似於您使用學生和課程而不是員工和項目的範例:http: //www.inf.usi.ch/faculty/soule/teaching /2016-fall/db/division.pdf