与关系代数不同,元组关系演算是一种非过程查询语言。元组演算只提供查询的描述,但不提供解决它的方法。因此,它解释了要做什么,而不是如何做。
在元组演算中,查询表示为
{t| P(t)}
其中 t = 结果元组,
P(t) = 称为谓词,这些是用于获取 t 的条件
因此,它生成所有元组 t 的集合,使得谓词 P(t) 对 t 为真。
P(t) 可以具有与 OR (∨)、AND (∧)、NOT(¬) 逻辑组合的各种条件。
它还使用量词:
∃ t ∈ r (Q(t)) = 在关系 r 中的 t 中存在一个元组,使得谓词 Q(t) 为真。
∀ t ∈ r (Q(t)) = Q(t) 对关系 r 中的所有元组都为真。
例子:
表 1:客户
Customer name | Street | City |
---|---|---|
Saurabh | A7 | Patiala |
Mehak | B6 | Jalandhar |
Sumiti | D9 | Ludhiana |
Ria | A5 | Patiala |
表 2:分支
Branch name | Branch city |
---|---|
ABC | Patiala |
DEF | Ludhiana |
GHI | Jalandhar |
表 3:帐户
Account number | Branch name | Balance | |
---|---|---|---|
1111 | ABC | 50000 | |
1112 | DEF | 10000 | |
1113 | GHI | 9000 | |
1114 | ABC | 7000 |
表 4:贷款
Loan number | Branch name | Amount |
---|---|---|
L33 | ABC | 10000 |
L35 | DEF | 15000 |
L49 | GHI | 9000 |
L98 | DEF | 65000 |
表 5:借款人
Customer name | Loan number |
---|---|
Saurabh | L33 |
Mehak | L49 |
Ria | L98 |
表 6:存款人
Customer name | Account number |
---|---|
Saurabh | 1111 |
Mehak | 1113 |
Sumiti | 1114 |
Queries-1:查找贷款编号、分行、贷款金额大于等于10000的金额。
{t| t ∈ loan ∧ t[amount]>=10000}
结果关系:
Loan number | Branch name | Amount |
---|---|---|
L33 | ABC | 10000 |
L35 | DEF | 15000 |
L98 | DEF | 65000 |
在上面的查询中,t[amount] 被称为 tupple 变量。
查询 2:查找金额大于或等于 10000 的每笔贷款的贷款编号。
{t| ∃ s ∈ loan(t[loan number] = s[loan number]
∧ s[amount]>=10000)}
结果关系:
Loan number |
---|
L33 |
L35 |
L98 |
查询 3:查找在银行拥有贷款和帐户的所有客户的姓名。
{t | ∃ s ∈ borrower( t[customer-name] = s[customer-name])
∧ ∃ u ∈ depositor( t[customer-name] = u[customer-name])}
结果关系:
Customer name |
---|
Saurabh |
Mehak |
查询 4:查找在“ABC”分行有贷款的所有客户的姓名。
{t | ∃ s ∈ borrower(t[customer-name] = s[customer-name]
∧ ∃ u ∈ loan(u[branch-name] = “ABC” ∧ u[loan-number] = s[loan-number]))}
结果关系:
Customer name |
---|
Saurabh |