SQL Server数据库项目6教学ppt课件.pptx

上传人:春哥&#****71; 文档编号:87514950 上传时间:2023-04-16 格式:PPTX 页数:92 大小:1.53MB
返回 下载 相关 举报
SQL Server数据库项目6教学ppt课件.pptx_第1页
第1页 / 共92页
SQL Server数据库项目6教学ppt课件.pptx_第2页
第2页 / 共92页
点击查看更多>>
资源描述

《SQL Server数据库项目6教学ppt课件.pptx》由会员分享,可在线阅读,更多相关《SQL Server数据库项目6教学ppt课件.pptx(92页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、SQL Server数据库项目6教学课件PART01项目1初识数据库PART02项目2SQL Server 2017的安装与使用PART03项目3数据库操作PART05项目5查询操作PART06项目6T-SQL语言PART07项目7视图操作目录CONTENTSPART04项目4数据表操作PART08项目8数据完整性PART09项目9存储过程PART10项目10触发器PART11项目11备份与恢复PART12项目12数据库安全PART06项目6T-SQL语言6.1 T-SQL语言基础6.2 使用函数6.3 使用流程控制语句6.4 使用游标6.5 事务控制语句任务6.1 T-SQL语言基础6.1

2、T-SQL语言基础【任【任务描述】描述】T-SQL是一门非过程化语言,在student数据库中,用户和应用程序都是通过T-SQL来操作数据库的。当要执行的任务不能由单一的SQL语句实现时,就要通过某种方式将多条SQL语句组织到一起,共同完成一项任务,即SQL编程。【任【任务分析】分析】对于T-SQL语言,我们要了解它能识别的字或字符、变量的定义方法以及语法规则。完成该任务需要学习以下几方面知识:(1)批处理、脚本和注释。(2)常量和变量。(3)运算符。6.1 T-SQL语言基础【任【任务实现】一、批一、批处理、脚本和注理、脚本和注释步步骤01:单击“新建查询”按钮进入查询编辑器,输入以下语句,

3、运行结果如图6-1所示。可见,几条SQL语句即可组构成了一个批处理程序,GO为批处理结束标志。USE student SELECT*from stu_table SELECT*from Cscore_table GO6.1 T-SQL语言基础步步骤02:右击查询编辑器顶部,在弹出的快捷菜单中选择“保存SQLQuery2.sql”,可以将SQL语句保存到一个文件中,如图6-2所示,扩展名为.SQL,即脚本。下次使用时可通过“文件”菜单打开。6.1 T-SQL语言基础步步骤03:打开文件。在“菜单栏”中依次选择“文件”|“打开”|“文件”,即可在弹出的对话框中选择要打开的SQL文件。6.1 T-S

4、QL语言基础二、常量和二、常量和变量量以下是变量声明及打印程序片段,运行结果如图6-4所示。其中Declare用于声明变量abc为整型变量;Set用于对变量赋值,此处将abc赋值为123;Print用于输出变量的值。Declare abc int -声明变量Set abc=123-为变量赋值Print abc -打印变量GO-运行到此截止6.1 T-SQL语言基础三、运算符三、运算符运算符包括算数运算符、比较运算符、逻辑运算符和位运算符等,下面分别介绍。(1)算术运算符。算术运算符主要用于加、减、乘、除等运算。【例6-1】使用“+”“-”运算符计算加减法。输入如下语句,运算结果如图6-5所示。

5、由于是数学运算,不用打开数据库,系统默认会打开master数据库。SELECT 10+20,0.8+5.9,40-35,0.9-2.86.1 T-SQL语言基础【例【例6-2】使用“*”运算符计算乘法。输入如下语句,运算结果如图6-6所示。SELECT 10*20,0.8*5.9,40*35,0.9*2.86.1 T-SQL语言基础【例【例6-3】使用“/”“%”运算符计算除法和求余运算。输入如下语句,运算结果如图6-7所示。SELECT 10/3,8.8/5.9,10%3,8.8%5.96.1 T-SQL语言基础(2)比较运算符。比较运算符用于对两个操作数进行比较,比较的结果是一个布尔类型,

6、即真假值,分别用TRUE和FALSE表示。比较运算符不能直接用在SELECT语句后面,通常在查询语句中的WHERE子句或T-SQL编程时的语句中作为判断条件语句使用。比较运算符如下:大于 =大于等于 =小于等于 或!=不等于 !不大于6.1 T-SQL语言基础(3)逻辑运算符。逻辑运算主要包括与或非等运算,结果也是布尔类型,主要用在WHERE子句中,具体如下:AND 与运算OR 或运算NOT 非运算ALL 是否满足全部条件ANY 满足其中一个条件IN 判断一个值是否在指定范围内BETWEEN 与AND连用判断一个值是否在一个范围内EXISTS 判断是否能查出数据SOME 同ANY6.1 T-S

7、QL语言基础(4)位运算符。位运算包括按位与、按位或、按位异或,具体如下:&按位与运算|按位或运算 按位异或运算 返回运算数的补数6.1 T-SQL语言基础【例【例6-4】使用“&”“|”“”运算符计算。输入如下语句,运算结果如图6-8所示。其结果是二进制数值,10的二进制是1010,3的二进制数是0011,运算表达式分别是1010&0011=0010,1010|0011=1011,10100011=1001,1010=1011。SELECT 10&3,10|3,103,106.1 T-SQL语言基础(5)运算符优先级。运算符的优先级顺序如下:优先级 运算符1 2*、%、/3+、-、&4=、=

8、、!5、|6NOT7AND8ALL、SOME、ANY、BETWEEN、OR9=(赋值符)6.1 T-SQL语言基础【相关知【相关知识】1.批批处理理批处理是指包含一条或多条T-SQL语句的语句组被一次性执行。是作为一个单元发出的一个和多个SQL语句的集合。以GO为结束标志。批处理中如果某处发生编译错误,整个执行计划都无法执行。批处理具有以下特点:(1)批处理中包含的一条或多条T-SQL语句的语句组,从应用程序一次性发送到SQLserver服务器执行。(2)SQLserver服务器将批处理语句编译成一个单元,这种单元称为执行单元。(3)批处理的过程中某条语句编译出错,则无法执行。若运行出错,则视

9、情况而定。(4)编译批处理时,GO语句作为批处理的结束标志,当编译器读取到GO语句时,会把GO语句前的所有语句当作一个批处理,并将这些语句打包发送给服务器。GO语句本身不是T-SQL语句的组成部分,只是一个表示批处理结束的指令。6.1 T-SQL语言基础2.批批处理必理必须遵守的遵守的规则(1)createdefault,createrule,createtrigger,createprocedure和createview等语句在同一个批处理中只能提交一个。(2)不能在删除一个对象之后,在同一批处理中再次引用这个对象。(3)不能把规则和默认值绑定到表字段或者自定义字段上之后,立即在同一批处理中

10、使用它们。(4)不能定义一个check约束之后,立即在同一个批处理中使用。(5)不能修改表中一个字段名之后,立即在同一个批处理中引用这个新字段。(6)使用Set语句设置的某些Set选项不能应用于同一个批处理中的查询(7)若批处理中第一个语句是执行某个存储过程的execute语句,则execute关键字可以省略。若该语句不是第一个语句,则必须写上。6.1 T-SQL语言基础3.批批处理理结束束语句句批处理以GO作为结束语句,即批处理的结束标志。也就是说当编译器执行到GO时会把GO之前的所有语句当作一个批处理来执行。GO语句和T-SQL语句不可在同一行,在批处理中的第一条语句后执行任何存储过程均必

11、须包含EXECUTE关键字。局部(用户定义)变量的作用域限制在一个批处理中,不可在GO语句后引用。4.脚本脚本脚本是存储在中一系列T-SQL语句,扩展名为.SQL,该文档可以在SSMS中运行。一个脚本可以包含一个或多个批处理,脚本中的GO语句标识一个批处理的结果,如果一个脚本中没有包含任何GO语句,则它被视为一个批处理。6.1 T-SQL语言基础5.注注释注释是程序中不被执行的文本字符串,也称为备注。注释有以下两个作用:(1)对程序进行说明,便于将来维护。(2)可以把程序中暂时不用的语句注释掉,使它们暂时不被执行,等需要这些语句时,再将它们恢复。SQLServer2017支持以下两种类型的注释

12、字符:(1)注释单行:用-(双连字符)。-建立数据库student(2)注释多行:用/*/。友情提醒:可以使用快捷键来添加注释,方法是选中语句后,先按“Ctrl+K”,再按“Ctrl+C”;取消注释时,先按“Ctrl+K”,再按“Ctrl+U”。/*建立数据库数据库名称为student*/6.1 T-SQL语言基础6.常量常量常量是指在程序运行中值不变的量。在SQLServer中,所有基本数据类型表示的值都可以作为常量使用。根据类型不同,常量可分为字符型常量、UNICODE字符串常量、整型常量、日期时间型常量、实型常量、货币常量等。常量的格式取绝于它所表示的值的数据类型。(1)字符型常量。用单

13、引号括起来的由ASCII构成的字符串。包含字母、数字字符(AZ,09,az)以及特殊字符,如感叹号(!),“at”符号和数字字符#。字符串常量示例如下:6.1 T-SQL语言基础(2)UNICODE字符串常量。前面有一个N,如abcde是字符串常量,而Nabcde是UNICODE字符串常量。(N在SQL92规范中表示国际语言,必须大写)。Unicode常量主要用于控制和比较区分大小写。Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。建议使用单括号括住字符串常量。(3)整

14、型常量。整型常量是指不包含小数点的数,不必用单引号括起来,通常包括二进制整型常量、十进制整型常量和十六进制整型常量。其中,二进制整型常量由0,1组成,如11111001。十进制整型常量如2789;十六进制整型常量用0 x开头,如0 x7e,0 x,只有0 x表示空十六进制数。6.1 T-SQL语言基础(4)日期时间型常量。日期和时间常量是datetime类型的数据,且用单引号将日期时间字符串括起来,格式有多种。日期型常量的示例如下,最后两个是时间常量,其余皆是日期常量。2006011206-24-198306/24/19881989-05-23198206241982年10月1日06-24-1

15、98306/24/19881989-05-23198206241982年10月1日08:08:0807:36PM6.1 T-SQL语言基础(5)实型常量。实型常量包含定点和浮点,如165.234,10E23。(6)货币常量。用货币符号开头。如¥542324432.25、$123。SQLServer不强制分组,有时每隔3个数字插一个逗号。6.1 T-SQL语言基础7.变量量变量是SQLServer用来在其语句之间传递数据的方式之一,由系统或用户定义并赋值。分局部变量和全局变量两种,局部变量是指名称以“”字符开始,由用户自己定义和赋值的变量;全局变量是指由系统定义和维护,名称以“”字符开始的变量。

16、(1)局部变量。T-SQL中用DECLARE语句声明变量,并在声明后将变量的值初始化为NULL。DECLARE语句的基本语法格式如下:DECLAREvariable_name date_type,variable_name date_type6.1 T-SQL语言基础其中,variable_name表示局部变量的名字,必须以“”开头。date_type表示指定的数据类型。如果需要,后面还要指定数据长度。局部变量不能是text、ntext或image数据类型。变量声明后,DECLARE语句将变量初始化为NULL,这时,我们可以调用SET语句或SELECT语句为变量赋值。SET语句的基本语法格式如

17、下:SET variable_name=expressionSELECT语句为变量赋值的基本语法格式如下:SELECT variable_name=expression FROM WHEREexpression为有效的SQLServer表达式,它可以是一个常量、变量、函数、列名和子查询等。6.1 T-SQL语言基础(2)全局变量。全局变量不能由用户定义,全局变量不可以赋值,并且在相应的上下文中随时可用。使用全局变量时应该注意以下几点:1)全局变量不是由用户的程序定义的,它们是在服务器级定义的。2)用户只能使用预先定义的全局变量。3)引用全局变量时,必须以“”开头。局部变量名称不能与全局变量名称

