资源预览内容
第1页 / 共30页
第2页 / 共30页
第3页 / 共30页
第4页 / 共30页
第5页 / 共30页
第6页 / 共30页
第7页 / 共30页
第8页 / 共30页
第9页 / 共30页
第10页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第三章,T-SQL编程,2,回顾 2-1,建库的语法? 补充下列语句: IF EXISTS(SELECT * FROM ? WHERE name=stuDB) DROP DATABASE stuDB 建表的语法? 补充下列语句: IF EXISTS(SELECT * FROM ? WHERE name=stuDB) DROP TABLE stuInfo 解释下列语句的含义? EXEC sp_addlogin zhangsan, 1234 EXEC sp_grantdbaccess zhangsan, zhangsanDBUser,3,回顾 2-2,补充下列语句: 1. ALTER TABLE stuInfo ADD CONSTRAINT ? PRIMARY KEY (stuNo) 2. ALTER TABLE stuInfo ADD CONSTRAINT UQ_stuID ? 3. ALTER TABLE stuInfo ADD CONSTRAINT DF_stuAddress ? 4. ALTER TABLE stuInfo ADD CONSTRAINT CK_stuAge CHECK(?) 5. ALTER TABLE stuMarks ADD CONSTRAINT FK_stuNo FOREIGN KEY ? REFERENCES ?,4,目标,掌握如何定义变量并赋值 掌握如何输出显示数据 掌握IF、WHILE、CASE逻辑控制语句 理解SQL中批处理的概念,5,使用变量,和C语言一样,变量分为: 局部变量: 局部变量必须以标记作为前缀 ,如age 局部变量的使用也是先声明,再赋值 全局变量: 全局变量必须以标记 作为前缀,如version 全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值,6,局部变量,例如: DECLARE name varchar(8) DECLARE seat int,声明局部变量 DECLARE 变量名 数据类型,赋值 SET 变量名 =值 SELECT 变量名 = 值,例如: SET name=张三 SELECT name=stuName FROM stuInfo WHERE stuNo=s25302,必须确保筛选出的记录只有1条,或,7,局部变量示例 2-1,问题:编写T-SQL查找李文才的左右同桌 ?,学员信息表,分析: 第一步,找出“李文才“的座位号; 第二步,李文才的座位号加1或减1,8,局部变量示例 2-2,/*-查找李文才的信息-*/ 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,演示:使用局部变量,参考语句,9,全局变量,全局变量都使用两个标志作为前缀,10,全局变量示例,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的版本,服务器名称,错误号,座位号(自动编号),错误号,11,逻辑控制语句,IFELSE语句,C语言中的if-else语句 if (条件) 语句1; 语句2; else 语句1; 语句2; ,SQL中的IF-ELSE语句 IF (条件) BEGIN 语句1 语句2 END ELSE BEGIN 语句1; 语句2; END,同C语言一样: ELSE是可选部分 如果有多条语句,才需要BEGIN-END语句块,12,IF-ELSE示例 2-1,问题: 统计并显示本班笔试平均分,如果平均分在70以上,显示“成绩优秀“,并显示前三名学员的考试信息;如果在70以下,显示“本班成绩较差“,并显示后三名学员的考试信息 。,学员成绩表,分析: 第一步,统计平均成绩存入临时变量; 第二步,用IFELSE判断;,13,IF-ELSE示例 2-2,14,设置输出结果的格式,为了文本消息和输出结果显示在同一窗口,需要设置输出结果的格式,15,逻辑控制语句,WHILE循环语句,C语言中的while语句 while (条件) 语句1; 语句2; break; ,SQL中的WHILE语句 WHILE (条件) BEGIN 语句1 语句2 BREAK END,同C语言一样: BREAK表示退出循环 如果有多条语句,才需要BEGIN-END语句块,16,WHILE示例 2-1,问题:本次考试成绩较差,假定要提分,确保每人笔试都通过。提分规则很简单,先每人都加2分,看是否都通过,如果没有全部通过,每人再加2分,再看是否都通过,如此反复提分,直到所有人都通过为止 。,学员成绩表,分析:第一步,统计没通过的人数 ;第二步,如果有人没通过,加分;第三步,循环判断。,17,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示例 2-2,参考语句,18,逻辑控制语句,CASEEND多分支语句,CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 ELSE 其他结果 END,19,CASE-END示例 2-1,问题: 采用美国的ABCDE五级打分制来显示笔试成绩。 A级: 90分以上 B级: 8089分 C级: 7079分 D级: 6069分 E级: 60分以下,学员成绩表,20,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示例 2-2,参考语句,21,CASE-END课堂练习,课堂练习:请根据平均分和下面的评分规则,编写T-SQL语句查询学员的成 绩,如上图所示。 优 :90分以上 良 :8089分 中 :7079分 差 :6069分 不及格 :60分以下,学员成绩分析,22,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,23,批处理语句,批处理是包含一个或多个 SQL 语句的组,从应用程序一次性地发送到SQL Server执行 SQL Server 将批处理语句编译成一个可执行单元,此单元称为执行计划。执行计划中的语句每次执行一条,客户端应用程序,SQL Server服务器,批处理语句: 语句1 语句2 GO,24,批处理语句示例,SELECT * FROM stuInfo SELECT * FROM stuMarks UPDATE stuMarks SET writtenExam=writtenExam+2 GO,GO是批处理的标志,表示SQL Server将这些T-SQL语句编译为一个执行单元,提高执行效率 一般是将一些逻辑相关的业务操作语句,放置在同一批中,这完全由业务需求和代码编写者决定,25,批处理语句示例,-例如建表语句的末尾必须添加GO CREATE TABLE stuInfo ( . ) GO,SQLServer规定:如果是建库、建表语句、以及我们后面学习的存储过程和视图等,则必须在语句末尾添加 GO 批处理标志,26,课堂综合练习,课堂练习: 则根据如下规则对机试成绩进行反复加分,直到平均分超过85分为止。请编写T-SQL语句实现。 90分以上: 不加分 8089分: 加1分 7079分: 加2分 6069分: 加3分 60分以下: 加5分,加分前,加分后,27,课堂综合练习答案,SELECT * FROM stuMarks -原始成绩 DECLARE labAvg INT WHILE(1=1) BEGIN UPDATE stuMarks SET labExam= CASE WHEN labExam=85 BREAK END SELECT * FROM stuMarks -加分后的成绩,声明变量,用户临时存放平均分,循环加分,根据机试成绩酌情加分,整个是一个UPDATE语句,获取目前的平均分,判断是否还继续加分,28,总结 3-1,和C语言非常类似,变量的使用也是先声明,然后再赋值。局部变量前必须有“”前缀,全局变量必须 “”前缀。 DECLARE 变量名 数据类型 局部变量赋值的两种方式 SET 变量名 =值 SELECT 变量名 = 值 变量结果输出的两种方式 print语句和select语句 控制流语句提供了条件操作所需要的顺序和逻辑 语句块使用 BeginEnd 批处理可以提高语句执行的效率,批处理结束标志是“GO”,29,总结 3-2,SQL中的IF-ELSE语句 IF (条件) BEGIN 语句1 语句2 END ELSE BEGIN 语句1; 语句2; END,SQL中的WHILE语句 WHILE (条件) BEGIN 语句1 语句2 BREAK END,30,总结 3-3,CASEEND多分支语句 CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 ELSE 其他结果 END,GO 批处理是包含一个或多个 SQL 语句的组,从应用程序一次性地发送到SQL Server执行 SQL S
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号