第6章 T-SQL语言基础课件.ppt
第第6章章 T-SQL语言基础语言基础SQL(Structure Query Language,结构化查询语言,结构化查询语言) 是数据库查询和程是数据库查询和程序设计语言。它结构简洁,功能强大,简单易学,自问世以来,得到了序设计语言。它结构简洁,功能强大,简单易学,自问世以来,得到了广泛的应用。许多成熟商用的关系型数据库,如广泛的应用。许多成熟商用的关系型数据库,如Visual Foxpro、Access、Oracle和和Sybase等,都支持等,都支持SQL。学习和掌握学习和掌握SQL,不仅对学习,不仅对学习SQL Server数据库系统具有重要作用,数据库系统具有重要作用,而且能为学习其他关系数据库系统奠定扎实的基础。而且能为学习其他关系数据库系统奠定扎实的基础。随着随着Microsoft SQL Server版本的演进,从标准版本的演进,从标准SQL衍生出的衍生出的T-SQL(Transact-SQL)变得独立而且功能强大,拥有众多用户,是解决各种)变得独立而且功能强大,拥有众多用户,是解决各种数据问题的主流语言。数据问题的主流语言。我们将在本章研究我们将在本章研究T-SQL中涉及到的基本数据元素,包括常量、变量、中涉及到的基本数据元素,包括常量、变量、表达式和函数,另外还将讨论流程控制语句的使用。表达式和函数,另外还将讨论流程控制语句的使用。 本章的学习目标:本章的学习目标:n了解T-SQL语言的发展过程n理解T-SQL语言的常用数据类型n掌握常量、变量、运算符和表达式n掌握流程控制语句n掌握常用函数6.1 T-SQL语言概述nSQL是是Structure Query Language(结构化(结构化查询语言)的缩写。主要用于完成三个任务:查询语言)的缩写。主要用于完成三个任务:q创建数据库和表创建数据库和表q查询数据库查询数据库q控制数据库的安全控制数据库的安全nT-SQL是在是在SQL的基础上发展起来的一种结构的基础上发展起来的一种结构化查询语言,在使用时,要用到化查询语言,在使用时,要用到SSMS(SQL Server Management Studio)中的查询编辑)中的查询编辑器(器(Query Editor) 6.1.1 T-SQL语言的发展过程语言的发展过程n1970年,首次提出了划时代的数据库系统模型年,首次提出了划时代的数据库系统模型关系模型;关系模型;1972 年,提出了关系代数和关系演算的概念,年,提出了关系代数和关系演算的概念, 定义了关系的并、定义了关系的并、交、差、选择、投影、连接等各种基本运算,为交、差、选择、投影、连接等各种基本运算,为SQL的形成和发的形成和发展奠定了理论基础。展奠定了理论基础。n19751979年,年,IBM公司研制了关系数据库管理系统原型公司研制了关系数据库管理系统原型System R,并实现了,并实现了SQL。n1986年,年,ANSI(美国国家标准化组织美国国家标准化组织)数据库委员会批准数据库委员会批准SQL作为作为关系数据库语言的标准,并正式发表了关系数据库语言的标准,并正式发表了SQL标准文本(简称标准文本(简称SQL-86)。在)。在1987年年SQL获得了获得了ISO的认可,被命名为的认可,被命名为ISO9075-1987。后来这个标准不断地得到了扩充和完善。后来这个标准不断地得到了扩充和完善。nT-SQL是微软公司在是微软公司在SQL Sever数据库管理系统中对数据库管理系统中对SQL标准的标准的扩展,符合扩展,符合SQL标准,但标准,但T-SQL与与SQL并不完全等同。微软的编并不完全等同。微软的编程代码目前所基于的规范是程代码目前所基于的规范是ANSI-92。6.1.1 T-SQL语言特点语言特点n一体化:一体化:T-SQL语言包含语言包含4个组成元素:个组成元素: q数据查询语言(数据查询语言(SELECT语句)语句)q数据操纵语言数据操纵语言DML(如(如INSERT, UPDATE, DELETE语句)语句)q数据定义语言数据定义语言DDL(如(如CREATE, DROP语句)语句)q数据控制语言(如数据控制语言(如COMMIT, ROLLBACK等语句)等语句)n两种使用方式:两种使用方式:q交互方式交互方式q嵌入式方式嵌入式方式n非过程化语言非过程化语言n以记录集合作为操作对象以记录集合作为操作对象n类似于人的思维习惯,容易理解和掌握类似于人的思维习惯,容易理解和掌握6.1.2 T-SQL语法约定语法约定6.1.2 T-SQL语法约定语法约定注释注释n注释(也称注解),是程序代码中不执行的文注释(也称注解),是程序代码中不执行的文本字符串。注释主要描述程序名称、作者名称、本字符串。注释主要描述程序名称、作者名称、变量说明、代码更改日期、算法描述等。使用变量说明、代码更改日期、算法描述等。使用注释对代码进行说明,不仅能够使程序易读易注释对代码进行说明,不仅能够使程序易读易懂,而且有助于日后对程序的管理和维护。懂,而且有助于日后对程序的管理和维护。n在在T-SQL中,可以使用两种类型的注释字符:中,可以使用两种类型的注释字符:q注释符注释符“-”用于单行注释用于单行注释q注释符注释符“/* */”,可以用于注释多行文字,可以用于注释多行文字【例例6-1】在在T-SQL中使用注释中使用注释步骤:步骤:(1)在)在SSMS的的“标准标准”工具栏上,选择工具栏上,选择“新建查新建查询询”。(2)在查询编辑器中输入)在查询编辑器中输入T-SQL代码代码(3)按)按F5键或键或Ctrl+E组合键或单击组合键或单击“执行执行”查询查询工具栏按钮,执行上面输入的代码工具栏按钮,执行上面输入的代码(4)执行代码)执行代码6.1.2 T-SQL语法约定语法约定系统保留字系统保留字n与其他许多语言类似,与其他许多语言类似,SQL Server 2008使用使用100多个保留关键字来定义、操作或访问数据多个保留关键字来定义、操作或访问数据库和数据库对象库和数据库对象n这些关键字包括这些关键字包括DATABASE、CURSOR、CREATE、INSERT、BEGIN等等n这些保留关键字是这些保留关键字是T-SQL语法的一部分,用于语法的一部分,用于分析和理解分析和理解T-SQL语言。在编写语言。在编写T-SQL语句时,语句时,这些系统保留字以不同颜色标记,方便用户区这些系统保留字以不同颜色标记,方便用户区分。一般地,不要使用这些保留关键字作为对分。一般地,不要使用这些保留关键字作为对象名称或标识符。象名称或标识符。6.2 附加的语言元素附加的语言元素n在在SQL语言中,数据库对象的名称就是其标识语言中,数据库对象的名称就是其标识符。在符。在Microsoft SQL Server系统中,所有系统中,所有的数据库对象都可以有标识符,例如服务器、的数据库对象都可以有标识符,例如服务器、数据库、表、视图、索引、触发器和约束等。数据库、表、视图、索引、触发器和约束等。大多数对象的标识符是必须的,量大多数对象的标识符是必须的,量6.2.1 标识符标识符n1标识符格式:标识符格式:q标识符的首字符必须是下列字符之一。标识符的首字符必须是下列字符之一。q标识符的后续字符可以是以下标识符的后续字符可以是以下3种。种。q标识符不允许是标识符不允许是Transact-SQL的保留字的保留字q不允许嵌入空格或其他特殊字符不允许嵌入空格或其他特殊字符n2标识符分类:标识符分类:qSQL Server将标识符分为以下两种类型将标识符分为以下两种类型:n 常规标识符常规标识符n分隔标识符分隔标识符6.2.2 常量常量n常量是在程序运行过程中值保持不变的量,在常量是在程序运行过程中值保持不变的量,在对数据的操作中,常量被广泛使用。对数据的操作中,常量被广泛使用。n常量的格式取决于它所表示的值的数据类型,常量的格式取决于它所表示的值的数据类型,按照值的不同数据类型,常量分为:按照值的不同数据类型,常量分为:q字符串型常量字符串型常量q数值型常量数值型常量q日期时间型常量日期时间型常量q货币型常量货币型常量6.2.3 变量变量n我们经常需要保存或使用一个不是直接来自于列的值;我们经常需要保存或使用一个不是直接来自于列的值;或者从一行或者一列中提取的值,需要应用于查询中或者从一行或者一列中提取的值,需要应用于查询中的不同位置,这时就需要使用变量。的不同位置,这时就需要使用变量。n在在SQL Server系统中,用户变量也被称为局部变量,系统中,用户变量也被称为局部变量,是指在程序运行过程中随着程序的运行而变化的量。是指在程序运行过程中随着程序的运行而变化的量。其本质是系统开辟的存储空间,用于临时存放单个特其本质是系统开辟的存储空间,用于临时存放单个特定类型的数据值。定类型的数据值。n变量经常使用在批处理和程序中,可以作为计数器计变量经常使用在批处理和程序中,可以作为计数器计算循环执行的次数或控制循环执行的次数;可以保存算循环执行的次数或控制循环执行的次数;可以保存数据值以供控制语句测试;还可以保存存储过程返回数据值以供控制语句测试;还可以保存存储过程返回的数值或函数返回值。的数值或函数返回值。6.2.3 变量变量变量属性变量属性n变量具有以下两个属性:变量名称和变量的值变量具有以下两个属性:变量名称和变量的值(1)变量名称)变量名称n每个变量必须有一个唯一的名称,用来标记系统所开辟的存储空间。每个变量必须有一个唯一的名称,用来标记系统所开辟的存储空间。n变量的命名规则如下:变量的命名规则如下:q第一个字符必须是字母、数字、下画线或第一个字符必须是字母、数字、下画线或符号。需要注意的是,符号。需要注意的是,符号符号“”开头的变量表示局部变量、符号开头的变量表示局部变量、符号“”开头的变量表示开头的变量表示全局变量。全局变量。q变量名不能是变量名不能是T-SQL语言的系统保留字(如语言的系统保留字(如IF、ELSE、CONTINUE等),包括大写和小写形式。等),包括大写和小写形式。q变量名中不允许出现空格或其他特殊字符。变量名中不允许出现空格或其他特殊字符。n变量在使用中需要先声明再使用,声明使用变量在使用中需要先声明再使用,声明使用DECLARE语句。语句。语法格式为:语法格式为:DECLARE 变量名称变量名称 变量的数据类型变量的数据类型 ,nq说明说明:q为表示局部变量,变量名称的第一个字符必须是为表示局部变量,变量名称的第一个字符必须是q所有变量在声明后均设置初值为所有变量在声明后均设置初值为NULL6.2.3 变量变量变量属性(续)变量属性(续)(2) 变量的值变量的值n变量的值即变量名称所代表的内存空间中所存放的数据值。变量的值即变量名称所代表的内存空间中所存放的数据值。n需要由赋值语句将值赋给变量。有两种为变量赋值的方式:需要由赋值语句将值赋给变量。有两种为变量赋值的方式:q使用使用SET语句直接为变量赋值语句直接为变量赋值q使用使用SELECT语句选择表中值来为变量赋值。语句选择表中值来为变量赋值。n语法格式如下:语法格式如下:q格式格式1使用使用SET语句赋值:语句赋值:SET 变量名称变量名称=表达式表达式q格式格式2使用使用SELECT语句赋值:语句赋值:SELECT 变量名称变量名称=表达式表达式 ,nn说明:说明:q表达式可以是任何有效的表达式可以是任何有效的SQL表达式;表达式;q一个一个SELECT语句可以给多个变量赋值,而一个语句可以给多个变量赋值,而一个SET语句一次只能语句一次只能给一个变量赋值。给一个变量赋值。【例例6-2】用赋值语句分别定义两个整型变量用赋值语句分别定义两个整型变量x和和y。使。使x的值为的值为20,y的值为的值为5,计算并显示,计算并显示x,y,3x +4y,xy,和,和x /y的值的值nT-SQL语句为:语句为:DECLARE X INT,Y INTSET X=20SET Y=5SELECT x,y,3*x +4*y,x*y,x /y6.3 运算符和表达式运算符和表达式n表达式是用括号和运算符把常量、变量以及函表达式是用括号和运算符把常量、变量以及函数连接而成的式子,表达式具有计算、判断和数连接而成的式子,表达式具有计算、判断和数据类型转换等作用。数据类型转换等作用。n运算符是对数据进行各种操作的符号。运算符是对数据进行各种操作的符号。SQL Server 2008提供以下几类运算符:提供以下几类运算符:q算术运算符算术运算符q关系运算符关系运算符q逻辑运算符逻辑运算符q字符运算符字符运算符q位运算符位运算符6.3.1 算术运算符算术运算符n算术运算符对两个表达式执行数学运算。常用算术运算符对两个表达式执行数学运算。常用算术运算符见表:算术运算符见表: 【例例6-3】计算计算6/5、6.0/5.0、 5/6、 5.0/6.0与与6%5nT-SQL语句为:语句为:SELECT 6/5,6.0/5.0,5/6,5.0/6.0,6%5n执行结果如图所示:执行结果如图所示:6.3.2 关系运算符关系运算符n关系运算符又叫比较运算符。主要用于测试运算符所连接的两个表达关系运算符又叫比较运算符。主要用于测试运算符所连接的两个表达式值是否相同,比较的结果为逻辑值,可以取以下式值是否相同,比较的结果为逻辑值,可以取以下3个值中的一个:个值中的一个:TRUE、FALSE和和UNKNOWN。n常用关系运算符见表常用关系运算符见表6-66.3.3 逻辑运算符逻辑运算符n逻辑运算符用于对某个条件进行测试。运算结果为逻辑运算符用于对某个条件进行测试。运算结果为TRUE或或FALSE。nSQL Server提供的逻辑运算符如表提供的逻辑运算符如表6-7:6.3.4 字符运算符字符运算符n字符运算符只有一个字符运算符只有一个“+”,又称为字符串串联,又称为字符串串联运算符。字符串之间通过运算符。字符串之间通过“+”实现字符串的连实现字符串的连接。接。【例例6-4】进行字符串连接:进行字符串连接:SQL+Server+2008nT-SQL语句为:语句为:SELECT SQL+Server+2008n执行结果为:执行结果为:SQLServer20086.3.5 位运算符位运算符n位运算符在两个表达式之间实现按位操作,这位运算符在两个表达式之间实现按位操作,这两个表达式应该为整数数据类型。运算法则如两个表达式应该为整数数据类型。运算法则如下表:下表:【例例6-5】按位运算,计算按位运算,计算128&129、128|129和和128129qT-SQL语句为:语句为:SELECT 128&129,128|129,128129n执行结果是按位运算得执行结果是按位运算得到的。到的。128的二进制表的二进制表示为:示为:1000 0000,129的二进制表示为的二进制表示为1000 0001。n运算方法为:运算方法为:6.3.6 运算符的优先顺序运算符的优先顺序n当一个复杂的表达式有多个运算符时,运算符当一个复杂的表达式有多个运算符时,运算符优先级决定了运算的先后次序。运算符的优先优先级决定了运算的先后次序。运算符的优先级别如表级别如表6-9所示所示6.3.7 表达式表达式n表达式由标识符、变量、常量、标量函数、子表达式由标识符、变量、常量、标量函数、子查询以及运算符组合起来的。查询以及运算符组合起来的。n表达式可以分为简单表达式和复杂表达式两种表达式可以分为简单表达式和复杂表达式两种类型。类型。nQL语言中包括三种表达式语言中包括三种表达式:q1字段名表达式字段名表达式q2目标表达式目标表达式q3条件表达式条件表达式6.4 流程控制语句流程控制语句nBEGINEND语句n IFELSE语句【例例6-6】设定变量设定变量score,根据,根据score的值判断成绩是的值判断成绩是否合格,并输出结论。否合格,并输出结论。nT-SQL语句为:语句为:DECLARE score INT,a NCHAR(10)SET score=55IF score=60 SET a=N成绩合格成绩合格ELSE SET a=N成绩不合格成绩不合格SELECT a6.4 流程控制语句(续)流程控制语句(续)nCASE语句【例例6-7】建立表建立表temp,输,输入三个成绩,分别指出成入三个成绩,分别指出成绩的等级。绩的等级。T-SQL语句为:语句为:nCREATE TABLE temp (score INT NOT NULL)-创建创建temp表,只有表,只有一个字段一个字段scorenINSERT INTO temp VALUES (60)nINSERT INTO temp VALUES (30)nINSERT INTO temp VALUES (90)-插入插入score值值nSELECT * FROM temp-查看查看temp表的数据表的数据nGOn/*以上内容为创建以上内容为创建temp表的语句,在表的语句,在下一章详细介绍下一章详细介绍*/nSELECT score,nCASE WHEN score=60 AND score85 THEN 良好良好n ELSE 优秀优秀nENDnFROM temp6.4 流程控制语句(续)流程控制语句(续)nGOTO语句语句 nWHILE、 BREAK和和CONTINUE语语nWITFOR语句语句nRETURN语句语句 6.5 函数函数n为提高程序设计的效率,为提高程序设计的效率,SQL Server提供了提供了数百个函数。这些函数本质上是具有特定功能数百个函数。这些函数本质上是具有特定功能的程序。灵活地使用这些函数,可以提高应用的程序。灵活地使用这些函数,可以提高应用程序的效率。程序的效率。nSQL Server提供了许多系统函数,这些函数提供了许多系统函数,这些函数可以完成许多特殊的操作,增强了系统的功能,可以完成许多特殊的操作,增强了系统的功能,提高了系统的易用性。提高了系统的易用性。6.5.1 数学函数n数学函数可以执行对数、指数、三角函数、平方根等数学数学函数可以执行对数、指数、三角函数、平方根等数学运算并返回运算结果。常用的数学函数见下表:运算并返回运算结果。常用的数学函数见下表:【例例6-8】使用常用数学函数计算使用常用数学函数计算-1的绝对值,的绝对值,e的的10次方,次方,5的自然对数,半径为的自然对数,半径为3的圆的面的圆的面积和积和49的平方根。的平方根。nT-SQL语句为:语句为:SELECT N-1绝对值绝对值=ABS(-1), Ne的的10次方次方=EXP(10), N5的自然对数的自然对数=LOG(5), N半径为半径为3的圆的面积的圆的面积=PI()*3*3, N49的平方根的平方根=SQRT(49)6.5.2 字符串函数字符串函数n对输入的字符串进行各种操作的函数被称为字对输入的字符串进行各种操作的函数被称为字符串函数。符串函数。n常用字符串函数见表常用字符串函数见表6-11:【例例6-9】使用常用字符串函数计算使用常用字符串函数计算A的的ASCII,SQL Server的前的前3个字符,个字符,数据库原理数据库原理字符字符串的长度,将串的长度,将China转换为大写字母,将英语转换为大写字母,将英语四级改为英语六级。四级改为英语六级。nT-SQL语句为:语句为:SELECT NA的的ASCII=ASCII(A), NSQL Server的前的前3个字符个字符=LEFT(SQL Server,3), N数据库原理的长度数据库原理的长度=LEN(N数据库原理数据库原理), N将将China转换为大写字母转换为大写字母=UPPER(China), N将英语四级改为英语六级将英语四级改为英语六级=REPLACE(N英语四英语四级级,N四四,N六六)6.5.3 日期和时间函数日期和时间函数nSQL Server 2008提供的日期时间函数不多,提供的日期时间函数不多,但非常实用。但非常实用。n系统提供的常用日期和时间函数见表。系统提供的常用日期和时间函数见表。【例例6-10】使用日期和时间函数显示当前日期,使用日期和时间函数显示当前日期,在当前日期后在当前日期后10天的日期,在当前日期与天的日期,在当前日期与2011年年1月月1日相隔的天数。日相隔的天数。nT-SQL语句为:语句为:SELECT N显示当前系统日期显示当前系统日期=GETDATE(),N在当前日期后在当前日期后10天的日期天的日期=DATEADD(day,10,GETDATE(),N当前日期与当前日期与2011年年1月月1日相隔的天数日相隔的天数=DATEDIFF(DAY,GETDATE(),2011-01-01)