SQL语句之查找一个表在另一个表上的所有映射(如学生在选课表上的所有映射,即查询选修所有课程的学生姓名)
来源:互联网 发布:mp3音频剪辑软件 编辑:程序博客网 时间:2024/05/16 11:01
我们来看一个例子(学生选课表也类似)。
几张表如下:
branch(branch name,branch city, assets)
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)
题目是查找在“Brooklyn”的所有支行都有账户的所有客户,SQL语句如下:
withbranchcountas
(select count(*)
branch
where branch city= ’Brooklyn’)
select customer name
from customer c
where branchcount=
(select count(distinctbranch name)
from (customernatural joindepositornatural joinaccount
natural join branch)asd
where d.customer name = c.customer name and d.branch_city='Brooklyn')
我们来理解一下这个查询语句:
第一步:找出在Brooklyn这个市所有支行的数目。
第二步:以客户姓名为等值条件连接四个表,也就是查出所有用户的开户情况,看这些用户在'Brooklyn'市的哪些支行开了户,并去除重复的支行的名字
最后:与Brooklyn支行数目做对比,拥有与该市支行数目相等的就是在Brooklyn所有支行都开过户的客户。
当然,该类问题还可用第二种方式来写,用两层not exists嵌套循环的双重否定也可表达,即“Brooklyn市不存在这样的支行,待查找的客户没有在该支行开过户”。
是不是有点被绕晕了,我也是,多捋几遍或许就被洗脑了,发现诶好像是这么回事,哈哈哈。。
- SQL语句之查找一个表在另一个表上的所有映射(如学生在选课表上的所有映射,即查询选修所有课程的学生姓名)
- SQL查询选修了所有课程的学生姓名
- 求出选修了所有课程的学生姓名
- 数据库操作: 查询选修了所有课程的学生
- [SQL]学生、课程、选课,查询选择所有/3门以上课程的学生
- 一条SQL语句面试题:求选修所有课程的学生
- 一条SQL语句面试题:求选修所有课程的学生
- 编写程序,查询所有学生选修课程的期末成绩和对应等级,如学生未选修任何课程 --则输出提示信息。用case选择结果
- SQL查询选修了全部课程的学生姓名解析
- SQL-EXIST-查询选修了全部课程的学生姓名
- 在整个SQL SERVER数据库的所有表中查找一个字符(比如姓名)
- 查询第二学期的学生中所有在1990年后出生的学生姓名
- 如何查询运行在某个表上的所有SQL
- 如何理解 多个 exists sql(查询选修了全部课程的学生姓名)
- 查询选修了全部课程的学生姓名
- 查询选修了全部课程的学生姓名
- 查询选修了全部课程的学生姓名
- 查询选修全部课程的学生姓名和所属单位
- JVM调优总结系列之三:垃圾回收面临的问题
- 【JVM实用参数】(一)JVM类型以及编译器模式
- 幻灯片制作教程之PPT图形PPT图表制作技巧
- 电脑文件管理
- 协议制定经验
- SQL语句之查找一个表在另一个表上的所有映射(如学生在选课表上的所有映射,即查询选修所有课程的学生姓名)
- 剑指Offer之面试题35:第一个只出现一次的字符
- parallel studio工具学习总结
- JS高级技巧
- Caffe的编译与安装(二)
- 【JVM实用参数】(二)参数分类和即时(JIT)编译器诊断
- Ubuntu14.04配置opencv2.4.11开发环境
- 回眸总结linux的启动过程
- 透过ATS缓存配置看如何判断HTTP资源是否可缓存方法论