资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Transact-SQL,语言主要组成部分,数据定义语言,(,DDL,,,Data Definition Language,),数据操纵语言,(,DML,,,Data,Manipularion,Language,),数据控制语言,(,DCL,,,Data Control Language,),系统存储过程,(,System Stored Procedure,),其它语言元素,数据定义语言,(,DDL),数据定义语言是指用来定义和管理数据库以及数据库中的各种对象的语句,这些语句包括,CREATE,、,ALTER,和,DROP,等语句。在,SQL Server 2000,中,数据库对象包括表、视图、触发器、存储过程、规则、缺省、用户自定义的数据类型等。这些对象的创建、修改和删除等都可以通过使用,CREATE,、,ALTER,、,DROP,等语句来完成。,创建数据库,CREATE DATABASE PERSONNEL_SYS,ON(,NAME=PERSONNEL_INFO,FILENAME=c:Program FilesMicrosoft SQL ServerMSSQLdataPERSONNEL_INFO.MDF,SIZE=10MB,MAXSIZE=50MB,FILEGROWTH=10MB,),LOG ON(,NAME=PERSONNEL_LOG,FILENAME=c:Program FilesMicrosoft SQL ServerMSSQLdataPERSONNEL_LOG.LDF,SIZE=10MB,MAXSIZE=20MB,FILEGROWTH=5MB,),创建数据表,if exists(select*from,dbo.sysobjects,where id=,object_id(Ndbo.BASE_DATA,)and,OBJECTPROPERTY(id,NIsUserTable,)=1)drop table,dbo.BASE_DATA,;,CREATE TABLE,dbo.BASE_DATA,(,WORKER_ID,nvarchar,(15)NOT NULL,ARCHIVES_ID,nvarchar,(10)COLLATE,Chinese_PRC_CI_AS,NULL,WORKER_NAME,nvarchar,(8)COLLATE,Chinese_PRC_CI_AS,NULL,DEPARTMENT_NAME,nvarchar,(15)COLLATE,Chinese_PRC_CI_AS,NULL,SEX,nvarchar,(2)COLLATE,Chinese_PRC_CI_AS,NULL,BIRTHDAY,datetime,NULL,NATIVE_PLACE,nvarchar,(25)COLLATE,Chinese_PRC_CI_AS,NULL,SCHOOL_AGE,nvarchar,(4)COLLATE,Chinese_PRC_CI_AS,NULL,MAJOR,nvarchar,(15)COLLATE,Chinese_PRC_CI_AS,NULL,GRADUATE_SCH,nvarchar,(10)COLLATE,Chinese_PRC_CI_AS,NULL,POLITIC_STATUS,nvarchar,(5)COLLATE,Chinese_PRC_CI_AS,NULL,WORK_TIME,datetime,NULL,COME_TIME,datetime,NULL,LINK_PHONE,nvarchar,(14)COLLATE,Chinese_PRC_CI_AS,NULL,ADDRESS,nvarchar,(20)COLLATE,Chinese_PRC_CI_AS,NULL,PHOTO image NULL,REMARK,nvarchar,(255)COLLATE,Chinese_PRC_CI_AS,NULL,)ON PRIMARY;,结构化查询语言,SQL,一、,数据操纵语言(,DML,),数据操纵语言是指用来查询、添加、修改和删除数据库中数据的语句,这些语句包括,SELECT,、,INSERT,、,UPDATE,、,DELETE,等。在默认情况下,只有,sysadmin,、,dbcreator,、,db_owner,或,db_datawriter,等角色的成员才有权利执行数据操纵语言。,关系数据库的三种关系运算,关系运算中的选择操作,学号姓名性别,061101,王林男,061102,程明男,061109,张强民男,061218,孙研男,学号姓名性别,061101,王林男,061102,程明男,061109,张强民男,061201,马琳琳女,061218,孙研男,关系运算中的投影操作,学号姓名,061101,王林,061102,程明,061109,张强民,061201,马琳琳,061218,孙研,学号姓名性别,061101,王林男,061102,程明男,061109,张强民男,061201,马琳琳女,061218,孙研男,关系运算中的连接操作,学号课程号成绩,06110120183,06110110175,06120130186,学号姓名性别,061101,王林男,061102,程明男,061109,张强民男,061201,马琳琳女,061218,孙研男,学号姓名性别课程号成绩,061101,王林男,20183,061101,王林男,10175,1,、,SELECT,语句,SELECT,语句的语法形式如下:,SELECT,select_list,INTO,new_table,FROM,table_source,WHERE,search_condition,GROUP BY,group_by_expression,HAVING,search_condition,ORDER BY,order_expression,ASC|DESC ,COMPUTE clause,FOR BROWSE,几种常用语句的用法,SELECT,子句用于指定所选择的要查询的特定表中的列,它可以是星号(,*,)、表达式、列表、变量等。,INTO,子句用于指定所要生成的新表的名称。,FROM,子句用于指定要查询的表或者视图,最多可以指定,16,个表或者视图,用逗号相互隔开。,WHERE,子句用来限定查询的范围和条件。,GROUP BY,子句是分组查询子句。,HAVING,子句用于指定分组子句的条件。,单表查询,一、选择表中的若干列,1.,查询指定列,例,1,:查询全体学生的学号与姓名,SELECT,Sno,Sname,FROM Student,例,2,:查询全体学生的姓名、学号、所在系,SELECT,Sname,Sno,Sdept,FROM Student,2.,查询全部列,例,3,:查询全体学生的详细记录,SELECT *FROM Student,3.,查询经过计算的值,SELECT,子句的,不仅可以是表中的属性列,也可以是有关表达式,即可以将查询出来的属性列经过一定的计算后列出结果。,例,4,:查全体学生的姓名及其出生年份,SELECT,Sname,2012-Sage FROM Student,例,5,:查全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名,SELECT,Sname,Year of Birth:,2012-Sage,ISLOWER(Sdept,)FROM Student,二、选择表中的若干,元组,(,行,),1.,消除取值重复的行,例,6,:查所有选修过课的学生的学号,SELECT DISTINCT,Sno,FROM SC,2.,查询满足条件的元组,查询满足条件的元组可以通过,WHERE,子句实现。,查询条件可以是比较,确定范围,确定集合,字符匹配,空值,多重条件。,(1),比较,例,7,:查计算机系全体学生的名单,SELECT,Sname,FROM Student,WHERE,Sdept,=CS;,例,8,:查所有年龄在,20,岁以下的学生姓名及其年龄,SELECT,Sname,Sage FROM Student WHERE Sage=20,),例,9,:查考试成绩有不及格的学生的学号,SELECT DISTINCT,Sno,FROM Course WHERE Grade 60;,(2),确定范围,例,10,:查询年龄在,20,至,23,岁之间的学生的姓名、系别、和年龄,SELECT,Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23,与,BETWEEN.AND.,相对的谓词是,NOT BETWEEN.AND.,。,例,11,:查询年龄不在,20,至,23,岁之间的学生姓名、系别和年龄。,SELECT,Sname,Sdept,Sage FROM StudentWHERE Sage NOT BETWEEN 20 AND 23,(3),确定集合,例,12,:查信息系(,IS,)、,数学系(,MA,),和计算机科学系(,CS,),的学生的姓名和性别,SELECT,Sname,Ssex,FROM Student,WHERE,Sdept,IN(IS,MA,CS),与,IN,相对的谓词是,NOT IN,,,用于查找属性值不属于指定集合的元组。,例,13,:查既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别,SELECT,Sname,Ssex,FROM Student,WHERE,Sdept,NOT IN(IS,MA,CS),(4),字符匹配,谓词,LIKE,可以用来进行字符串的匹配。其一般语法格式如下:,NOT LIKE,可以是一个完整的字符串,也可以含有通配符,%,和,_,。,%(,百分号,),代表任意长度(长度可以为,0,)的字符串。,_(,下横线,),代表任意单个字符。,例,14,:查所有姓刘的学生的姓名、学号和性别,SELECT,Sname,Sno,Ssex,FROM Student WHERE,Sname,LIKE,刘,%,例,15,:查姓“欧阳”且全名为三个汉字的学生的姓名,SELECT,Sname,FROM Student WHERE,Sname,LIKE,欧阳,_;,注意,由于一个汉字占两个字符的位置,所以匹配串欧阳后面需要跟个,_,。,(5),涉及空值的查询,例,20,:某些学生选修某门课程后没有参加考试,所以有选课记录,但没有考试成绩,下面我们来查一下缺少成绩的学生的学号和相应的课程号,SELECT,Sno,Cno,FROM SCWHERE Grade IS NULL;,注意这里的,IS,不能用等号(,=,)代替。,例,21,:查所有有成绩的记录的学生学号和课程号,SELECT,Sno,Cno,FROM SC WHERE Grade IS NOT NULL,(6),多重条件查询,逻辑运算符,AND,和,OR,可用来联结多个查询条件。如果这两个运算符同时出现在同一个,WHERE,条件子句中,则,AND,的优先级高于,OR,,,但用户可以用括号改变优先级。,例,22,:查,CS,系年龄在,20,岁以下的学生姓名,SSELECT,Sname,FROM Student WHERE,Sdept,=CS AND Sage20;,例,12,中的,IN,谓词实际上是多个,OR,运算符的缩写,因此例,12,中的查询也可以用,OR,运算符写成如下等价形式:,SELECT,Sname,Ssex,FROM Student WHERE,Sdept,=IS OR,Sdept,=MA OR,Sdept,=CS,三、对查询结果排序,如果没有指定查询结果的显示顺序,,DBMS,将按其最方便的顺序(通常是元组在表中的先后顺序)输出查询结果。用户也可以用,ORDER BY,子句指定按照一个或多个属性列的升序(,ASC,),或降序(,DESC,),重新排列查询结果,其中升序,ASC,为缺省值。,例,23,:查询选修了,1,号课程的学生的学号及其成绩,查询结果按分数的降序排列,SELECT,Sno,Grade FROM SC WHERE,Cno,=1 ORDER BY Grade DESC,四、使用集函数,为了进一步方便用户,增强检索功能,,SQL,提供了许多集函数,主要包括:,COUNT(DISTINCT|ALL*),统计元组个数,COUNT(DISTINCT|ALL),统计一列中值的个数,SUM(DISTINCT|ALL),计算一列值的总和(此列必须是数值型),AVG(DISTINCT|ALL),计算一列值的平均值(此列必须是数值型),MAX(DISTINCT|ALL),求一列值中的最大值,MIN(DISTINCT|ALL),求一列值中的最小值 如果指定,DISTINCT,短语,则表示在计算时要取消指定列中的重复值。如果不指定,DISTINCT,短语或指定,ALL,短语(,ALL,为缺省值),则表示不取消重复值。,例,25,:查询学生总人数,SELECT COUNT(*)FROM Student;,例,26,:查询选修了课程的学生人数,SELECT COUNT(DISTINCT,Sno,)FROM SC;,例,27,:计算,1,号课程的学生平均成绩,SELECT AVG(Grade)FROM SC,WHERE,Cno,=1;,例,28,:查询学习,1,号课程的学生最高分数,SELECT MAX(Grade)FROM SC WHERE,Cno,=1,五、对查询结果分组,GROUP BY,子句可以将查询结果表的各行按一列或多列取值相等的原则进行分组。对查询结果分组的目的是为了细化集函数的作用对象。如果未对查询结果分组,集函数将作用于整个查询结果,即整个查询结果只有一个函数值。否则,集函数将作用于每一个组,即每一组都有一个函数值。,例,29,:查询各个课程号与相应的选课人数,SELECT,Cno,COUNT(Sno,)FROM SC,GROUP BY,Cno,该,SELECT,语句对,SC,表按,Cno,的取值进行分组,所有具有相同,Cno,值的元组为一组,然后对每一组作用集函数,COUNT,以求得该组的学生人数。,如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,则可以使用,HAVING,短语指定筛选条件。,例,30,:查询信息系选修了,3,门以上课程的学生的学号,SELECT,Sno,FROM SC WHERE,Sdept,=IS GROUP BY,Sno,HAVING COUNT(*)3,WHERE,子句与,HAVING,短语的根本区别在于作用对象不同。,WHERE,子句作用于基本表或视图,从中选择满足条件的元组。,HAVING,短语作用于组,从中选择满足条件的组。,连接查询,例,32,:查询每个学生及其选修课程的情况,学生情况存放在,Student,表中,学生选课情况存放在,SC,表中,所以本查询实际上同时涉及,Student,与,SC,两个表中的数据。,SELECT Student.*,SC.*FROM Student,SC WHERE,Student.Sno,=,SC.Sno,;,复合条件连接,例,35,:查询选修,2,号课程且成绩在,90,分以上的所有学生名单,SELECT,Student.Sno,Sname,FROM Student,SC WHERE,Student.Sno,=,SC.Sno,AND,SC.Cno,=2 AND SC.Grade90;,连接操作除了可以是两表连接,一个表与其自身连接外,还可以是两个以上的表进行连接,后者通常称为多表连接。,例,36,查询每个学生及其选修的课程名其及成绩,SELECT,Student.Sno,Sname,Course.Cname,SC.Grade FROM Student,SC,Course WHERE,Student.Sno,=,SC.Sno,and,SC.Cno,=,Course.Cno,;,嵌套查询,查询选择课程号为,2,的学生名单,SELECT,Sname,FROM StudentWHERE,Sno,IN,(,SELECT,Sno,FROM SC WHERE,Cno,=,2,),查询选修了课程名为,信息系统,的学生学号和姓名,SELECT,Sno,Sname,FROM Student WHERE,Sno,IN SELECT,Sn,FROM SC WHERE,Cno,IN SELECT,Cno,FROM Course WHERE,Cname,=,信息系统,数据更新,一、插入数据,INSERT,INTO (,.)VALUES(,.),如果某些属性列在,INTO,子句中没有出现,则新记录在这些列上将取空值。但必须注意的是,在表定义时说明了,NOT NULL,的属性列不能取空值。否则会出错。,如果,INTO,子句中没有指明任何列名,则新插入的记录必须在每个属性列上均有值。,1,、插入单个元组,例,1,:将一个新学生记录插入,Student,表中,INSERT INTO Student VALUES(95020,陈冬,男,IS,18);,例,2,:插入一条选课记录,(95020,,,1),INSERT INTO,SC(Sno,Cno,)VALUES(95020,1);,新插入的记录在,Grade,列上取空值。,插入子查询结果,对每一个系,求学生的平均年龄,并把结果存入数据库,INSERTINTO,Deptage(Sdept,Avgage,)SELECT,Sdept,AVG(Sage)FROM Student GROUP BY,Sdept,二、修改数据,UPDATE,SET=,=.WHERE,例:将学生,95001,的年龄改为,22,岁,UPDATE Student SET Sage=22 WHERE,Sno,=95001,带子查询的修改语句,例:将计算机科学系全体学生的成绩置零,UPDATE SC SET Grade=0 WHERE CS=(SELETE,Sdept,FROM Student WHERE,Student.Sno,=,SC.Sno,),三、删除数据,DELETEFROM WHERE,例:删除学号为,95019,的学生记录,DELETE FROM Student WHERE,Sno,=95019,带子查询的删除语句,例:删除计算机科学系所有学生的选课记录,DELETE FROM SC WHERE CS=(SELETE,Sdept,FROM Student WHERE,Student.Sno,=,SC.Sno,),五,.,其它语言元素,1,注释,2,变量,3,运算符,4,函数,5,流程控制语句,5.1,注释,注释是程序代码中不执行的文本字符串(也称为注解)。在,SQL Server,中,可以使用两种类型的注释字符:一种是,ANSI,标准的注释符,“,-,”,,它用于单行注释;另一种是,与,C,语言相同的程序注释符号,即,“,/*/,”,。,5.2,变量,变量是一种语言中必不可少的组成部分。,Transact-SQL,语言中有两种形式的变量,一种是用户自己定义的局部变量,另外一种是系统提供的全局变量。,1.,局部变量,局部变量是一个能够拥有特定数据类型的对象,它的作用范围仅限制在程序内部。局部变量可以作为计数器来计算循环执行的次数,或是控制循环执行的次数。另外,利用局部变量还可以保存数据值,以供控制流语句测试以及保存由存储过程返回的数据值等。局部变量被引用时要在其名称前加上标志,“,”,,而且必须先,用,DECLARE,命令定义后才可以使用。,2.,全局变量,全局变量是,SQL Server,系统内部使用的变量,其作用范围并不仅仅局限于某一程序,而是任何程序均可以随时调用。全局变量通常存储一些,SQL Server,的配置设定值和统计数据。用户可以在程序中用全局变量来测试系统的设定值或者是,Transact-SQL,命令执行后的状态值。,使用全局变量时应该注意以下几点:,全局变量不是由用户的程序定义的,它们是在服务器级定义的。,用户只能使用预先定义的全局变量。,引用全局变量时,必须以标记符,“,”,开头。,局部变量的名称不能与全局变量的名称相同,否则会在应用程序中出现不可预测的结果。,5.3,运算符,运算符是一些符号,它们能够用来执行算术运算、字符串连接、赋值以及在字段、常量和变量之间进行比较。在,SQL Server 2000,中,运算符主要有以下六大类:算术运算符、赋值运算符、位运算符、比较运算符、逻辑运算符以及字符串串联运算符。,1,算术运算符,算术运算符可以在两个表达式上执行数学运算,这两个表达式可以是数字数据类型分类的任何数据类型。算术运算符包括加(,+,)、减(,)、乘(*)、除(,/,)和取模(,%,)。,2,赋值运算符,Transact-SQL,中只有一个赋值运算符,即等号(,=,)。赋值运算符使我们能够将数据值指派给特定的对象。另外,还可以使用赋值运算符在列标题和为列定义值的表达式之间建立关系。,3,位运算符,位运算符使我们能够在整型数据或者二进制数据(,image,数据类型除外)之间执行位操作。此外,在位运算符左右两侧的操作数不能同时是二进制数据。,表,2-1,位运算符,运,算,符,含,义,&,(按位,AND,),按位,AND,(,两个操作数)。,|,(按位,OR,),按位,OR,(,两个操作数)。,(按位互斥,OR,),按位互斥,OR,(,两个操作数)。,4,比较运算符,比较运算符用于比较两个表达式的大小或是否相同,其比较的结果是布尔值,即,TRUE,(,表示表达式的结果为真)、,FALSE,(,表示表达式的结果为假)以及,UNKNOWN,。,除了,text,、,ntext,或,image,数据类型的表达式外,比较运算符可以用于所有的表达式。,5,逻辑运算符,逻辑运算符可以把多个逻辑表达式连接起来。逻辑运算符包括,AND,、,OR,和,NOT,等运算符。逻辑运算符和比较运算符一样,返回带有,TRUE,或,FALSE,值的布尔数据类型。,6,字符串串联运算符,字符串串联运算符允许通过加号,(+),进行字符串串联,这个加号即被称为字符串串联运算符。例如对于语句,SELECT,abc,+,def,,,其结果,为,abcdef,。,运算符的优先等级从高到低如下所示,括号:();,乘、除、求模运算符:,*,、,/,、,%,;,加减运算符:,+,、,-,;,比较运算符:,=,、,、,=,、,、,!,;,位运算符:,、,&,、,|,;,逻辑运算符:,NOT,;,逻辑运算符:,AND,;,逻辑运算符:,OR,。,5.4,函数,在,Transact-SQL,语言中,函数被用来执行一些特殊的运算以支持,SQL Server,的标准命令。,Transact-SQL,编程语言提供了三种函数,:,行集函数,:,行集函数可以,在,Transact-SQL,语句中当作表引用。,聚合函数:聚合函数用于对一组值执行计算并返回一个单一的值。,标量函数:标量函数用于对传递给它的一个或者多个参数值进行处理和计算,并返回一个单一的值。,SQL Server,中最常用的几种函数,字符串函数,日期和时间函数,数学函数,转换函数,系统函数,聚合函数,其它函数,字符串函数,字符串函数可以对二进制数据、字符串和表达式执行不同的运算,大多数字符串函数只能用于,char,和,varchar,数据类型以及明确转换成,char,和,varchar,的数据类型,少数几个字符串函数也可以用于,binary,和,varbinary,数据类型。此外,某些字符串函数还能够处理,text,、,ntext,、,image,数据类型的数据。,字符串函数的分类:,基本字符串函数:,UPPER,、,LOWER,、,SPACE,、,REPLICATE,、,STUFF,、,REVERSE,、,LTRIM,、,RTRIM,。,字符串查找函数:,CHARINDEX,、,PATINDEX,。,长度和分析函数:,DATALENGTH,、,SUBSTRING,、,RIGHT,。,转换函数:,ASCH,、,CHAR,、,STR,、,SOUNDEX,、,DIFFERENCE,。,2,日期和时间函数,日期和时间函数用于对日期和时间数据进行各种不同的处理和运算,并返回一个字符串、数字值或日期和时间值。在,SQL Server 2000,中,日期和时间函数的类型如表,2-5,所示;另外,表,2-6,列出了日期类型的名称、缩写形式以及可接受的值。,表,2-5,日期和时间函数的类型,函,数,参,数,DATEADD,(,datepart,number,date),DATEDIFF,(,datepart,date1,date2),DATENAME,(,datepart,date),DATEPART,(,datepart,date),DAY,(date),GETDATE,(),MONTH,(date),YEAR,(date),SELECT DATEPART(month,GETDATE()AS Month Number,运行结果为:,Month Number,-,2,程序清单,2-34,:从日期,03/12/1998,中返回月份数、天数和年份数。,SELECT MONTH(03/12/1998),DAY(03/12/1998),YEAR(03/12/1998),运行结果为:,-,3 12 1998,3,数学函数,数学函数用于对数字表达式进行数学运算并返回运算结果。数学函数可以,对,SQL Server,提供的数字数据(,decimal,、,integer,、,float,、,real,、,money,、,smallmoney,、,smallint,和,tinyint,),进行处理。,程序清单,2-35,:,在同一表达式中使用,CEILING,()、,FLOOR,()、,ROUND,(),函数。,select ceiling(13.4),floor(13.4),round(13.4567,3),运行结果为:,-,14 13 13.4570,4,转换函数,一般情况下,,SQL Server,会自动处理某些数据类型的转换。例如,如果比较,char,和,datetime,表达式,、,smallint,和,int,表达式、或不同长度的,char,表达式,,SQL Server,可以将它们自动转换,这种转换被称为隐性转换。但是,无法由,SQL Server,自动转换的或者是,SQL Server,自动转换的结果不符合预期结果的,就需要使用转换函数做显示转换。转换函数有两个,:,CONVERT,和,CAST,。,CONVERT,和,CAST,函数,CAST(,expression,AS data_type),CONVERT,函数允许用户把表达式从一种数据类型转换成另一种数据类型,还允许把日期转换成不同的样式。其语法形式为:,CONVERT(,data_type,(,length,),expression,style,),程序清单,2-36,:,USE pubs,SELECT title,ytd_sales,FROM titles,WHERE,CAST(ytd_sales,AS char(20)LIKE 15%,AND type=,trad_cook,运行结果为:,Title,ytd_sales,-,Fifty Years in Buckingham Palace Kitchens,15096,5,系统函数,系统函数用于返回有关,SQL Server,系统、用户、数据库和数据库对象的信息。系统函数可以让用户在得到信息后,使用条件语句,根据返回的信息进行不同的操作。与其它函数一样,可以在,SELECT,语句的,SELECT,和,WHERE,子句以及表达式中使用系统函数。,程序清单,2-38,返回,Northwind,数据库的,Employees,表中的首列的名称。,USE,Northwind,SELECT COL_NAME(OBJECT_ID(Employees),1),运行结果为:,EmployeeID,6,聚合函数,聚合函数可以返回整个或者几个列或者一个列的汇总数据,它常用来计算,SELECT,语句查询的统计值。聚合函数经常与,SELECT,语句的,GROUP BY,子句一同使用。,2.5.5,流程控制语句,流程控制语句是指那些用来控制程序执行和流程分支的命令,,在,SQL Server 2000,中,流程控制语句主要用来控制,SQL,语句、语句块或者存储过程的执行流程。,1,IFELSE,语句,IF,ELSE,语句是条件判断语句,其中,,ELSE,子句是可选的,最简单的,IF,语句没有,ELSE,子句部分。,IF,ELSE,语句用来判断当某一条件成立时执行某段程序,条件不成立时执行另一段程序。,SQL Server,允许嵌套使用,IF,ELSE,语句,而且嵌套层数没有限制。,IFELSE,语句的语法形式,IF Boolean_expression,sql_statement,|statement_block ELSE,sql_statement,|statement_block ,2,BEGINEND,语句,BEGIN,END,语句能够将多个,Transact-SQL,语句组合成一个语句块,并将它们视为一个单元处理。在条件语句和循环等控制流程语句中,当符合特定条件便要执行两个或者多个语句时,就需要使用,BEGIN,END,语句,其语法形式为:,BEGIN,sql_statement,|statement_block,END,3,CASE,函数,CASE,函数可以计算多个条件式,并将其中一个符合条件的结果表达式返回。,CASE,函数按照使用形式的不同,可以分为简单,CASE,函数和搜索,CASE,函数,。,1,、,CASE,函数的语法形式,CASE,input_expression,WHEN,when_expression,THEN,result_expression,.,n,ELSE,else_result_expression,END,2,、,搜索,CASE,函数的语法形式,CASE,WHEN,Boolean_expression,THEN,result_expression,.,n,ELSE,else_result_expression,END,4,WHILE,CONTINUE,BREAK,语句,WHILE,CONTINUE,BREAK,语句用于设置重复执行,SQL,语句或语句块的条件。只要指定的条件为真,就重复执行语句。其中,,CONTINUE,语句可以使程序跳过,CONTINUE,语句后面的语句,回到,WHILE,循环的第一行命令。,BREAK,语句则使程序完全跳出循环,结束,WHILE,语句的执行。,结束,WHILE,语句的语法形式为,:,WHILE Boolean_expression,sql_statement,|,statement_block,BREAK,sql_statement,|,statement_block,CONTINUE,5,GOTO,语句,GOTO,语句可以使程序直接跳到指定的标有标识符的位置处继续执行,而位于,GOTO,语句和标识符之间的程序将不会被执行。,GOTO,语句和标识符可以用在语句块、批处理和存储过程中,标识符可以为数字与字符的组合,但必须以,“,:,”,结尾。,GOTO,语句的语法形式,程序清单,2-50,:利用,GOTO,语句求出从,1,加到,5,的总和。,declare sum,int,count,int,select sum=0,count=1,label_1:,select sum=sum+count,select count=count+1,if count=5,goto,label_1,select count sum,6,WAITFOR,语句,WAITFOR,语句用于暂时停止执行,SQL,语句、语句块或者存储过程等,直到所设定的时间已过或者所设定的时间已到才继续执行。,WAITFOR,语句的语法形式为:,WAITFOR DELAY time|TIME time,其中,,DELAY,用于指定时间间隔,,TIME,用于指定某一时刻,其数据类型为,datetime,,,格式为,hh:mm:ss,。,7,RETURN,语句,RETURN,语句用于无条件地终止一个查询、存储过程或者批处理,此时位于,RETURN,语句之后的程序将不会被执行。,RETURN,语句的语法形式为:,RETURN integer_expression,其中,参数,integer_expression,为返回的整型值。存储过程可以给调用过程或应用程序返回整型值。,
展开阅读全文