在關(guān)系代數(shù)表達(dá)式中,一般都顯式指定一個(gè)計(jì)值順序,它隱含著執(zhí)行查詢的策略。在關(guān)系演算中,不描述查詢執(zhí)行策略,即關(guān)系演算表達(dá)查詢只說明要什么,不說明如何得到它。
關(guān)系演算跟數(shù)學(xué)中的微積分無關(guān),而是根據(jù)符號(hào)邏輯中的一個(gè)分支—— 謂詞演算 命名的。在數(shù)據(jù)庫中,它有兩種形式:由 Codd(1972a)首先提出的元組關(guān)系演算,由 Lacroix 和 Pirotte(1977)提出的 域 關(guān)系演算。
在一階邏輯或謂詞演算中,謂詞是一個(gè)帶參數(shù)的真值函數(shù)。如果把參數(shù)值帶入,這個(gè)函數(shù)就會(huì)變成一個(gè)表達(dá)式,稱為 命題,它非真即假。例如,“John White 是一名員工” 和 “John White 的收入高于 Ann Beech” 這兩個(gè)語句都是命題,因此可以確定他們是真還是假。在第一個(gè)例子里,函數(shù)為 “是一名員工”,帶有一個(gè)參數(shù)(John White);在第二個(gè)例子中,函數(shù)為 “收入高于”,它有兩個(gè)參數(shù)(John White 和 Ann Beech)。
如果某個(gè)謂詞包含一個(gè)變量,比如,“x 是一名員工”,那么就一定有一個(gè)與 x 相關(guān)聯(lián)的 論域(range)。當(dāng)我們把該論域中的某些值賦給 x 時(shí),命題可能為真;而對(duì)于另一些值,命題則可能為假。例如,論域是所有人的集合,若將 John White 帶入 x,則命題 “John White 是一名員工” 為真。若將某個(gè)非員工的人名帶入,則命題為假。
假設(shè) P 是一個(gè)謂詞,那么所有使 P 為真得 x 的集合就可以表示成:

可以用邏輯連詞與,或,非連接謂詞形成符合謂詞。
1. 元組關(guān)系演算
在元組關(guān)系演算中,我們感興趣的是找出所有使謂詞為真得元組。這種演算是基于 元組變量 的。元組變量是 “定義于” 某個(gè)命名關(guān)系上的變量,即該變量的論域僅限于這個(gè)關(guān)系中的元組(“論域” 這個(gè)詞在這里不是指數(shù)學(xué)中的值域,而是定義域)。例如,指定元組變量 S 的范圍為關(guān)系 Staff,就寫成:


F 稱為 公式(在數(shù)理邏輯中稱為 合式公式 或 wff)。例如,要表示查詢 “列出收入高于 10000 英鎊的所有員工的 staffNo、fName、lName、position、sex、DOB、salary 及 branchNo”,可以寫成:


存在量詞與全稱量詞
可以在公式中使用兩個(gè)量詞來說明謂詞將作用在多少個(gè)實(shí)例上。
存在量詞 “?”(表 “存在”)在公式中說明至少有一個(gè)實(shí)例使謂詞為真,例如:
表示 “在 Branch 中存在一個(gè)元組,它在 branchNo 上的取值與 Staff 的元組 S 在 branchNo 上的取值相同而且對(duì)應(yīng)的分公司位于倫敦”。
全稱量詞 “?”(表示 “對(duì)于所有的”)在公示中說明每個(gè)實(shí)例都必須滿足這個(gè)謂詞,例如:
表示 “Branch 中的所有分公司都不再巴黎”??梢詫⒌隆つΩ赏茝V到存在量詞和全稱量詞。例如:




利用這些等價(jià)規(guī)則,可以把前面的公式寫成:

表示 “巴黎沒有分公司”。
受 “?” 或 “?” 約束的元組變量稱為 約束變量,反之,其他的元組變量則成為 自由變量。在關(guān)系演算表達(dá)式中,只有那些在豎線(|)左邊出現(xiàn)的變量是自由變量。
表達(dá)式和公式
正如并不是任意排列的英文字母序列都可以構(gòu)成一個(gè)結(jié)構(gòu)正確的詞語一樣,也不是每一個(gè)演算公式序列都可以被接受。公式序列必須是無歧義且有意義的。元組關(guān)系演算中的一個(gè)表達(dá)式必須具有下面所示的一般形式:
其中,S1,S2,...,Sn,...,Sm 代表元組變量,每個(gè) ai 是元組變量 Si的論域關(guān)系的一個(gè)屬性,F(xiàn) 為公式。一個(gè)(合式)公式包括一個(gè)或多個(gè)原子公式,原子公式可以有下面幾種形式:
- R(Si),其中 Si 是一個(gè)元組變量,R 是一個(gè)關(guān)系。
- Si.a1 θ Sj.a2,其中 Si 和 Sj 為元組變量,a1 是元組變量 Si 的論域關(guān)系的一個(gè)屬性,a2 是元組變量 Sj 的論域關(guān)系的一個(gè)屬性,θ 是比較運(yùn)算符中的一個(gè)。屬性 a1 和 a2 的值必須可進(jìn)行 θ 比較。
- Si.a1 θ c,其中 Si 是一個(gè)元組變量,a1 是元組變量 Si 論域關(guān)系的一個(gè)屬性,c 是屬性 a1 對(duì)應(yīng)域內(nèi)的一個(gè)常數(shù),θ 是一個(gè)比較運(yùn)算符。
可以根據(jù)下面的規(guī)則,遞歸的構(gòu)造出公式:
- 原子公式是公式。
- 如果 F1 和 F2 是公式,則它們的合取 F1 ∧ F2 、析取 F1 ∨ F2,以及取非 ~ F1 也是公式。
- 如果 F 是帶自由變量 X 的公式,則(?X)(F) 和 (?X)(F) 也是公式。
表達(dá)式的安全性
另外還需要說明的是,演算表達(dá)式可以生成一個(gè)無窮集。例如:

