如何解决此SQL查询?

时间:2015-07-24 10:13:28

标签: sql oracle

表:

  • CUSTOMER(CUSTOMER-NAME(P),CUSTOMER-STREET,CUSTOMER- CITY)
  • BRANCH(BRANCH-NAME(P),BRANCH-CITY,ASSETS)
  • ACCOUNT(帐号(P),分支,平衡)
  • LOAN(贷款号码(P),分行名称,金额)
  • DEPOSITOR(CUSTOMER-NAME(P),ACCOUNT-NUMBER(P))
  • BORROWER(CUSTOMER-NAME(P),LOAN-NUMBER(P))

标有P的属性是表格的主键。

以上是关系模式,我必须为以下查询编写SQL语法:

  • 在“诺伊达”的所有分支中查找拥有帐户的客户的姓名(诺伊达是地方的名称)

    1. 我尝试解决这个问题,但输出结果是那些在诺伊达的某个分支机构拥有帐户的客户。如何为所有人做到这一点?

    2. 我对SQL有疑问,即使在非主键上我们也可以结合两种关系吗?例如:

    3. depositor.account-number = account.account-number and account.branch-name = branch.branch-name

在上面的陈述中,branch-name不是帐户的主键,而是分支。因此,是上面的权利吗?

1 个答案:

答案 0 :(得分:2)

这应该是正确的查询

select *
from CUSTOMER c
where not exists (
        select BRANCH-NAME
        from BRANCH
        where BRANCH-CITY = 'Noida'
        minus
        select BRANCH-NAME
        from ACCOUNT 
            join DEPOSITOR d using (ACCOUNT-NUMBER)
        where d.CUSTOMER-NAME = c.CUSTOMER-NAME
    )