Mysql 将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) 我想找到

我正在学习如何将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)
我想找到住在费尔法克斯,有贷款,但没有银行账户的客户

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查询就可以算出有理代数。从描述中可以明显看出哈哈,我指的是客户城市。我的错。。。