18、相同,否则会在应用程序中出现不可预测的结果6.1 T-SQL语言基础【例【例6-5】声明两个变量var1和char1,它们的数据类型分别为int和char。并且分别赋值为100,中国,执行并查看结果,如图6-9所示。declare var1 INT,char1 CHAR(4)-声明var1,char1变量 set var1=100 -给var1变量赋值100set char1=中国 -给char1变量赋值中国select var1 AS 数值,char1 AS 字符串go6.1 T-SQL语言基础【例【例6-6】用SELECT语句将Cscore_table表中的最高学分赋值给变量max,其中P

19、RINT是打印语句,用于打印变量的值,运行结果如图6-10所示。【例例6-6】用SELECT语句将Cscore_table表中的最高学分赋值给变量max,其中PRINT是打印语句,用于打印变量的值,运行结果如图6-10所示。6.1 T-SQL语言基础【例【例6-7】查询档案表File中的职工姓名、性别和职称,并分别取适当的名字。新建查询编辑器,输入如下语句,运行并查看结果,如图6-11所示,包括版本信息和服务器名称。PRINT VERSION -查看版本信息PRINT SERVERNAME -查看服务器名GO6.1 T-SQL语言基础【例【例6-8】查询学生表stu_table中的学生人数,使

20、用SET语句为变量赋值。新建查询编辑器,输入如下语句,运行结果如图6-12所示。USE student DECLARE rows int -声明变量 SET rows=(SELECT COUNT(*)FROM stu_table)PRINT ROWS AS 学生数 -输出各变量的值GO任务6.2 使用函数6.2 使用函数【任【任务描述】描述】对于类似student的数据库,要想顺利完成特定的数据查询或统计,除了要掌握必要的查询方法外,还要能够熟练地使用一些函数。【任【任务分析】分析】函数对于任何程序设计语言来说都是非常关键的组成部分。SQLServer2017提供的函数非常丰富,主要分成两大类

