數據庫設計人員爲每個基表提供了一個謂詞(按列名參數化的句子模板)。
Parent(person, child) -- person PERSON is parent of person CHILD
Likes(person, food) -- person PERSON likes food FOOD
關係代數被設計成一個關係式(基表名或話務員呼叫)的值,認爲其謂語消費者作出真實的命題(聲明)的行。
-- person PERSON is parent of person CHILD
Likes
調用運算符NATURAL JOIN的表達式的謂詞是其輸入的謂詞的AND。
-- person PERSON is parent of person CHILD AND person PERSON likes food FOOD
Parent NATURAL JOIN Likes
同上,用於UNION & OR,MINUS & AND NOT,PROJECT 柱(一個或多個) & EXISTS其它列(多個),RESTRICT 條件 & AND 條件和列&的RENAME重命名參數。
/*
EXISTS PERSON such that
person PERSON is parent of person CHILD AND person CHILD likes food FOOD
*/
PROJECT child, food (Parent NATURAL JOIN (RENAME person:=child Likes))
因此,每個查詢表達式的值都包含使其謂詞變爲true語句的行。
假設我們將一個表的代數自連接定義爲通過零個或多個renamings從一個原始序列獲得的兩個表的NATURAL JOIN。根據以上我們對滿足謂詞AND的行進行NATURAL JOIN。 當我們希望滿足結果謂詞的行通過僅在參數/列中不同的謂詞表示時,就會產生自連接。
-- person PERSON likes food FOOD AND person CHILD likes food FOOD
Likes NATURAL JOIN (RENAME person:=child Likes)
沒有什麼特殊的地方在一個給定的應用其他比給定的查詢產生的自連接。
SQL SELECT DISTINCT語句可以通過代數運算符來描述。他們還計算查詢謂詞。首先FROM表列是通過在表格別名(相關名稱)&前加一個點來重新命名的。 (SQL NATURAL JOIN 不是點公共列。)新表是NATURAL JOINed。 ON和WHERE RESTRICT每個條件。然後SELECT DISTINCT子句重命名以從返回的列中刪除點& PROJECTS將不需要的虛線列刪除。
我們可以直接將SQL轉換爲謂詞:點輸入列重命名。 NATURAL/CROSS/INNER JOIN,ON &在哪裏給AND。每個無網點結果列都給出了AND,表示它等於它的虛線版本。最後刪除所有虛線列給EXISTS。
-- person PERSON likes food FOOD AND person CHILD likes food FOOD
/*
EXISTS P.*, C.* such that
P.PERSON = PERSON AND C.person = CHILD AND P.FOOD = FOOD
AND person P.CHILD likes food P.FOOD
AND person C.CHILD likes food C.FOOD
AND P.FOOD = C.FOOD
*/
SELECT DISTINCT p.person AS person, c.person AS child, p.food AS food
FROM Likes p INNER JOIN Likes c
WHERE p.food = c.food
AND p.food = c.food
AND FOOD = c.food
再說一遍:在SQL中,我們說在JOIN的多個表別名與同一個表值相關聯時,有一個自連接;在應用術語中,這意味着我們可以用一些參數/列中的謂詞不同來表示查詢的含義;對於這種情況,應用程序或表格的含義沒有什麼特別之處。
見this re query semantics這恰好包括一個鏈接到this re self-join semantics in particular。
感謝您的回覆,但我想你錯過了我要問的問題.. 員工經理的確精確地擊中了頭上的那個_particular_指甲;關係代數學上講,它是一種非常特殊的自我參照行爲。這就是爲什麼我特意從回覆中排除它。 從表面看來,自加入[自然,因爲我們正在談論關係代數,而不是SQL]是「沒什麼特別的」,所以_why_這麼做? 我在想: 查詢1 = TableX的⋈col1↦col1',col2↦col2'(TableX的) QUERY2 =σ= COL1 COL1'(σ= COL2 COL2' (查詢1)) 將「迴歸的完整列表tableX中的獨特線條「 – mist42nz
哦,我想我並不是那麼特別。它始終發生,只要兩個相同類型的對象相關。銀行賬戶,保存和檢查?但你似乎錯過了加入幾乎總是跨欄。這不是因爲單列上的自加入會返回表 - 通常不會。它可以返回更多,更多的行。考慮在性別相同的人們的桌子上自我加入。它會返回每一對可能的男性和每一對可能的女性。定義明確但很少需要。 – MSalters
對不起,您是否仍然加入關於員工經理的事情(「特定」)。 還是你回答我問的問題?如果你的答案很混亂。 到目前爲止,我的答案出現了,從我自己的研究到「爲了在所有相關項目上創建一個雙重條目」...... ....因此被設置爲刪除真正的重複項(在<>上選擇用於重命名的字段),以便在真實情況下保留它們是多行常見行的情況。這可以刪除單身,或預計顯示reoccurances。 – mist42nz