数据库系统管理课件(王岚主编)第六章.ppt
- 文档编号:10133853
- 上传时间:2023-05-23
- 格式:PPT
- 页数:153
- 大小:1.50MB
数据库系统管理课件(王岚主编)第六章.ppt
《数据库系统管理课件(王岚主编)第六章.ppt》由会员分享,可在线阅读,更多相关《数据库系统管理课件(王岚主编)第六章.ppt(153页珍藏版)》请在冰点文库上搜索。
数据库基础,第六章T-SQL语言程序设计,数据库基础,【本章要点】,本章将介绍T-SQL(Transact-SQL)程序设计的基本知识。
T-SQL作为嵌入在SQLServer中的结构化查询语言,对标准SQL进行了扩展,功能强大、简单易学。
同其他程序设计语言一样,T-SQL也有自己的数据类型、运算符、表达式以及流程控制语句等相关语法要求,本章将对这些内容进行详细的介绍。
数据库基础,第六章T-SQL语言程序设计,6.1数据类型、常量和变量6.2运算符和表达式6.3流程控制语句6.4函数,数据库基础,6.1数据类型、常量和变量,6.1.1数据类型6.1.2常量6.1.3变量,数据库基础,6.1.1数据类型,从大的方面来说SQLServer2005中包括系统数据类型和用户自定义数据类型。
在前面的章节中对系统数据类型已经进行了详细的介绍,这部分将只介绍用户自定义数据类型。
用户自定义数据类型基于系统提供的基本数据类型,并不是一种真正意义上的数据类型,只是提供了一种提高数据库内部元素和基本数据类型之间一致性的机制。
通过使用用户自定义数据类型能够简化对常用规则和默认值的管理。
数据库基础,1.创建用户自定义数据类型,在SQLServer中可利用系统存储过程和使用图形化界面两种方式来创建用户自定义数据类型。
(1)使用系统存储过程来创建用户自定义数据类型命令格式如下:
sp_addtypetypename=type,phystype=system_data_type,nulltype=null_type,owner=owner_name,数据库基础,1.创建用户自定义数据类型,各参数的含义如下:
typename=type:
用户自定义数据类型的名称。
phystype=system_data_type:
用户定义的数据类型所基于的系统数据类型或SQLServer提供的数据类型。
nulltype=null_type:
用户自定义数据类型处理空值的方式。
null_type的取值为NULL、NOTNULL或NONULL,默认值为NULL。
owner=owner_name:
指定新数据类型的创建者或所有者,若没有指定,则为当前用户。
数据库基础,1.创建用户自定义数据类型,例6.1为图书管理数据库创建一个不允许为空值的book_code用户自定义数据类型。
USE图书管理GOEXECsp_addtypebook_code,char(8),NOTNULLGO需要说明的是,在char(8)上加了单引号,是因为它包含了标点符号(括号)。
数据库基础,1.创建用户自定义数据类型,
(2)采用图形化界面来创建用户自定义数据类型仍以为图书管理数据库创建一个不允许为空值的book_code用户自定义数据类型为例进行讲解。
步骤如下:
1、打开MicrosoftSQLServerManagementStudio窗口对象资源管理器窗口数据库图书管理可编程性类型右击类型节点新建用户定义数据类型。
2、如图6.1所示,打开新建用户定义数据类型窗口,在名称字段输入book_code,在数据类型下拉列表中选择char数据类型,在长度框中输入8,保留允许空值为取消复选状态。
数据库基础,1.创建用户自定义数据类型,图6.1新建用户自定义数据类型窗口,数据库基础,1.创建用户自定义数据类型,3、设置完毕后,单击确定按钮,则创建了用户定义数据类型book_code。
数据库基础,2.删除用户自定义数据类型,对于不再使用的用户定义数据类型,可以将其删除。
同创建时一样,删除用户自定义数据类型也可以采用系统存储过程和图形化界面两种方式。
数据库基础,2.删除用户自定义数据类型,
(1)使用系统存储过程删除用户定义数据类型命令格式如下:
sp_droptypetypename=typetype用户自定义数据类型的名称。
数据库基础,2.删除用户自定义数据类型,例6.2删除book_code用户定义数据类型。
USE图书管理GOEXECsp_droptypebook_codeGO,数据库基础,2.删除用户自定义数据类型,
(2)使用图形化界面删除用户定义数据类型,步骤如下:
1、在MicrosoftSQLServerManagementStudio中找到需要删除的用户定义数据类型,在这里的具体操作为打开MicrosoftSQLServerManagementStudio窗口对象资源管理器窗口数据库图书管理可编程性类型用户定义数据类型book_code右击选择删除。
2、出现如图6.2所示的删除对象窗口,单击确定按钮,则将其删除。
数据库基础,2.删除用户自定义数据类型,图6.2删除对象窗口,数据库基础,6.1数据类型、常量和变量,6.1.1数据类型6.1.2常量6.1.3变量,数据库基础,6.1.2常量,在程序运行中值保持不变的数据称为常量。
常量实际上是表示特定数据值的符号,格式取决于具体的数据类型,通常分为:
字符串常量、整型常量、日期时间常量、实型常量、货币常量和全局唯一标识符。
数据库基础,1.字符串常量,字符串常量分为ASCII字符串常量和Unicode字符串常量。
ASCII字符串常量括在单引号内并包含字母数字字符(a-z、A-Z和0-9)以及特殊字符,如感叹号(!
)、at符()和数字号(#)等。
数据库基础,1.字符串常量,如果已为某个连接将QUOTED_IDENTIFIER选项设置成OFF,则字符串也可以使用双引号括起来,但MicrosoftSQL本机客户端提供程序和ODBC驱动程序将自动使用SETQUOTED_IDENTIFIERON。
因此建议使用单引号。
如果单引号中的字符串包含一个嵌入的引号,可以使用两个单引号表示嵌入的单引号。
对于嵌入在双引号中的字符串则不需要这样做。
空字符串用中间没有任何字符的两个单引号表示。
数据库基础,1.字符串常量,引号表示。
ASCII字符串常量示例:
helloyoursbookXis50%,数据库基础,1.字符串常量,Unicode字符串的格式与ASCII字符串相似,但它前面有一个N标识符(N代表SQL-92标准中的区域语言),并且N前缀必须是大写字母。
将上面的ASCII字符串常量改为Unicode字符串常量,则如下所示:
NhelloNyoursbookNXis50%,数据库基础,2.整型常量,按照整型常量的不同表示方式,又可分为二进制整型常量和十进制整型常量。
(1)二进制整型常量二进制常量具有前辍0x,通常采用十六进制数字字符串表示。
这些常量不使用引号括起。
例如:
0xEA0x23EF0x(表示空的常量),数据库基础,2.整型常量,
(2)十进制整型常量十进制整型常量即不带小数点的十进制数,且不需要使用引号括起来。
例如:
2376-1200+3775,数据库基础,3.日期时间常量,日期时间常量用单引号将表示日期时间的字符串括起来构成。
SQLServer中提供了专门的日期和时间数据类型,可以识别多种格式的日期和时间。
字母日期格式,例:
July20,2009、20-July-2009数字日期格式,例:
5/12/2008、2008-08-25、未分隔的字符串格式,例:
20021207、常见的时间格式如下:
10:
11:
06、08:
25AM,数据库基础,4.实型常量,实型常量有定点表示和浮点表示两种方式,不需要用单引号括起来。
(1)定点表示的实型常量由包含小数点的数字字符串组成。
例如:
1123.6204+23464545.2234-1132456432.10,数据库基础,4.实型常量,
(2)浮点表示的实型常量使用科学记数法来表示。
例如:
305.5E5+223E-3-42E5,数据库基础,5.货币常量,货币常量即为money常量,是以”$”作为前缀的一个整型或实型常量数据,不需扩在单引号中。
例如:
$642923-$370.59+$66578.733,数据库基础,6.全局唯一标识符,全局唯一标识符是SQLServer根据计算机网络适配器地址和主机CPU时钟产生的唯一号码生成的,可以使用字符或二进制字符串格式指定。
例如:
6F9619FF-8B86-D011-B42D-00C04FC964FF0xff19966f868b11d0b42d00c04fc964ff,数据库基础,6.1数据类型、常量和变量,6.1.1数据类型6.1.2常量6.1.3变量,数据库基础,6.1.3变量,变量就是在程序执行过程中其值可以改变的量。
可以利用变量存储程序执行过程中涉及到的数据,如接收用户输入的数值、计算的结果等。
声明变量时需要指定变量名及数据类型,变量名用于标识该变量,数据类型确定了该变量存放值的格式及允许的运算。
数据库基础,6.1.3变量,为变量命名应使用常规标识符,即以字母、下划线(_)、at符号()或数字符号(#)开头,后续接字母、数字、at符号、美元符号($)、下划线的字符序列。
不允许嵌入空格或其他特殊字符。
数据库基础,6.1.3变量,Transact-SQL语言中的变量有两种:
一种是全局变量,它们是由系统预先定义好的;另外一种是局部变量,是由用户根据需要自己定义的。
数据库基础,1.全局变量,全局变量以两个字符开头,由系统定义和维护。
用户只能使用全局变量,不能对它们进行修改。
实际上他们不是变量,不具备变量的行为,而是系统函数,语法遵循函数的规则。
为了和以前的版本兼容,这里仍称为全局变量。
表6.1中列出了几个在SQLServer中常用的全局变量。
数据库基础,1.全局变量,表6.1SQLServer中常用的全局变量,数据库基础,1.全局变量,例6.3使用VERSION查看SQLServer版本信息。
结果如图6.3所示。
SelectVERSION,数据库基础,1.全局变量,图6.3查看版本信息,数据库基础,1.全局变量,例6.4使用ROWCOUNT查看前一条命令影响的行数。
结果如图6.4所示。
SelectROWCOUNT,数据库基础,1.全局变量,图6.4使用ROWCOUNT查看前一条命令影响的行数,数据库基础,2.局部变量,局部变量是用户在使用T-SQL语言的过程中根据需要定义的,它的作用范围仅限于定义此变量的过程内部。
使用DECLARE语句定义局部变量,并在其名称前加上“”标志。
定义局部变量的语法形式如下:
DECLARElocal_variabledata_typen,数据库基础,2.局部变量,其中local_variable:
用于指定局部变量的名称;data_type:
用于设置局部变量的数据类型及其大小,可以是由系统提供数据类型,也可以为用户定义的数据类型,但不能是text、ntext或image数据类型。
数据库基础,2.局部变量,创建局部变量之后,初始值为NULL,如果想要设定局部变量的值,必须使用SET命令或者SELECT命令。
其语法形式为:
SETlocal_variable=expression或者SELECTlocal_variable=expression,.n其中,参数local_variable是给其赋值并声明的局部变量,参数expression是任何有效的SQLServer2005表达式。
数据库基础,2.局部变量,例6.5创建局部变量int_s并赋值,然后输出其值。
结果如图6.5所示。
declareint_sintsetint_s=100selectint_s,数据库基础,2.局部变量,图6.5使用set为局部变量赋值,数据库基础,2.局部变量,例6.6查询读者表,将返回的记录数赋给局部变量M_count,并显示结果。
结果如图6.6所示。
declareM_countintselectM_count=count(*)from读者selectM_count,数据库基础,2.局部变量,图6.6使用select为局部变量赋值,数据库基础,第六章T-SQL语言程序设计,6.1数据类型、常量和变量6.2运算符和表达式6.3流程控制语句6.4函数,数据库基础,6.2运算符和表达式,运算符是一种符号,实现了运算功能,能将数据按照运算符的功能定义进行计算,产生新的结果。
在SOLServer2005中运算符可以分为如下几种:
算术运算符、赋值运算符、位运算符、比较运算符、逻辑运算符、字符串连接运算符和一元运算符。
在SOLServer2005中表达式可以分为简单表达式和复杂表达式两种。
简单表达式可以只是一个常量、变量、列名或函数;复杂表达式是由运算符连接起来的两个或多个简答表达式构成的。
数据库基础,6.2运算符和表达式,6.2.1算数运算符6.2.2赋值运算符6.2.3位运算符6.2.4比较运算符6.2.5逻辑运算符6.2.6字符串连接运算符6.2.7一元运算符6.2.8运算符的优先级,数据库基础,6.2.1算数运算符,算术运算符对两个表达式执行数学运算,这两个表达式可以是任何的数值数据类型。
算术运算符包括+(加)、-(减)、*(乘)、/(除)和%(取模)五种运算。
其中+(加)和(减)运算符也可用于对datetime及smalldatetime值进行算术运算。
数据库基础,6.2.1算数运算符,例6.7将图书表中单价大于20的书籍按九折重新计算单价。
SELECT书名,单价,单价*0.9实际价格FROM图书WHERE单价20,数据库基础,6.2.1算数运算符,运行结果如图6.7所示。
本例通过算术运算计算出了单价大于20的书籍的实际价格。
如果表达式中有多个算术运算符,则先计算乘、除,然后是取模运算,最后是加、减运算。
如果表达式中的算术运算符都有相同的优先顺序,则按从左到右进行计算,括号中的表达式比其他所有运算都要优先进行计算。
数据库基础,6.2.1算数运算符,图6.7使用乘运算计算实际价格,数据库基础,6.2.2赋值运算符,等号(=)是T-SQL中唯一的赋值运算符。
在下面的示例中,将创建一个intNum变量,然后赋值运算符将intNum设置为表达式返回的值。
数据库基础,6.2.2赋值运算符,例6.8使用赋值运算符为变量赋值。
DECLAREintNumintSETintNum=5*(32+7)SELECTintNum执行后intNum中的值为195。
数据库基础,6.2.3位运算符,位运算符在两个表达式之间执行位操作,这两个表达式的类型可以是整型数据或二进制数据(image数据类型除外),但要求在位运算符左右两侧的操作数不能同时是二进制数据。
位运算符包括&(按位与)、|(按位或)、(按位异或),如表6.2所示。
数据库基础,6.2.3位运算符,表6.2位运算符,数据库基础,6.2.3位运算符,例6.9对两个整型变量intNum1和intNum2进行按位运算。
DECLAREintNum1int,intNum2intSETintNum1=8,SETintNum2=-2SELECTintNum1&intNum2与运算,intNum1|intNum2或运算,intNum1intNum2异或运算在T-SQL中先把整形数据转换乘二进制数据,然后再进行按位运算,结果如图6.8。
数据库基础,6.2.3位运算符,图6.8位运算,数据库基础,6.2.4比较运算符,比较运算符(又称关系运算符),用于测试两个表达式的值之间的关系,其运算结果为布尔值,可以为三种之一:
TRUE、FALSE及UNKNOWN。
当SETANSI_NULLS为ON时,带有一个或两个NULL表达式的运算符返回UNKNOWN。
当SETANSI_NULLS为OFF时,上述规则同样适用,但当两个表达式均为NULL时,则等号(=)运算符返回TRUE。
如表6.3所示,位SQLServer2005中可以使用的比较运算符。
数据库基础,6.2.4比较运算符,表6.3比较运算符,数据库基础,6.2.4比较运算符,例6.10查询单价大于15小于30的图书的详细信息。
SELECT*FROM图书WHERE单价15and单价30,数据库基础,6.2.5逻辑运算符,逻辑运算符用于对某些条件进行测试,运算结果返回带有TRUE或FALSE的布尔型值。
如表6.4所示,为SQLServer2005中提供的逻辑运算符。
数据库基础,6.2.5逻辑运算符,表6.4逻辑运算符,数据库基础,6.2.5逻辑运算符,例6.11挑选出由清华大学出版社或者南开大学出版社出版的图书。
SELECT*FROM图书WHERE出版社IN(清华大学出版社,南开大学出版社),数据库基础,6.2.6字符串连接运算符,在SQLServer2005中,允许使用字符串连接运算符加号(+)对两个或多个字符串进行串联。
例6.11字符串连接。
DECLAREvch1varchar(20),vch2varchar(20)SETvch1=helloSETvch2=worldSELECTvch1+vch2运行结果显示为helloworld。
数据库基础,6.2.7一元运算符,一元运算符只对一个表达式执行操作,该表达式可以是任何数字数据类型。
包括+(正)、-(负)和(按位取反)三个运算符。
其中需要说明的是按位取反运算符返回一个数的补数,正能用于整数数据。
数据库基础,6.2.7一元运算符,例6.12对变量num进行一元运算。
DECLAREnumintSETnum=48SELECT+num取正,-num取负,num取反运行结果如图6.9所示。
数据库基础,6.2.7一元运算符,图6.9一元运算,数据库基础,6.2.8运算符的优先级,当一个复杂的表达式有多个运算符时,运算符优先级决定执行运算的先后次序。
执行的顺序会影响到运算的结果。
表6.5中给出了运算符的优先顺序,在一个表达式中按先高(优先级数字小)后低(优先级数字大)的顺序进行运算,相同优先级的运算按自左向右的顺序进行,括号可以改变运算符的优先性,表达式中如果有括号,应先对括号内的部分进行计算。
数据库基础,6.2.8运算符的优先级,表6.5运算符的优先级,数据库基础,第六章T-SQL语言程序设计,6.1数据类型、常量和变量6.2运算符和表达式6.3流程控制语句6.4函数,数据库基础,6.3流程控制语句,与其他的程序设计语言一样,T-SQL提供了流程控制语句,可以进行顺序、分支、循环结构的程序设计。
数据库基础,6.3流程控制语句,6.3.1语句块和注释6.3.2选择控制6.3.3GOTO语句6.3.4RETURN语句6.3.5WAITFOR语句6.3.6循环控制语句,数据库基础,6.3.1语句块和注释,1.BEGINEND语句BEGINEND语句能够将多个T-SQL语句组合成一个语句块,并将它们视为一个单元来处理。
在控制流语句必须执行包含两条或多条T-SQL语句时,就要使用BEGINEND语句来构成语句块。
BEGINEND语句的语法形式如下:
BEGINsql_statement|statement_blockEND,数据库基础,6.3.1语句块和注释,其中sql_statement|statement_block是任和有效的T-SQL语句或语句块。
BEGIN和END语句必须成对使用,任何一个均不能单独使用。
BEGIN语句单独出现在一行中,后跟T-SQL语句块,最后END语句单独出现在一行中,指示语句块的结束。
数据库基础,6.3.1语句块和注释,例6.12显示图书管理数据库中读者表的借书证号为1344005的读者姓名。
DECLAREnamechar(8)BEGINSELECTname=(SELECT姓名FROM读者WHERE借书证号=1344005)SELECTnameEND,数据库基础,6.3.1语句块和注释,本例中BEGINEND语句将两个SELECT语句组合成一个语句块,实现了给变量name赋值并显示。
虽然BEGINEND语句几乎可以用在程序的任何地方,但最常用的地方是在IF或ELSE子句需要包含语句块、CASE函数的元素需要包含语句块以及WHILE循环需要包含语句块时使用。
数据库基础,6.3.1语句块和注释,2注释在程序设计中,注释是必不可少的,加入注释一方面可以有助于对代码的理解,另外也可以方便开发人员调试。
在T-SQL中使用两个连字符(-)加入单行注释,使用一对分隔符/*/加入多行注释。
数据库基础,6.3流程控制语句,6.3.1语句块和注释6.3.2选择控制6.3.3GOTO语句6.3.4RETURN语句6.3.5WAITFOR语句6.3.6循环控制语句,数据库基础,6.3.2选择控制,1IFELSE语句2.CASE语句,数据库基础,1IFELSE语句,IFELSE语句是条件判断语句,当条件表达式成立时执行某段程序,条件不成立时执行另一段程序。
其中,ELSE子句是可选的,最简单的IF语句没有ELSE子句部分。
SQLServer允许嵌套使用IFELSE语句,而且嵌套层数没有限制。
IFELSE语句的语法形式为:
IFBoolean_expressionsql_statement|statement_blockELSEsql_statement|statement_block,数据库基础,1IFELSE语句,例6.13查询图书管理数据库中图书的平均单价是否大于25。
IF(SELECTAVG(单价)FROM图书)25SELECT平均单价大于25元ELSESELECT平均单价不大于25元,数据库基础,2.CASE语句,CASE语句用于多重选择的情况。
可以根据条件表达式的值进行判断,并将其中一个满足条件的结果表达式返回。
CASE语句按照使用形式的不同,可以分为简单CASE语句和搜索CASE语句。
简单CASE语句的语法形式如下:
CASEinput_expressionWHENwhen_expressionTHENresult_expression.nELSEelse_result_expressionEND,数据库基础,2.CASE语句,执行过程为:
先计算CASE后面的表达式的值,然后将其与WHEN后面的表达式逐个进行比较,若相等则返回THEN后面的表达式,否则返回ELSE后面的表达式。
数据库基础,2.CASE语句,例6.14使用简单CASE将图书管理数据库中部分读者的单位信息重新命名。
SELECTCASE单位WHEN计算机系THEN计算机科学与技术系WHEN电子系THEN电子信息系WHEN数学系THEN应用数学系ENDAS单位,姓名FROM读者,数据库基础,2.CASE语句,搜索CASE语句的语法形式如下:
CASEWHENBoolean_expressionTHENresult_expression.nELSEelse_result_expressionEND执行过程为:
如果WHEN后面的逻辑表达式为真,则返回THEN后面的表达式,然后判断下一个逻辑表达式,如果所有的逻辑表达式都为假,则返回ELSE后面的表达式。
数据库基础,2.CASE语句,例6.15使用搜索CASE根据图书的单价范围,显示相应的信息。
SELECT书名,CASEWHEN单价ISNULLTHEN价钱不确定WHEN单价=10and单价20THEN可以接收ELSE太贵了ENDAS售价满意度FROM图书运行结果如图6.10所示。
数据库基础,2.CASE语句,图6.10使用搜索CASE,数据库基础,6.3流程控制语句,6.3.1语句块和注释6.3.2选择控制6.3.3GOTO语句6.3.4RETURN语句6.3.5WAITFOR语句6.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 系统管理 课件 主编 第六
![提示](https://static.bingdoc.com/images/bang_tan.gif)