21、:系统函数和用户自定义函数。其中,系统函数包括数学函数、字符串函数、数据类型转换函数以及日期和时间函数等,在系统函数不能满足需要的情况下,用户可以创建、修改和删除用户定义函数。完成该任务需要掌握系统函数和用户自定义函数的应用方法。6.2 使用函数【任【任务实现】步步骤01:单击“新建查询”按钮进入查询分析器,输入如下语句并执行,结果如图6-13所示。PRINT ROUND(134.627,2)PRINT SUBSTRING(纪念抗美援朝战争70年,3,6)PRINT 中国人民志愿军+convert(char,70)+年PRINT year(getdate()GO6.2 使用函数步步骤02:输入

22、以下语句,单击“执行”按钮即可在student数据库中创建一个函数MMAX(),用于计算两个数的最大值。CREATEFUNCTIONMMAX(XREAL,YREAL)RETURNSREALASBEGINDECLAREZREALIFXYSETZ=XELSESETZ=YRETURNZEND6.2 使用函数步步骤03:新建查询,输入如下语句并执行,实现对函数的调用,结果如图6-14所示。PRINT DBO.MMAX(100,90);6.2 使用函数【相关知【相关知识】1.系系统函数函数如同其他编程语言一样,T-SQL语言也提供了丰富的数据操作函数,常用的有数学函数、字符串函数、数据类型转换函数、日期

23、和时间函数等。2.用用户自定自定义函数函数用户在编写程序的过程中,除了可以调用系统函数外,还可以根据应用需要自定义函数,以便用在允许使用系统函数的任何地方。用户自定义函数包括标量函数和表值函数两类,其中表值函数又包括内联表值函数和多语句表值函数。6.2 使用函数(1)标量函数。标量函数用于返回一个确定类型的标量。其返回类型为除TEXT、NTEXT、IMAGE、CURSOR、TIMESTAMP和TABLE类型以外的其他数据类型。函数体语句定义在BEGINEND语句内。创建标量函数的语法格式如下:CREATE FUNCTION function_name(Parameter scalar_ par

24、ameter_data_type=default,n)RETURNS scalar_ return_data_typeASBEGINFunction bodyRETURN scalar _expresstionEND6.2 使用函数(2)内联表值函数。内联表值函数的返回值是一个表。内联表值函数没有由BEGINEND语句括起来的函数体,其返回的表由一个位于RETURN语句中的SELECT语句从数据库中筛选出来。内联表值函数的功能相当于一个参数化的视图。创建内联表值函数的语法格式如下:CREATE FUNCTION function_name(Parameter scalar_ parameter

25、_data_type=default,n)RETURNS TABLEASRETURN select_stmt6.2 使用函数(3)多语句表值函数。多语句表值函数的返回值是一个表。函数体包括多个SELECT语句,并定义在BEGINEND语句内。创建多语句表值函数的语法格式如下:CREATE FUNCTION function_name(Parameter scalar_ parameter_data_type=default,n)RETURNS table_varible_name TABLE()ASBEGINfunction_bodyRETURNEND6.2 使用函数(4)调用用户自定义函数。

26、1)调用标量函数。当调用用户自定义的标量函数时,需提供由两部分组成的函数名称,即所有者.函数名,自定义函数的默认所有者为dbo。可以利用PRINT、SELECT和EXEC语句调用标量函数。2)调用表值函数。表值函数只能通过SELECT语句调用,在调用时可以省略函数的所有者。6.2 使用函数3.函数函数应用用【例【例6-9】输入如下语句进行数值运算。SELECT square(5)-计算5的平方SELECT sqrt(64)-计算64的开方SELECT power(2,5)-求2的5次幂SELECT pi()*square(5)-计算半径为5的圆面积SELECT floor(3.14)-取不大于

