




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十章,T-SQL编程,目标,掌握如何定义变量并赋值掌握如何输出显示数据掌握IF、WHILE、CASE逻辑控制语句理解SQL中批处理的概念,使用变量,变量分为:局部变量:局部变量必须以标记作为前缀,如age局部变量的使用也是先声明,再赋值全局变量:全局变量必须以标记作为前缀,如version全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值,局部变量,例如:DECLAREnamevarchar(8)DECLAREseatint,声明局部变量DECLARE变量名数据类型,赋值SET变量名=值SELECT变量名=值,例如:SETname=张三SELECTname=stuNameFROMstuInfoWHEREstuNo=s25302,必须确保筛选出的记录只有1条,或,局部变量示例,问题:编写T-SQL查找李文才的左右同桌?,学员信息表,分析:第一步,找出“李文才“的座位号;第二步,李文才的座位号加1或减1,局部变量示例,/*-查找李文才的信息-*/DECLAREnamevarchar(8)-学员姓名SETname=李文才-使用SET赋值SELECT*FROMstuInfoWHEREstuName=name/*-查找李文才的左右同桌-*/DECLAREseatint-座位号SELECTseat=stuSeatFROMstuInfo-使用SELECT赋值WHEREstuName=nameSELECT*FROMstuInfoWHERE(stuSeat=seat+1)OR(stuSeat=seat-1)GO,演示:使用局部变量,参考语句,全局变量,全局变量都使用两个标志作为前缀,全局变量示例,printSQLServer的版本+VERSIONprint服务器的名称:+SERVERNAMEINSERTINTOstuInfo(stuName,stuNo,stuSex,stuAge)VALUES(武松,s25328,男,23)-如果大于0表示上一条语句执行有错误print当前错误号+convert(varchar(5),ERROR)print刚才报名的学员,座位号为:+convert(varchar(5),IDENTITY)UPDATEstuinfoSETstuAge=85WHEREstuName=李文才print当前错误号+convert(varchar(5),ERROR)GO,演示:使用全局变量,参考语句,SQLServer的版本,服务器名称,座位号(自动编号),错误号,错误号,逻辑控制语句,T-SQL语言提供了一些可用于改变语句执行顺序的命令,称为流程控制语句.流程控制语句与常见的程序设计语言类似,主要包括以下几种:,beginendifelsecasewhile.continue.breakgoto,逻辑控制语句,IFELSE语句,SQL中的IF-ELSE语句IF(条件)BEGIN语句1语句2ENDELSEBEGIN语句1;语句2;END,ELSE是可选部分如果有多条语句,才需要BEGIN-END语句块,IF-ELSE示例,问题:统计并显示本班笔试平均分,如果平均分在70以上,显示“成绩优秀“,并显示前三名学员的考试信息;如果在70以下,显示“本班成绩较差“,并显示后三名学员的考试信息。,学员成绩表,分析:第一步,统计平均成绩存入临时变量;第二步,用IFELSE判断;,IF-ELSE示例,设置输出结果的格式,为了文本消息和输出结果显示在同一窗口,需要设置输出结果的格式,逻辑控制语句,WHILE循环语句,SQL中的WHILE语句WHILE(条件)BEGIN语句1语句2BREAKEND,BREAK表示退出循环如果有多条语句,才需要BEGIN-END语句块,WHILE示例,问题:本次考试成绩较差,假定要提分,确保每人笔试都通过。提分规则很简单,先每人都加2分,看是否都通过,如果没有全部通过,每人再加2分,再看是否都通过,如此反复提分,直到所有人都通过为止。,学员成绩表,分析:第一步,统计没通过的人数;第二步,如果有人没通过,加分;第三步,循环判断。,DECLAREnintWHILE(1=1)-条件永远成立BEGINSELECTn=COUNT(*)FROMstuMarksWHEREwrittenExam0)UPDATEstuMarks-每人加2分SETwrittenExam=writtenExam+2ELSEBREAK-退出循环ENDprint加分后的成绩如下:SELECT*FROMstuMarks,WHILE示例,参考语句,逻辑控制语句,CASEEND多分支语句,CASEWHEN条件1THEN结果1WHEN条件2THEN结果2ELSE其他结果END,CASE-END示例,问题:采用美国的ABCDE五级打分制来显示笔试成绩。A级:90分以上B级:8089分C级:7079分D级:6069分E级:60分以下,学员成绩表,printABCDE五级显示成绩如下:SELECTstuNo,成绩=CASEWHENwrittenExam=60andlabExam=60THEN1ELSE0END,T-SQL语句的综合应用,4.提分后,统计学员的成绩和通过情况:1)使用别名实现中文字段名,即SELECT姓名=stuName,学号=stuNo2)如果某个学员的成绩为NULL(空),则替换为”缺考”,否则原样显示;3)isPass列中的1替换为是,0替换为否;SELECT,机试成绩=CASEWHENlabExamISNULLTHEN缺考ELSEconvert(varchar(5),labExam)END,是否通过=CASEWHENisPass=1THEN是ELSE否END,T-SQL语句的综合应用,5.提分后统计学员的通过率情况:1)通过人数:因为通过用1表示,没通过用0表示,所以isPass列的累加和即是通过人数;2)通过率:同理,isPass列的平均值*100即是通过率;,T-SQL参考语句,/*-本次考试的原始数据-*/-SELECT*FROMstuInfo-SELECT*FROMstuMarks/*-统计考试缺考情况-*/SELECT应到人数=(SELECTcount(*)FROMstuInfo),-应到人数为子查询表达式的别名实到人数=(SELECTcount(*)FROMstuMarks),缺考人数=(SELECTcount(*)FROMstuInfo)-(SELECTcount(*)FROMstuMarks),T-SQL参考语句,/*-统计考试通过情况,并将结果存放在新表newTable中-*/IFEXISTS(SELECT*FROMsysobjectsWHEREname=newTable)DROPTABLEnewTableSELECTstuName,stuInfo.stuNo,writtenExam,labExam,isPass=CASEWHENwrittenExam=60andlabExam=60THEN1ELSE0ENDINTOnewTableFROMstuInfoLEFTJOINstuMarksONstuInfo.stuNo=stuMarks.stuNo-SELECT*FROMnewTable-查看统计结果,可用于调试,T-SQL参考语句,/*-酌情加分:比较笔试和机试平均分,决定加哪门-*/DECLAREavgWrittennumeric(4,1)DECLAREavgLabnumeric(4,1)SELECTavgWritten=AVG(writtenExam)FROMnewTableWHEREwrittenExamISNOTNULLSELECTavgLab=AVG(labExam)FROMnewTableWHERElabExamISNOTNULLIFavgWritten=97BREAKENDELSE略-循环给笔试加分,最高分不能超过97分,T-SQL参考语句,-因为提分,所以需要更新isPass(是否通过)列的数据UPDATEnewTableSETisPass=CASEWHENwrittenExam=60andlabExam=60THEN1ELSE0END-SELECT*FROMnewTable-可用于调试,/*-显示考试最终通过情况-*/SELECT姓名=stuName,学号=stuNo,笔试成绩=CASEWHENwrittenExamISNULLTHEN缺考ELSEconvert(varchar(5),writtenExam)END,机试成绩=CASEWHENlabExamISNULLTHEN缺考ELSEconvert(varchar(5),labExam)END,是否通过=CASEWHENisPass=1THEN是ELSE否ENDFROMnewTable,T-SQL参考语句,/*-显示通过率及通过人数-*/SELECT总人数=count(*),通过人数=SUM(isPass),通过
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年语文教师综合素质测试试卷及答案
- 2025年特种设备作业人员考试试题及答案
- 2025年初中学业水平考试试卷及答案
- 2025年化学工程师考试试卷及答案
- 2025年个人数据保护法考试试题及答案
- 2025年海洋科学专业考研入学试题及答案
- 2025年英语四六级考试试卷及答案
- 2025年儿童心理健康教育资格考试试题及答案
- 2025年伦理学考试试卷及答案概述
- 2025年物联网工程师考试试卷及答案
- 2023年湖南省长沙市中考语文真题试卷【含答案】
- 2022北京西城区初一期末(下)道法试卷及答案
- (2020)中国儿童阻塞性睡眠呼吸暂停诊断与治疗指南
- GB/T 6075.3-2001在非旋转部件上测量和评价机器的机械振动第3部分:额定功率大于15kW额定转速在120r/min至15000r/min之间的在现场测量的工业机器
- GB/T 2410-2008透明塑料透光率和雾度的测定
- 中央空调的PLC控制
- 公立医院内部控制管理办法课件
- 投标报名登记表格式
- DB4403-T 87-2020 园林绿化管养规范-(高清现行)
- 屋面防水维修工程施工组织设计
- 糖尿病的并发症1
评论
0/150
提交评论