Domain Relational Calculus是一种与元组关系演算等效的非过程查询语言。领域关系演算只提供查询的描述,但不提供解决它的方法。在领域关系演算中,查询表示为,
{ < x1, x2, x3, ..., xn > | P (x1, x2, x3, ..., xn ) }
其中, < x 1 , x 2 , x 3 , …, x n > 表示结果域变量,P (x 1 , x 2 , x 3 , …, x n ) 表示与谓词演算等效的条件或公式。谓词演算公式:
- 将所有运算符
- 一组连接词,如 and、or、not
- 量词集
例子:
表 1:客户
Customer name | Street | City |
---|---|---|
Debomit | Kadamtala | Alipurduar |
Sayantan | Udaypur | Balurghat |
Soumya | Nutanchati | Bankura |
Ritu | Juhu | Mumbai |
表 2:贷款
Loan number | Branch name | Amount |
---|---|---|
L01 | Main | 200 |
L03 | Main | 150 |
L10 | Sub | 90 |
L08 | Main | 60 |
表 3:借款人
Customer name | Loan number |
---|---|
Ritu | L01 |
Debomit | L08 |
Soumya | L03 |
Query-1:查找贷款编号、分行、贷款金额大于等于100的金额。
{≺l, b, a≻ | ≺l, b, a≻ ∈ loan ∧ (a ≥ 100)}
结果关系:
Loan number | Branch name | Amount |
---|---|---|
L01 | Main | 200 |
L03 | Main | 150 |
查询 2:查找金额大于或等于 150 的每笔贷款的贷款编号。
{≺l≻ | ∃ b, a (≺l, b, a≻ ∈ loan ∧ (a ≥ 150)}
结果关系:
Loan number |
---|
L01 |
L03 |
查询 3:查找所有在“总行”分行有贷款的客户的姓名,并找到贷款金额。
{≺c, a≻ | ∃ l (≺c, l≻ ∈ borrower ∧ ∃ b (≺l, b, a≻ ∈ loan ∧ (b = “Main”)))}
结果关系:
Customer Name | Amount |
---|---|
Ritu | 200 |
Debomit | 60 |
Soumya | 150 |
笔记:
将在结果关系中的域变量必须出现在 | 之前。在 ≺ 和 ≻ 内,所有域变量必须按它们在原始关系或表中的顺序出现。