27、3.14的最大整数SELECT ceiling(3.14)-取不小于3.14的最大整数6.2 使用函数【例【例6-10】输入如下语句进行三角函数运算。SELECT sin(5)-计算5的正弦值SELECT cos(5)-计算5的余弦值SELECT tan(5)-计算5的正切值SELECT cot(5)-计算5的余切值SELECT asin(0.5)-计算0.5的反正弦值SELECT atan(5)-计算5的反正切值6.2 使用函数【例【例6-11】输入如下语句进行字符串运算。SELECTreplace(good,g,G)-将字符串中的g用G代替SELECTlen(good)-求字符串的长度SE

28、LECTleft(good,2)-取字符串左起的2个字符SELECTright(good,2)-取字符串右起的2个字符SELECTupper(good)-将字符串转换为大写字母SELECTreverse(good)-将字符串逆向输出SELECTcharindex(o,good)-求字符o在字符串中首次出现的位置6.2 使用函数【例【例6-12】输入如下语句完成日期和时间的运算。SELECT getdate()-获取当前日期SELECT year(getdate()-获取当前日期中的年份SELECT month(getdate()-获取当前日期中的月份SELECT day(getdate()-获

29、取当前日期中的日期SELECT datepart(month,getdate()-获取当前日期中的月份SELECT dateadd(day,10,getdate()-当前日期加上10天SELECT dateadd(year,-10,getdate()-当前日期减去10年SELECT datediff(day,getdate(),2001-1-1)-计算当前日期与2001-1-1的时间间隔6.2 使用函数【例【例6-13】输入如下语句完成数据类型转换运算。SELECT convert(varchar(20),getdate(),111)-将当前日期转换为字符串SELECT cast(getdat

30、e()as varchar(25)-将当前日期转换为字符串SELECT convert(decimal(3,1),3.14)-将字符串转换为数值型SELECT cast(3.14 as decimal(3,1)-将字符串转换为数值型6.2 使用函数【例【例6-14】分别用3中不同方法调用标量函数mmax。(1)用PRINT调用函数mmax。PRINT dbo.mmax(44,22)-用PRINT语句调用标量函数(2)用SELECT调用函数mmax。PRINTdbo.mmax(44,22)-用SELECT语句调用标量函数(3)用EXEC调用函数mmax。DECLARE m realEXEC m=

31、dbo.mmax 44,22PRINT m -用EXEC语句调用标量函数6.2 使用函数【例【例6-15】在student数据库中创建一个内联表值函数,先使用usestudent打开数据库,之后输入如下语句,该函数返回指定学号的学生姓名信息。CREATEFUNCTIONfun(idint)RETURNTABLEASRETURNSELECTstudent_id,NameFROMStu_tableWHEREStu_table.student_id=id接着使用如下语句调用该函数,运行结果如图6-15所示。SELECT*FROM dbo.fun(20200101)6.2 使用函数【例【例6-16】创

32、建一个标量函数,计算前5年是哪一年。输入如下语句,创建该函数并运行,结果如图6-16所示。CREATEFUNTIONfun_year()RETURNSINTASBEGINRETURNCAST(YEA(GETDATE()ASINT)-5ENDGOSELECTdbo.fun_year()6.2 使用函数【例【例6-17】创建一个带参数的标量函数,计算指定年份与今年相差多少年。输入如下语句,创建该函数并运行,结果如图6-17所示。CREATE FUNTION fun_year_sub(year int)RETURNS INTASBEGINRETURN year-CAST(YEAR(GETDATE()

33、AS INT)ENDGOSELECT dbo.fun_year_sub(2030)6.2 使用函数【例【例6-18】修改例6-15的函数fun(),除了查询学号、姓名外,再查询班级。输入如下语句,创建该函数并运行,结果如图6-18所示。USE studentGOLATER FUNCTION fun(id int)RETURNS TABLEASRETURN SELECT student_id,Name,Class_id FROM Stu_table WHERE Stu_table.student_id=idGOSELECT*FROM dbo.fun(20200101)6.2 使用函数【例【例6-

34、19】可将不用的函数删除,以释放更多空间。使用如下语句,删除fun_year()函数。USEstudentDROPFUNCTIONdbo.fun_year任务6.3 使用流程控制语句6.3 使用流程控制语句【任【任务描述】描述】编程时少不了对流程进行控制,流程控制语句可以使SQL中的各语句相互连接和关联,以实现更加强大的程序功能。【任【任务分析】分析】T-SQL提供了称为控制流语言的特殊关键字,用于控制T-SQL语句、语句块的执行。按执行方式的不同,可分为顺序语句、分支语句和循环语句。完成该任务需要掌握BEGINEND;IFELSE;CASEEND;WHILE语句的用法。6.3 使用流程控制语

35、句【任【任务实现】步步骤01:单击“新建查询”按钮进入查询分析器,打开student数据库。输入查询语句并执行,结果如图6-19所示。BEGINEND将多条语句括在一起表示一个语句块,统一编译执行。USESTUDENTBEGINSELECT*FROMSTU_TABLESELECT*FROMCSCORE_TABLEENDGO6.3 使用流程控制语句步步骤02:打开查询分析器,输入语句,比较两个数的大小,如图6-20所示。DECLAREaint,bintSETa=100SETb=200IFabPRINTabELSEPRINTab6.3 使用流程控制语句步步骤03:单击“新建查询”按钮进入查询分析器

36、,打开student数据库,输入查询语句并执行,结果如图6-21所示。该查询使用了CASEWHENWHENEND多分支操作。USESTUDENTSELECTNAMEAS姓名,班级=CASEclass_idWHEN计应201THEN计算机应用一班WHEN计应202THEN计算机应用二班ENDFROMstu_tableGO6.3 使用流程控制语句步步骤04:单击“新建查询”按钮进入查询分析器,打开student数据库,输入查询语句并执行,结果如图6-22所示。该查询使用WHILE循环结构产生9个数,并输出这些数,其中CONVERT是类型转换函数,用于转换指定类型的数据。DECLAREiINTSET

37、i=0WHILEi9BEGINSETi=i+1PRINTi=+CONVERT(CHAR(2),i)END6.3 使用流程控制语句【相关知【相关知识】1.BEGINEND语句句该语句用于将多条T-SQL语句封装起来,构成一个语句块。用在IFELSE、WHILE等语句中,使语句块内的所有语句作为一个整体被执行。BEGINEND语句可以嵌套使用。BEGINEND语句的基本格式如下:BEGINSQL语句语句块END其中,语句块是指多条SQL语句。6.3 使用流程控制语句2.IFELSE分支分支语句句IFELSE分支语句是条件判断语句,其中,ELSE子句是可选的,最简单的IF语句没有ELSE子句部分。I

38、F语句主要用于对T-SQL语句进行判断,使用比较频繁。在执行的过程中,如果满足IF后面的条件则执行IF后面的语句,否则不执行。此外,IF还可以同ELSE搭配,当条件不满足时执行ELSE后面的语句。IFELSE语句的基本格式如下:IFSQL语句语句块ELSESQL语句语句块6.3 使用流程控制语句【例【例6-20】使用IF语句判断变量的值是否为偶数,如果为偶数,输出“该数是偶数”,否则输出“该数是奇数”。具体语句如下:DECLAREnumint;SETnum=10;IF(num%2=0)BEGINPRINT该数是偶数;ENDELSEBEGINPRINT该数是奇数;END执行结果如图6-23所示。

39、6.3 使用流程控制语句【例【例6-21】使用IF语句查询数据库中有没有选修数据结构课程的学生。如果有则统计其数量,否则显示“数据库中没有选修数据结构的学生”。运行结果如图6-24所示。USE studentGOIF exists(SELECT*FROM course_table WHERE course_name like 数据结构%)SELECT COUNT(*)AS 选课学生数量 FROM Course_table,stu_table,CScore_table WHERE course_name like 数据结构%and stu_table.Student_id=CScore_tabl

40、e.Student_id and CScore_table.Course_id=Course_table.Course_idELSE PRINT 数据库中没有选修数据结构的学生 6.3 使用流程控制语句【例【例6-22】嵌套IF课程查询,首先查询数据结构的选课学生数量,若无则查询计算机组成课程的选课学生数量,否则打印“数据库中没有选修数据结构与计算机组成的学生”。此例使用了IFELSE(IFELSE)ELSE的嵌套模块。涉及多语句时可以使用BEGINEND将其括起来形成一个语句块。运行结果如图6-25所示。USEstudentGOIFEXISTS(SELECT*FROMcourse_table

41、WHEREcourse_namelike数据结构%)SELECTCOUNT(*)AS选数据结构课程的学生数量FROMCourse_table,stu_table,CScore_tableWHEREcourse_namelike数据结构%andstu_table.Student_id=CScore_table.Student_idandCScore_table.Course_id=Course_table.Course_idELSEIFEXISTS(SELECT*FROMcourse_tableWHEREcourse_namelike计算机组成%)SELECTCOUNT(*)AS选课计算机组成课

42、程的学生数量FROMCourse_table,stu_table,CScore_tableWHEREcourse_namelike计算机%andstu_table.Student_id=CScore_table.Student_idandCScore_table.Course_id=Course_table.Course_idELSEPRINT数据库中没有选修数据结构与计算机组成的学生6.3 使用流程控制语句3.CASE多重分支多重分支CASE表达式是用于计算条件列表并返回多个可能结果的表达式之一。CASE具有两种格式:简单CASE表达式将某个表达式与一组简单表达式进行比较以确定结果;CASE

43、搜索表达式通过计算一组逻辑表达式以确定结果。(1)简单表达式。CASE表达式WHEN表达式的值1THEN返回表达式1WHEN表达式的值2THEN返回表达式2ELSE返回表达式nEND6.3 使用流程控制语句【例【例6-23】使用CASEWHENWHEN显示学生性别提示,运行结果如图6-26所示。USEstudentGOSELECTName,性别=CASESexWHEN男THEN男同学WHEN女THEN女同学ENDFROMstu_table6.3 使用流程控制语句(2)搜索表达式。CASE WHEN 逻辑表达式1 THEN 返回表达式1 WHEN 逻辑表达式2 THEN 返回表达式2 ELSE

44、返回表达式nEND6.3 使用流程控制语句【例【例6-24】使用CASEWHENWHEN显示学生课程分数等级,按照五级分制显示,运行结果如图6-27所示。USE studentGOSELECT Name,course_name,Cscore,等级=CASE WHEN CScore=90 THEN 优秀 WHEN CScore=80 THEN 良好 WHEN CScore=70 THEN 中等 WHEN CScore=60 THEN 及格 WHEN CScore60 THEN 不及格end FROM Cscore_table,stu_table,Course_table WHERE(CScore

45、_table.Student_id=stu_table.Student_id AND Course_table.Course_id=CScore_table.Course_id)AND stu_table.Name=崔伟AND stu_table.Name=崔伟6.3 使用流程控制语句4.循循环语句句WHILECONTINUEBREAK语句用于设置重复执行SQL语句或语句块的条件。只要指定的条件为真,就重复执行语句。WHILE语句的基本格式如下:WHILESQL语句语句块BREAKSQL语句语句块CONTINUESQL语句语句块6.3 使用流程控制语句说明如下:(1)CONTINUE语句可以使

46、程序跳过CONTINUE语句后面的语句,回到WHILE循环的第一行。(2)BREAK语句则使程序完全跳出循环,结束WHILE语句的执行。下面以一个例子说明WHILE结构的用法。(3)如果嵌套了两个或多个WHILE循环,则内层的BREAK将退至下一个外层循环。将首先运行内层循环结束之后的所有语句,然后重新开始下一个外层循环。6.3 使用流程控制语句【例【例6-25】求1+2+3+100的和。DECLAREiint,sint,fintSETi=1SETs=0SETf=1WHILE(i=100)BEGINSETf=f*iSETs=s+fSETi=i+1ENDPRINTs结果为:4037913。读者可

47、以根据此题思路,试着求解1到100之间奇数的和、偶数的和、累乘积(如10!)。6.3 使用流程控制语句5.GOTO语句句GOTO语句将执行语句无条件跳转到标签处,并从标签位置继续处理。GOTO语句和标签可在过程、批处理或语句块中的任何位置使用。其语法格式如下:GOTO label6.WAITFOR6.WAITFOR语句语句WAITFOR语句又称为延迟语句。就是暂停执行一个指定的时间间隔或者到一个指定的时间。其语法格式如下:WAITFOR DELAY time_to_pass /*设定等待时间*/|TIME time_to_execute /*设定等待到某一时刻*/说明:time要等待的时间。可

48、以按datetime数据可接受的格式指定time,也可用局部变量指定此参数。不能指定日期,只能指定时间。6.3 使用流程控制语句【例【例6-26】延迟30秒执行查询。USEstudentGOWAITFORDELAY00:00:30SELECT*FROMstu_table【例【例6-27】在】在时刻刻21:20:00执行行查询。USE studentGOWAITFOR TIME 21:20:00SELECT*FROM stu_table6.3 使用流程控制语句7.TRYCATCH语句句该语句是捕获异常的语句,其语法格式如下:BEGIN TRY SQL语句块 -可能会发生异常的语句END TRYB

49、EGIN CATCH SQL语句块 -发生异常时执行的语句END CATCH6.3 使用流程控制语句表6-7是获取错误信息的函数。下面通过实例讲解。【例例6-28】插入一条学生记录,学号是已经存在的20200101。捕捉错误信息并给出错误号及错误信息,运行结果如图6-28所示。USEstudentBEGINTRYINSERTINTOstu_table(student_id,name)VALUES(20200101,杨白雪)ENDTRYBEGINCATCHERROR_NUMBER()AS错误号,ERROR_MESSAGE()AS错误信息;ENDCATCH;任务6.4 使用游标6.4 使用游标【任

50、【任务描述】描述】应用程序,特别是交互式联机应用程序,并不总能将整个查询的结果集作为一个单元而进行有效的处理。应用程序需要一种机制以便每次处理一行或多行,游标便是这样一个机制。【任【任务分析】分析】游标(cursor)一种数据访问机制,它允许用户单独访问数据行,类似于C语言指针。通常用游标结果集来返回所定义的游标的SELECT语句返回的行集,具体从哪个位置开始,则由某一行的指针即游标位置来指定。完成该任务需要掌握游标结果集和游标位置的应用。6.4 使用游标【任【任务实现】步步骤01:单击“新建查询”按钮进入查询分析器,打开student数据库,输入相关语句并执行,结果如图6-29所示。USEs

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com