ImageVerifierCode 换一换
格式:DOCX , 页数:5 ,大小:20.12KB ,
资源ID:6622577      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-6622577.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据查询三复杂查询.docx)为本站会员(saw518)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

数据查询三复杂查询.docx

1、什么是子查询 ?问题:编写 T-SQL 语句,查看年龄比“ 张三 ”大的学员,要求显示这些学员的信息 ?分析: 第一步:求出“张三” 的年龄;第二步:利用 WHERE 语句,筛选年龄比“张三”大的学员;实现方法一:采用 T-SQL 变量实现 DECLARE age INT -定义变量,存放张三的年龄SELECT age=stuAge FROM stuInfoWHERE stuName=张三 -求出张三的年龄-筛选比张三年龄大的学员SELECT * FROM stuInfo WHERE stuAgeage GO 有没有更简洁的语句呢?有,我们可以合并上述两步 。因为:1.除了“”号外,还可以使用

2、其他运算符号,习惯上,外面的查询称为父查询,括号中嵌入的查询称为子查询。2.SQL Server 执行时,先执行子查询部分,求出子查询部分的值,然后再执行整个父查询。它的执行效率比采用 SQL 变量实现的方案一要高,所以推荐采用子查询。3.子查询作为 WHERE 条件的一部分,还可以和 UPDATE、INSERT、DELETE 一起使用,语法类似于SELECT 语句。实现方法二:采用子查询实现 SELECT * FROM stuInfoWHERE stuAge( SELECT stuAge FROM stuInfo where stuName=张三)GO 使用子查询替换表连接问题:查询笔试刚好

3、通过(60 分)的学员。我们可以根据学员信息表和成绩表,查询笔试刚好通过考试的学员。那么就有两种实现方案:1.因为涉及到两张表(学员信息表和成绩表,前面我们已经建立好了),所以可以采用曾学过的连接查询。2. 使用子查询。实现方法一:采用表连接 SELECT stuName FROM stuInfo INNER JOIN stuMarksON stuInfo.stuNo=stuMarks.stuNo WHERE writtenExam=60GO实现方法二:采用子查询 SELECT stuName FROM stuInfo WHERE stuNo=(SELECT stuNo FROM stuMar

4、ks WHERE writtenExam=60)GO注意:1.一般来说,表连接都可以用子查询替换,但反过来说就不一定。有的子查询却不能用表连接替换。2.子查询比较灵活、方便、形式多样,常作为增、删、改、查的筛选条件,适合于操纵一个表的数据。3. 表连接更适合于查看多表的数据,一般用于 SELECT 查询语句。问题:查询笔试刚好通过的学员名单。提问:如果笔试成绩中有多个人刚好通过,即都为 60 分(例如我们再插入一条 60 分的数据)。使用我们刚才的子查询语句,会出现什么问题呢?(注意等号部分。)我们演示一下就会发现出现了编译错误。SQL Server 要求:“”,“”等比较运算符号后的子查询,

5、返回的值不能多于一个,即记录条数不能超过 1 条。那么如何解决呢?我们可以使用 IN 子查询。IN 子查询 SELECT stuName FROM stuInfo WHERE stuNo IN(SELECT stuNo FROM stuMarks WHERE writtenExam=60)GO1. IN 后面的子查询可以返回多条记录2. 常用 IN 替换等于()的比较子查询问题:查询参加考试的学员名单 分析:判断一个学员是否参加考试其实很简单,只需要查看该学员对应的学号是否在考试成绩表 stuMarks 中出现即可 /*-采用 IN 子查询参加考试的学员名单 -*/SELECT stuName

6、 FROM stuInfoWHERE stuNo IN (SELECT stuNo FROM stuMarks)GONOT IN 子查询问题:查询未参加考试的学员名单 分析:加上否定的 NOT 即可EXISTS 子查询EXISTS 语句我们并不陌生,我们在学习建库和建表语句时曾提前用过,它是一个存在检测的子查询语句 。IF EXISTS(SELECT * FROM sysDatabases WHERE name=stuDB)DROP DATABASE stuDBCREATE DATABASE stuDB.建库代码略 EXISTS 子查询的语法:IF EXISTS (子查询)语句1. 如果子查询

7、的结果非空,即记录条数 1 条以上,则 EXISTS (子查询)将返回真(true),否则返回假(false) 2. EXISTS 也可以作为 WHERE 语句的子查询,但一般都能用 IN 子查询替换问题:检查本次考试,本班如果有人笔试成绩达到 80 分以上,则每人提 2 分;否则,每人允许提 5 分 分析:是否有人笔试成绩达到 80 分以上,可以采用 EXISTS 检测 /*-采用 EXISTS 子查询,进行酌情加分 -*/IF EXISTS (SELECT * FROM stuMarks WHERE writtenExam80)BEGINprint 本班有人笔试成绩高于 80 分,每人加

8、2 分,加分后的成绩为:UPDATE stuMarks SET writtenExam=writtenExam+2SELECT * FROM stumarksENDELSEBEGINprint 本班无人笔试成绩高于 80 分,每人可以加 5 分,加分后的成绩:UPDATE stuMarks SET writtenExam=writtenExam+5SELECT * FROM stumarksENDGO问题:检查本次考试,本班如果没有一人通过考试(笔试和机试成绩都60 分),则试题偏难,每人加 3 分,否则,每人只加 1 分 分析:没有一人通过考试,即不存在“笔试和机试成绩都60 分”,可以采用

9、 NOT EXISTS 检测 IF NOT EXISTS (SELECT * FROM stuMarks WHERE writtenExam60 AND labExam60)BEGINprint 本班无人通过考试,试题偏难,每人加 3 分,加分后的成绩为:UPDATE stuMarks SET writtenExam=writtenExam+3,labExam=labExam+3SELECT * FROM stuMarksENDELSEBEGINprint 本班考试成绩一般,每人只加 1 分,加分后的成绩为:UPDATE stuMarks SET writtenExam=writtenExam+1,labExam=labExam+1SELECT * FROM stuMarksENDGO

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报