gpt4 book ai didi

sql - 使用 join 的高级 sql 查询

转载 作者:搜寻专家 更新时间:2023-10-30 20:04:22 24 4
gpt4 key购买 nike

概念银行示例

branch (branch_name, branch_city, assets)
customer (customer_name, customer_street, customer_city)
account (account_number, branch_name, balance)
loan (loan_number, branch_name, amount)
depositor (customer_name, account_number)
borrower(customer_name, loan_number)

查找在布鲁克林的所有分支机构都有帐户的所有客户。

select distinct S.customer-name 
from depositor as S
where not exists (
(select branch-name
from branch where branch-city = ‘Brooklyn’)
except
(select R.branch-name
from depositor as T, account as R
where T.account-number = R.account-number
and S.customer-name = T.customer-name)
)

我发现以下查询很难理解。有人能解释一下背后的逻辑吗?

最佳答案

因此,您要从 depositor 表中选择 customer-name,其中:

  1. 您正在获取布鲁克林所有分行的 branch-name:(select branch-name from branch where branch-city = 'Brooklyn')
  2. 您将获得该特定客户在布鲁克林拥有帐户的所有 branch-name:(select R.branch-name from depositor as T, account as R 其中 T.account-number = R.account-number 和 S.customer-name = T.customer-name)
  3. 您要从 1 中EXCEPT(减去)2 中的值。例如,如果“Best branch”在 2 中,它将从 1 的结果中删除(如果它是也在那里)。
  4. 您期望 3 的结果为 NOT EXISTS。也就是说,您期望步骤 3 中的减法不会留下任何东西。1 的所有分支也应该一直在 2 为客户打印他/她的名字。

示例

假设布鲁克林有三个分店:“最佳”、“一般”和“最差”。

Bob 进入“最佳”和“平均”。

  1. 所有分支:“最佳”、“平均”、“最差”
  2. Bob 去的分支机构:“最佳”、“一般”
  3. 2 - 1:“最佳”、“平均”、“最差”减去“最佳”、“平均”。这给我们留下的只有“最差”
  4. NOT EXISTS - 等一下,我们还有“最差”!有东西存在!这意味着此条件的计算结果为 false

Bob 未被选中。


Mary 仅获得“最佳”。

  1. 所有分支:“最佳”、“平均”、“最差”
  2. Bob 去的分支机构:“最佳”
  3. 2 - 1:“最佳”、“平均”、“最差”减去“最佳”。这给我们留下了“平均”、“最差”
  4. NOT EXISTS - 等一下,我们还有“平均”和“最差”!有东西存在!这意味着此条件的计算结果为 false

玛丽未被选中。


忙碌的人去“最佳”、“一般”和“最差”。

  1. 所有分支:“最佳”、“平均”、“最差”
  2. Bob 去的分支机构:“最佳”、“一般”、“最差”
  3. 2 - 1:“最佳”、“平均”、“最差”减去“最佳”、“平均”、“最差”。这给我们留下了……什么都没有
  4. NOT EXISTS - 没错!我的意思是..那是 true!什么都不存在

忙碌的人选中。

关于sql - 使用 join 的高级 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30713621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com