T-SQ与高级子查询.ppt

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1.2 如何编写子查询 第二步 在第一步的基础上,进一步查找出存款最高的账户卡号 ,将SQL1代入 到SQL2语句中。 SQL2= select Card_ID from ALL_PURPOSE_CARD where BALANCE = (SQL1) 1.2 如何编写子查询 第三步 交易详情表(ALL_CARD_EXCHANGE)需要得到的对应的卡 号,可以在SQL2中查询出来,将SQL2代入SQL3语句中。 SQL3= (select * from ALL_CARD_EXCHANGE where CARD_ID = (SQL2)) 2.高级子查询 2.1 使用IN、NOT IN的子查询 IN后面的子查询允许返回多行记录,用于从一个范围限制主查询的条件。 select ACCOUNT_NAME from ACCOUNT where ACCOUNT_ID in ( select ACCOUNT_ID from ALL_PURPOSE_CARD where CARD_NO in (select TF_NO from TRANSFER)) 主查询 WHERE 表达式 IN (子查询) 查找有转账历史的账户名称 2.1 使用IN、NOT IN的子查询 使用NOT IN 查询信用卡交易记录中没有交易信息的信用卡信息 select * from CREDIT_CARD where CREDIT_CARD_ID not in ( select CREDIT_CARD_ID from EXCHANGE ) 2.2 使用EXISTS、NOT EXISTS的子查询 EXISTS用于对子查询的查询结果进行存在测试。只要子查询的结果有一行或一行以上的数据,就返回真;否,则返回假。其结果只取决于是否会返回行。 在网银上查询“赵云”的卡号(6225546378534297)是否收到转账,如果收到则显示信息“转账款已收到” 。 if EXISTS (select * from TRANSFER where TF_NO = 6225546378534297) BEGIN print 转账款已收到 END 2.2 使用EXISTS、NOT EXISTS的子查询 NOT EXISTS用于对子查询的查询结果进行不存在测试,如果一行数据也不存在,则整个NOT EXISTS(子查询)返回真。 查询账户余额大于500000的用户是否拥有信用卡,如果没有则提示“你可以尽快申请我行 白金信用卡” 。 if NOT EXISTS (select * from ACCOUNT where ACCOUNT_ID in ((select ACCOUNT_ID from ALL_PURPOSE_CARD where BALANCE 500000)) and ACCOUNT_ID in (select ACCOUNT_ID from CREDIT_CARD)) BEGIN print 你可以尽快申请我行白金信用卡 END 2.3 使用ALL的子查询 通过比较运算符将一个表达式的值或列值与子查询返回的一列值中的每一行进行比较,只要有一次比较的结果为FALSE,则ALL测试返回FALSE。 表达式或字段 比较运算符 ALL(子查询) select * from ALL_PURPOSE_CARD where ACCOUNT_ID ALL(select ACCOUNT_ID from CREDIT_CARD) 查询使用一卡通表比信用卡表多的人数信息 2.4 使用ANY的子查询 按照比较运算符、表达式或字段对子查询的结果每一行进行一次计算和比较。只要有一次满足条件,那么 ANY 的结果就是真;当子查询每行结果与ANY前面的表达式或字段比较结果全为假时,则结果为假 表达式或字段 比较运算符 ANY(子查询) select * from ALL_PURPOSE_CARD where ACCOUNT_ID ANY (select ACCOUNT_ID from CREDIT_CARD) 查询一卡通中账户编号比信用卡账户编号大的人数 3. 子查询的综合应用 案例:Bank数据库中有一卡通表(ALL_PURPOSE_CARD)、一卡通交易表(ALL_CARD_EXCHANGE),要求查询出交易次数最多的一卡通信息。 查 询 结 果 3. 子查询的综合应用 分析 一卡通交易表中保存了账户的历史交易记录,所以应该首先使用count函数统计出每个账户的交易次数。 查询出账户卡号上的消费次数,但在一卡通交易表中只有账户的交易信息,没有一卡通的信息,所以必须将过滤后的数据作为一个子查询(虚表)与一卡通表进行相关子查询。

文档评论(0)

6952225 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档