Relational-Theory
關係代數題
這是給出的關係模式:
employee (person-name , street, city) works (person-name, company-name, salary) company (company-name, city) manages (person-name, manager-name)
問:找出與他們的經理住在同一城市和同一條街道上的所有員工的姓名。
我在某處找到了解決方案:
但是解決方案似乎是錯誤的,即在第二個自然連接符號之後沒有選擇語句符號,並且就在該符號之後,出現了一個謂詞 0_o ,其中,該
manager-name
屬性來自哪裡?我完全迷路了。自從我使用 Cartesian-product 以來,我的解決方案似乎很長,而且查詢有點長(我什至不確定它是對還是錯):(
免責聲明:從未學過關係代數,但看起來很有趣
根據給定的架構和您的問題,這就是 SQL 應該是什麼:
SELECT emp_mgr.person_name FROM manages emp_mgr INNER JOIN employee emp ON emp_mgr.person_name = emp.person_name INNER JOIN employee mgr ON emp_mgr.manager_name = mgr.person_name WHERE emp.street = mgr.street AND emp.city = mgr.city ;
這是另一個只使用 JOIN,沒有 WHERE 子句的查詢:
SELECT emp.person_name FROM (SELECT A.person_name,B.street,B.city FROM manages A INNER JOIN employee B ON A.person_name = B.person_name) emp NATURAL JOIN (SELECT A.manager_name,B.street,B.city FROM manages A INNER JOIN employee B ON A.manager_name = B.person_name) mgr ;
第一個查詢以笛卡爾積的形式獲取所有被管理的員工及其經理。然後,它尋找一條共同的街道和城市。
第二個查詢收集員工及其經理的人事記錄(姓名、街道、城市),並使用(街道、城市)在員工和經理之間執行 NATURAL JOIN。
如果您可以將這兩個查詢轉換回關係代數,我認為您將擁有您正在尋找的東西。我相信第二個可能會有更好的幫助。