當(dāng)結(jié)果中出現(xiàn)的所有值都在表達(dá)式的域內(nèi)時(shí),這個(gè)表達(dá)式就是 安全 的。上面的表達(dá)式是不安全的,原因就在于它包括了 Staff 關(guān)系之外的元組(因此超出了表達(dá)式的域)。本文中所給出的其他元組演算表達(dá)式都是安全的。一些人用獨(dú)立的 RANGE 語句來定義變量的論域,以避免這個(gè)問題的出現(xiàn)。
2. 域關(guān)系演算
在元組關(guān)系演算中,使用了定義在關(guān)系上的元組變量。在域關(guān)系演算中,同樣也要用到變量,但它的論域不再是關(guān)系中的元組,而是屬性的域。域關(guān)系演算中的表達(dá)式具有下面的一般形式:

其中,d1,d2,...,dn,...,dm代表域變量,F(xiàn)(d1,d2,...,dm) 代表由某些原子公式組成的公式,原子公式可以有以下幾種形式:
- R(d1,d2,...,dn),其中 R 是維數(shù)為 n 的關(guān)系,di 為域變量。
- di θ dj,其中 di 和 dj 代表域變量,θ 是比較運(yùn)算符中的一個(gè)。di 和 dj 對(duì)應(yīng)域的值必須可進(jìn)行 θ 比較。
- di θ c,其中 di 是域變量,c 是 di 對(duì)應(yīng)域中的一個(gè)常數(shù),θ 是某個(gè)比較運(yùn)算符。
可以根據(jù)下面的規(guī)則,用原子公式遞歸的構(gòu)造出公式:
- 原子公式是公式。
- 如果 F1 和 F2 是公式,則它們的合取 F1 ∧ F2 、析取 F1 ∨ F2,以及取非 ~ F1 也是公式。
- 如果 F 是帶自由變量 X 的公式,則(?X)(F) 和 (?X)(F) 也是公式。
當(dāng)把域關(guān)系演算限制為安全表達(dá)式時(shí),它就等價(jià)于安全的元組關(guān)系演算,而這種元組關(guān)系演算又等價(jià)于關(guān)系代數(shù)。這就意味著,每個(gè)關(guān)系代數(shù)表達(dá)式都存在一個(gè)與之等價(jià)的關(guān)系演算表達(dá)式,反過來,每個(gè)元組或者域關(guān)系演算表達(dá)式都存在一個(gè)與之等價(jià)的關(guān)系代數(shù)表達(dá)式。
3. 其他語言
雖然關(guān)系演算難于理解與使用,但其非過程性令人滿意,因此人們開始尋求更易于使用的非過程化技術(shù)。這導(dǎo)致了另外兩類關(guān)系語言的出現(xiàn):面向轉(zhuǎn)換的語言和圖形化語言。
面向轉(zhuǎn)換的語言(transform-oriented language):是一種非過程語言 ,它利用關(guān)系將輸入數(shù)據(jù)轉(zhuǎn)換成期望的輸出。這種語言提供了一種易于使用的結(jié)構(gòu),可以很容易的根據(jù)已知的內(nèi)容表述出所期望的結(jié)果。SQUARE(Boyce et al.,1975)、SEQUEL(Chamberin et al.,1976)以及 SEQUEL 的后繼產(chǎn)品 SQL 語言都是面向轉(zhuǎn)換的語言。
圖形化語言(graphical language):給用戶提供了關(guān)系結(jié)構(gòu)的一種圖解說明。用戶在一個(gè)實(shí)例中填入想要的輸出,系統(tǒng)則以這種格式返回所需的數(shù)據(jù)。QBE(舉例查詢)就是圖形化語言(Zloof,1977)的一個(gè)范例。
還有一類稱為 第四代語言(4GL),它允許用戶使用一個(gè)受限的命令集來創(chuàng)建完整的用戶應(yīng)用,這個(gè)命令集對(duì)用戶十分友好,通常為菜單驅(qū)動(dòng)的環(huán)境。某些系統(tǒng)還能接受自然語言,比如受限的英語。這類語言常稱為 第五代語言(5GL),它們的發(fā)展仍處于起步階段。