Relational-Algebra
翻譯關係代數輸出
我有以下關係
Jobs(name, company, salary)
。P1(salary) = πsalary(σcompany='pwc'(Jobs)) P2(salary) = πsalary(ρT1(s)(P1) thetaJoin(s>salary) P1) P3(salary) = P1 − P2
我知道
P1
只是選擇所有工作的人的薪水pwc
。我很難弄清楚是什麼
P2
指示。我知道將屬性
ρT1(s)(P1)
重命名P1
為. 但是後來我對這部分感到困惑,因為我認為並且會是一樣的。T1``salary``s``thetaJoin(s>salary)``s``salary
P3``P1
只是和之間的區別P2
最後的關係
Final(name) = πname(Jobs thetaJoin(salary>s) ρT2(s)(P3))
將取決於什麼
P2
手段。請幫我做這個翻譯。
P2(salary) = πsalary(ρT1(s)(P1) thetaJoin(s>salary) P1)
來自關係代數的維基百科條目:
僅當 S 和 R 的標頭不相交,即不包含公共屬性時,才定義 θ-join 的結果。
因此,在基本操作中對該操作的模擬如下:
R ⋈θ S = σθ(R × S)
為確保標題不相交,必須重命名薪水(此處為“s”)。為確保關係為此自連接唯一命名,還必須重命名 P1(此處為“T1”)。
在粗略的 SQL 術語中:
DECLARE @P1 table (salary integer NOT NULL); INSERT @P1 (salary) VALUES (1), (2), (3); WITH T1 (s) AS (SELECT DISTINCT salary FROM @P1) SELECT DISTINCT P1.salary FROM @P1 AS P1 JOIN T1 ON T1.s > P1.salary; -- or, closer to the fundamental operations: WITH T1 (s) AS (SELECT DISTINCT salary FROM @P1) SELECT DISTINCT P1.salary FROM @P1 AS P1 CROSS JOIN T1 WHERE T1.s > P1.salary;
| 工資 | | ------ | | 1 | | 2 |
因此,P2 包含所有小於其他工資值的工資值。
因此,P1 減去 P2 包含了 PWC 的最高工資。
另請參閱使用關係代數找到最大值
請考慮以下內容以進行驗證,因為我不是關係代數方面的專家。
s
在我看來絕對不一樣,salary
因為它們屬於不同的關係。如果您認為它們相同,則您可能會認為它們P1
相同P2
-再次,事實並非如此。關係操作的每個結果都應該被視為一個獨立的關係。在我的理解中,包含工資不是最低的
P2
所有行(如果是,則為假)。正如您正確陳述的那樣,差異在於,它包含薪水最低的行。P1``s>salary``P3