Mysql 将SQL转换为关系代数
我正在学习如何将sql查询转换为关系代数和其他方法Mysql 将SQL转换为关系代数,mysql,sql,relational-database,relational,relational-algebra,Mysql,Sql,Relational Database,Relational,Relational Algebra,我正在学习如何将sql查询转换为关系代数和其他方法 Customer(customer_name, customer_street, customer_city) Loan(loan_number, branch_name, amount) Borrower(customer_name, loan_number) Account(account_number, branch_name, balance) Depositor(customer_name, account_number) 我想找到
Customer(customer_name, customer_street, customer_city)
Loan(loan_number, branch_name, amount)
Borrower(customer_name, loan_number)
Account(account_number, branch_name, balance)
Depositor(customer_name, account_number)
我想找到住在费尔法克斯,有贷款,但没有银行账户的客户
CustomersInFFX = PROJECT customer_name (SELECT customer_city = 'Fairfax'(Customer))
LoanOwners = (CustomersInFFX NATURAL JOIN Borrower NATURAL JOIN Loan)
AccountHolders = (Depositor NATURAL JOIN ACCOUNT)
PROJECT customer_name (LoanOwners - AccountHolders)
这有意义吗
*选择:σ,项目:π,自然连接:⋈ 以下是我使用标准SQL的尝试:
WITH CustomersInFFX
AS
(
SELECT *
FROM Customer
WHERE customer_city = 'Fairfax'
),
LoanOwners
AS
(
SELECT *
FROM CustomersInFFX
NATURAL JOIN Borrower
NATURAL JOIN Loan
),
AccountHolders
AS
(
SELECT *
FROM Depositor
NATURAL JOIN ACCOUNT
)
SELECT *
FROM LoanOwners
EXCEPT CORRESPONDING DISTINCT
SELECT *
FROM AccountHolders;
但是,只有当借贷者
和账户持有人
表具有相同数量的属性且每个属性具有相同的名称时,这才有效。这种情况不太可能发生,因此您只需要投影(选择
)所需的属性,例如
SELECT customer_name
FROM LoanOwners
EXCEPT DISTINCT
SELECT customer_name
FROM AccountHolders;
对我来说没有多大意义。。你想问一些更具体的问题吗?我没有看到任何sql可以转换成或转换成sql,即使我对关系代数一无所知,我也不认为
customer\u name='Fairfax'
会找到居住在那里的客户。.选择(σ)是当前使用的。您不需要查看sql查询就可以算出有理代数。从描述中可以明显看出哈哈,我指的是客户城市。我的错。。。