我在这里打了一个完整的空白。
我有一个有两个关系的架构。一个是贷款,它具有属性loan-number,branch-name和amount。第二种关系是借款人,其客户名称和贷款号码作为其属性。这两个关系通过贷款号码联系起来。
如果我想找到余额少于10000的所有客户的名字,我将如何以关系代数形式编写查询。
出于好奇,我如何将其作为基本的SQL查询。
答案 0 :(得分:4)
对关系代数8主要算子做一些研究:限制,投影,笛卡尔积,连接,并集,交集,集合差异和除法。
回答你的问题:
loan(loan_number, branch_name, amount)
borrower(customer_name, loan_number)
执行两个关系的自然连接,应用限制(余额小于10000),然后使用投影显示名称。下面的以下2个关系代数表达式都将回答您的问题
两个表达式都评估为以下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