SQL关系代数查询

时间:2014-01-08 13:46:01

标签: sql relational-algebra

我在这里打了一个完整的空白。

我有一个有两个关系的架构。一个是贷款,它具有属性loan-number,branch-name和amount。第二种关系是借款人,其客户名称和贷款号码作为其属性。这两个关系通过贷款号码联系起来。

如果我想找到余额少于10000的所有客户的名字,我将如何以关系代数形式编写查询。

出于好奇,我如何将其作为基本的SQL查询。

3 个答案:

答案 0 :(得分:4)

对关系代数8主要算子做一些研究:限制,投影,笛卡尔积,连接,并集,交集,集合差异和除法。

回答你的问题:

loan(loan_number, branch_name, amount)
borrower(customer_name, loan_number)

执行两个关系的自然连接,应用限制(余额小于10000),然后使用投影显示名称。下面的以下2个关系代数表达式都将回答您的问题relational algebra code

meaning of symbols

两个表达式都评估为以下SQL查询:

select customer_name
from borrower b, loan l
where b.loan_number=l.loan_number and amount>10000;

答案 1 :(得分:1)

免责声明:我对关系代数不太熟悉。

可以很快将SQL视为使用隐式内连接,然后使用loan.amount上的过滤器:

SELECT customer-name
FROM Borrower, Loan
WHERE Customer.loan-number = Loan.loan-number
 AND Loan.amount > 10000

然后将其转换为关系代数,记住以下符号是唯一需要的符号:

选择操作(σ): - 识别一组元组,它们是关系的一部分并仅提取这些元组。 select操作选择满足给定谓词或条件的元组。

项目操作(Π): - 返回与剩余某些属性的参数关系。

 Π customer-name (σ Borrower.loan-number=Loan.loan-number (σ Loan.amount>10000 (Borrower X Loan)))

答案 2 :(得分:0)

我相信SQL会相对简单......类似下面的内容可能就足够了:

SELECT 
  b.customer-name,
  SUM(l.amount)
FROM
  borrower b
  JOIN loan l
    ON b.loan-number = l.loan-number
GROUP BY
  b.customer-name
HAVING
  SUM(l.amount) < 10000