




已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十章,T-SQL编程,目标,掌握如何定义变量并赋值 掌握如何输出显示数据 掌握IF、WHILE、CASE逻辑控制语句 理解SQL中批处理的概念,使用变量,变量分为: 局部变量: 局部变量必须以标记作为前缀 ,如age 局部变量的使用也是先声明,再赋值 全局变量: 全局变量必须以标记 作为前缀,如version 全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值,局部变量,例如: DECLARE name varchar(8) DECLARE seat int,声明局部变量 DECLARE 变量名 数据类型,赋值 SET 变量名 =值 SELECT 变量名 = 值,例如: SET name=张三 SELECT name=stuName FROM stuInfo WHERE stuNo=s25302,必须确保筛选出的记录只有1条,或,局部变量示例,问题: 编写T-SQL查找李文才的左右同桌 ?,学员信息表,分析: 第一步,找出“李文才“的座位号; 第二步,李文才的座位号加1或减1,局部变量示例,/*-查找李文才的信息-*/ DECLARE name varchar(8) -学员姓名 SET name=李文才 -使用SET赋值 SELECT * FROM stuInfo WHERE stuName = name /*-查找李文才的左右同桌-*/ DECLARE seat int -座位号 SELECT seat=stuSeat FROM stuInfo -使用SELECT赋值 WHERE stuName=name SELECT * FROM stuInfo WHERE (stuSeat = seat+1) OR (stuSeat = seat-1) GO,演示:使用局部变量,参考语句,全局变量,全局变量都使用两个标志作为前缀,全局变量示例,print SQL Server的版本+VERSION print 服务器的名称: +SERVERNAME INSERT INTO stuInfo(stuName,stuNo,stuSex,stuAge) VALUES(武松,s25328,男,23) -如果大于0表示上一条语句执行有错误 print 当前错误号+convert(varchar(5),ERROR) print 刚才报名的学员,座位号为: +convert(varchar(5),IDENTITY ) UPDATE stuinfo SET stuAge=85 WHERE stuName=李文才 print 当前错误号+convert(varchar(5),ERROR) GO,演示:使用全局变量,参考语句,SQL Server的版本,服务器名称,座位号(自动编号),错误号,错误号,逻辑控制语句,T-SQL语言提供了一些可用于改变语句执行顺序的命令,称为流程控制语句. 流程控制语句与常见的程序设计语言类似,主要包括以下几种:,beginend ifelse case while . continue.break goto,逻辑控制语句,IFELSE语句,SQL中的IF-ELSE语句 IF (条件) BEGIN 语句1 语句2 END ELSE BEGIN 语句1; 语句2; END,ELSE是可选部分 如果有多条语句,才需要BEGIN-END语句块,IF-ELSE示例,问题: 统计并显示本班笔试平均分,如果平均分在70以上,显示“成绩优秀“,并显示前三名学员的考试信息;如果在70以下,显示“本班成绩较差“,并显示后三名学员的考试信息 。,学员成绩表,分析: 第一步,统计平均成绩存入临时变量; 第二步,用IFELSE判断;,IF-ELSE示例,设置输出结果的格式,为了文本消息和输出结果显示在同一窗口,需要设置输出结果的格式,逻辑控制语句,WHILE循环语句,SQL中的WHILE语句 WHILE (条件) BEGIN 语句1 语句2 BREAK END,BREAK表示退出循环 如果有多条语句,才需要BEGIN-END语句块,WHILE示例,问题: 本次考试成绩较差,假定要提分,确保每人笔试都通过。提分规则很简单,先每人都加2分,看是否都通过,如果没有全部通过,每人再加2分,再看是否都通过,如此反复提分,直到所有人都通过为止 。,学员成绩表,分析: 第一步,统计没通过的人数 ; 第二步,如果有人没通过,加分; 第三步,循环判断。,DECLARE n int WHILE(1=1) -条件永远成立 BEGIN SELECT n=COUNT(*) FROM stuMarks WHERE writtenExam0) UPDATE stuMarks -每人加2分 SET writtenExam=writtenExam+2 ELSE BREAK -退出循环 END print 加分后的成绩如下: SELECT * FROM stuMarks,WHILE示例,参考语句,逻辑控制语句,CASEEND多分支语句,CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 ELSE 其他结果 END,CASE-END示例,问题: 采用美国的ABCDE五级打分制来显示笔试成绩。 A级: 90分以上 B级: 8089分 C级: 7079分 D级: 6069分 E级: 60分以下,学员成绩表,print ABCDE五级显示成绩如下: SELECT stuNo, 成绩= CASE WHEN writtenExam60 THEN E WHEN writtenExam BETWEEN 60 AND 69 THEN D WHEN writtenExam BETWEEN 70 AND 79 THEN C WHEN writtenExam BETWEEN 80 AND 89 THEN B ElSE A END FROM stuMarks,CASEEND示例,参考语句,CASE-END课堂练习,课堂练习: 请根据平均分和下面的评分规则,编写T-SQL语句查询学员的成 绩,如上图所示。 优 :90分以上 良 :8089分 中 :7079分 差 :6069分 不及格 :60分以下,学员成绩分析,CASE-END练习答案,USE stuDB GO SELECT 考号=ExamNo,学号=stuNo,笔试=writtenExam,机试=labExam, 平均分=(writtenExam+labExam)/2, 等级=CASE WHEN (writtenExam+labExam)/260 THEN 不及格 WHEN (writtenExam+labExam)/2 BETWEEN 60 AND 69 THEN 差 WHEN (writtenExam+labExam)/2 BETWEEN 70 AND 79 THEN 中 WHEN (writtenExam+labExam)/2 BETWEEN 80 AND 89 THEN 良 ElSE 优 END FROM stuMarks,批处理语句,批处理是包含一个或多个 SQL 语句的组,从应用程序一次性地发送到SQL Server执行 SQL Server 将批处理语句编译成一个可执行单元,此单元称为执行计划。执行计划中的语句每次执行一条,客户端应用程序,SQL Server服务器,批处理语句: 语句1 语句2 GO,批处理语句示例,SELECT * FROM stuInfo SELECT * FROM stuMarks UPDATE stuMarks SET writtenExam=writtenExam+2 GO,GO是批处理的标志,表示SQL Server将这些T-SQL语句编译为一个执行单元,提高执行效率 一般是将一些逻辑相关的业务操作语句,放置在同一批中,这完全由业务需求和代码编写者决定,批处理语句示例,-例如建表语句的末尾必须添加GO CREATE TABLE stuInfo ( ) GO,SQLServer规定:如果是建库、建表语句、以及我们后面学习的存储过程和视图等,则必须在语句末尾添加 GO 批处理标志,课堂综合练习,课堂练习: 则根据如下规则对机试成绩进行反复加分,直到平均分超过85分为止。请编写T-SQL语句实现。 90分以上: 不加分 8089分: 加1分 7079分: 加2分 6069分: 加3分 60分以下: 加5分,加分前,加分后,课堂综合练习答案,SELECT * FROM stuMarks -原始成绩 DECLARE labAvg INT WHILE(1=1) BEGIN UPDATE stuMarks SET labExam= CASE WHEN labExam=85 BREAK END SELECT * FROM stuMarks -加分后的成绩,声明变量,用户临时存放平均分,循环加分,根据机试成绩酌情加分,整个是一个UPDATE语句,获取目前的平均分,判断是否还继续加分,T-SQL语句的综合应用,学员信息表和成绩表,应到人数:5人,实到人数4人,缺考1人,T-SQL语句的综合应用,如何实现?,本次考试的缺考情况,比较笔试平均分和机试平均分,较低者进行循环提分,但提分后最高分不能超过97分 。加分后重新统计通过情况,统计通过率,T-SQL语句的综合应用,1.提示: 使用子查询统计缺考情况: 应到人数:SELECT count(*) FROM stuInfo 实到人数:SELECT count(*) FROM stuMarks,2.提取学员的成绩信息并保存结果,包括学员姓名、学号、笔试成绩、机试成绩、是否通过 1)提取的成绩信息包含两表的数据,所以考虑两表连接,使用左连接( LEFT JOIN ); SELECT stuNameFROM stuInfo LEFT JOIN stuMarks 2)要求新加一列“是否通过(isPass)”,可采用CASE END。为了便于后续的通过率统计,通过则为1,没通过为0 SELECT isPass=CASE WHEN writtenExam=60 THEN 1 ELSE 0 END 3)要求保存提取(查询)的结果,可以使用我们曾学习过的SELECT INTO newTable语句,生成新表并保存数据,T-SQL语句的综合应用,3.比较笔试平均分和机试平均分,对较低者进行循环提分,但提分后最高分不能超过97分: 1) 使用IF语句判断笔试还是机试偏低,决定对笔试还是机试提分; 2) 使用WHILE循环给每个学员加分,缺考的除外,当最高分超过97分时退出循环; 3)因为给每位学员的笔试或机试提分了,有的学员可能提分后刚好通过了,所以需要更新isPass(是否通过)列。 UPDATE newTable SET isPass=CASE WHEN writtenExam=60 and labExam=60 THEN 1 ELSE 0 END,T-SQL语句的综合应用,4.提分后,统计学员的成绩和通过情况: 1)使用别名实现中文字段名,即SELECT 姓名=stuName,学号=stuNo 2)如果某个学员的成绩为NULL(空),则替换为”缺考”,否则原样显示; 3)isPass列中的1替换为是,0替换为否; SELECT ,机试成绩=CASE WHEN labExam IS NULL THEN 缺考 ELSE convert(varchar(5),labExam) END ,是否通过=CASE WHEN isPass=1 THEN 是 ELSE 否 END,T-SQL语句的综合应用,5.提分后统计学员的通过率情况: 1)通过人数:因为通过用1表示,没通过用0表示,所以isPass列的累加和即是通过人数; 2)通过率:同理,isPass列的平均值*100即是通过率;,T-SQL参考语句,/*-本次考试的原始数据-*/ -SELECT * FROM stuInfo -SELECT * FROM stuMarks /*-统计考试缺考情况-*/ SELECT 应到人数=(SELECT count(*) FROM stuInfo) , -应到人数为子查询表达式的别名 实到人数=(SELECT count(*) FROM stuMarks) , 缺考人数=(SELECT count(*) FROM stuInfo)-(SELECT count(*) FROM stuMarks),T-SQL参考语句,/*-统计考试通过情况,并将结果存放在新表newTable中-*/ IF EXISTS(SELECT * FROM sysobjects WHERE name=newTable) DROP TABLE newTable SELECT stuName,stuInfo.stuNo,writtenExam ,labExam , isPass=CASE WHEN writtenExam=60 and labExam=60 THEN 1 ELSE 0 END INTO newTable FROM stuInfo LEFT JOIN stuMarks ON stuInfo.stuNo=stuMarks.stuNo -SELECT * FROM newTable -查看统计结果,可用于调试,T-SQL参考语句,/*-酌情加分:比较笔试和机试平均分,决定加哪门-*/ DECLARE avgWritten numeric(4,1) DECLARE avgLab numeric(4,1) SELECT avgWritten=AVG(writtenExam) FROM newTable WHERE writtenExam IS NOT NULL SELECT avgLab=AVG(labExam)FROM newTable WHERE labExam IS NOT NULL IF avgWritten=97 BREAK END ELSE 略 -循环给笔试加分,最高分不能超过97分,T-SQL参考语句,-因为提分,所以需要更
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 天门历史中考试题及答案
- 2025年高处安装、维护、拆除高处作业(复审)模拟考试题库试卷及答案
- 药品调剂与管理办法
- 绿化施工及管理办法
- 装饰装修咨询管理办法
- 行政中心前台管理办法
- 业务外协加工管理办法
- 上海旅游安全管理办法
- 中国农药登记管理办法
- it人才队伍管理办法
- 2025年度中国工商银行河南省分行社会招聘120人备考练习试题及答案解析
- (2025年标准)酒店政府采购协议书
- 2025河北保定市唐县招聘社区工作者64人考试备考试题及答案解析
- 2025年菏泽市中考英语试卷真题(含答案及解析)
- 2025至2030年中国物业管理行业市场发展现状及投资前景展望报告
- 苏教版三年级上册数学全册教学设计(配2025年秋新版教材)
- 《2025基本医疗卫生与健康促进法》知识测试题附答案
- 气动阀基础知识培训课件
- 重庆中医药学院2025年第二季度考核招聘工作人员笔试备考题库带答案详解
- 2025奇台县公安局招聘警务辅助人员(144人)考试模拟试题及答案解析
- 2025-2026学年浙教版(2024)初中科学八年级上册教学计划及进度表
评论
0/150
提交评论