SQL-Server-2012数据库技术与应用10.pptx
《SQL-Server-2012数据库技术与应用10.pptx》由会员分享,可在线阅读,更多相关《SQL-Server-2012数据库技术与应用10.pptx(124页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第10章T-SQL基础SQLServer2012数据库技术与应用目录10.1 SQL与T-SQL10.2 批处理和注释10.3 运算符与表达式10.4 局部变量与全局变量10.5 流程控制语句10.6 函数10.1 SQL与T-SQLSQLSQL全称是“结构化查询语言(Structured Query Language)”,最早是IBM圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言,它的前身是SQUARE语言SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,SQL语言得到了广泛的应用如今无论是像Oracle、Sybase、Informix、
2、SQL server这些大型的数据库管理系统,还是像Visual Foxpro、PowerBuilder这些微机上常用的数据库开发系统,都支持SQL语言作为查询语言10.1 SQL与T-SQLSQLSQL语言具有功能丰富、使用方式灵活、语言简洁易学等突出优点,在计算机工业界和计算机用户中倍受欢迎1986年10月,美国国家标准局(ANSI)的数据库委员会批准了SQL作为关系型数据库语言的美国标准,随着SQL标准化工作的不断进行,相继出现了ANSI SQL-92和ANSI SQL-99等版本其中SQL Server 2000使用的是NSI SQL-92版本,SQL Server 2012使用的是A
3、NSI SQL-99版本10.1 SQL与T-SQLT-SQLTransact-SQL可以缩写为T-SQL,是标准 SQL 程序设计语言的增强版,它是用来让应用程序与 SQL Server 沟通的主要语言Transact-SQL语言是一种交互式查询语言,具有功能强大、简单易学的特点。该语言既允许用户直接查询存储在数据库中的数据,也可以把语句嵌入到某种高级程序设计语言中使用,如可以嵌入到Microsoft Visual C#.NET、Java语言中与任何其他程序设计语言一样,Transact-SQL语言有自己的数据类型、表达式、关键字等。当然,Transact-SQL语言与其他语言相比要简单得多
4、10.1 SQL与T-SQLT-SQLTransact-SQL语言有4个特点一是一体化的特点,集数据定义语言、数据操纵语言、数据控制语言、事务管理语言和附加语言元素为一体二是有两种使用方式,即交互使用方式和嵌入到高级语言中的使用方式三是非过程化语言,只需要提出干什么,不需要指出如何干,语句的操作过程由系统自动完成四是类似于人的思维习惯,容易理解和掌握10.1 SQL与T-SQLT-SQL在Microsoft SQL Server 2012系统中,根据Transact-SQL语言的功能特点,可以把Transact-SQL语言分为5种类型,即数据定义语言、数据操纵语言、数据控制语言、事务管理语言和
5、附加的语言元素10.2 批处理和注释批处理批处理语句我们并不陌生,前面已经用过的“GO”关键字就是批处理的标志他是一条或者多条SQL语句的集合,SQL Server将批处理语句编译成一个可执行单元,此单元称为执行计划每个批处理可以编译成单个执行计划,从而提高执行效率如果批处理包含多条SQL语句,执行这些语句所需的所有优化的步骤将编译在单个执行计划中10.2 批处理和注释批处理在多用户环境中,用户可以同时访问数据库,这将增加网络流量在单用户环境中,用户可能需要对数据库执行多个任务,如更新表以及对SELECT查询语句的结果进行计算等。这需要向数据库发送一系列命令10.2 批处理和注释批处理以一个包
6、含员工详细信息以及工作详细信息的数据库为例,该数据库的一个用户想要根据基本薪水详细信息、工作天数以及休假天数来计算每个员工的收入为了重复执行该任务(因为有很多员工),将这些命令存储在一个文件中,并作为单个执行计划向数据库发送所有命令,将会更加容易以一条命令的方式来处理一组命令的过程被称为批处理10.2 批处理和注释批处理批处理的主要好处就是能简化数据库的管理例如,如果需要更改存储在用户计算机上的现有查询语句,可能需要在所有用户的计算机上进行更改但是,如果将该查询语句集中存储在服务器上,不管是作为文件还是作为存储过程,我们只需要在服务器端更改一次即可这样可以节省大量的时间和精力10.2 批处理和
7、注释批处理示例1USE ManageGO示例2SELECT*FORM BuyersSELECT*FROM WaresUPDATE Wares SET Price=Price+10GO一般将一些逻辑相关的业务操作语句,放置在同一个批处理中,这完全由代码编写者自己决定此时,把这3条语句组成一个执行计划,然后再执行GO关键字标志着批处理的结束10.2 批处理和注释批处理另外,SQL Server 2012规定:如果是建立数据库、表、存储过程和视图等,则必须末尾添加批处理标志“GO”,所以建立表语句的格式为10.2 批处理和注释注释注释是程序代码中不执行的文本字符串(也称为注解)使用注释对代码进行说明
8、,不仅能使程序易读易懂,而且有助于日后的管理和维护注释通常用于记录程序名称、作者姓名和主要代码更改的日期注释还可以用于描述复杂的计算或者解释编程的方法T-SQL注释有两种形式:块注释和行内注释10.2 批处理和注释块注释块注释常常用于头块,头块是脚本对象(如存储过程或者用户自定义函数)之前的一个正式的文本块块注释以斜杠和星号(/*)开始,并以一个星号和斜杠(*/)结束中间的所有文本都是注释,查询解析器会忽略它们头块注释不需要太复杂,但应保持一致块注释必须在同一个批处理中开始和结束10.2 批处理和注释块注释示例/*Procedure Name:usp_InsertWares*Accepts:W
9、areName,Stock,Supplier,Status,UnitPrice*Function:Insert a ware record*Designed by:Tom*Date Created:2012-2-1*/CREATE PROCEDURE usp_InsertWaresWareName varchar(20),Stock int,Supplier varchar(50),Status bit,UnitPrice moneyASINSERT INTO Wares(WareName,Stock,Supplier,Status,UnitPrice)VALUES(WareName,Stoc
10、k,Supplier,Status,UnitPrice)头块应符合标准格式,一般来说,可以包含如下信息脚本对象的名字对象的作用和调用方式等信息设计人员与程序员的名字创建日期修改日期与注解10.2 批处理和注释行内注释行内注释放在脚本体中,用于解释脚本的执行过程和流程注释以两个连接符(-)开头,查询解析器会忽略该行后面的部分行内注释可以放在可执行脚本的后面,也可以另起一行10.2 批处理和注释行内注释示例CREATE TABLE Wares(WareName varchar(20)NOT NULL,-货物名称 Stock int NULL,-库存量 Supplier varchar(50)NUL
11、L,-供应商Status bit NULL,-状态UnitPrice money NULL -价格行内注释的另一个重要作用是为自己和其他开发人员提供临时的开发注解,包括要做的项目和备忘录,以便回过头来添加清理代码,精化功能10.3 运算符与表达式运算符运算符是一些符号,它们能够用来执行算术运算、字符串连接、赋值以及在字段、常量和变量之间进行比较在SQL Server 2012中,运算符主要有以下六大类:算术运算符、赋值运算符、位运算符、比较运算符、逻辑运算符和字符串串联运算符10.3 运算符与表达式表达式表达式是符号和运算符的一种组合,SQL Server 数据库引擎将计算该组合以获得单个数据
12、值简单表达式可以是一个常量、变量、列或标量函数可以用运算符将两个或更多的简单表达式联接起来组成复杂表达式10.3 运算符与表达式算术运算符算术运算符可以在两个表达式上执行数学运算,这两个表达式可以是数字数据类型分类的任何数据类型算术运算符包括加(+)、减()、乘(*)、除(/)和取模(%)(+)和(-)也可以用于日期类型数据USE ManageGOSELECT BuyerName,YEAR(GETDATE()-YEAR(Birthday)AS age FROM BuyersYEAR(GETDATE()可以获得当前日期的年份,YEAR(Birthday)获得出生日期的年份,通过求差可以获得年龄1
13、0.3 运算符与表达式赋值运算符Transact-SQL 中只有一个赋值运算符,即(=)赋值运算符使我们能够将数据值指派给特定的对象另外,还可以使用赋值运算符在列标题和为列定义值的表达式之间建立关系DECLARE Num int -定义整型变量SET Num=30 -定义整型变量PRINT NumGO10.3 运算符与表达式位运算符位运算符使我们能够在整型数据或者二进制数据(image 数据类型除外)之间执行位操作。此外,在位运算符左右两侧的操作数不能同时是二进制数据运算符含义&按位 AND(两个操作数)|按位 OR(两个操作数)按位互斥 OR(两个操作数)位运算符10.3 运算符与表达式位运
14、算符DECLARE Num1 int,Num2 intSET Num1=4SET Num2=6SELECT Num1&Num2 AS Num1&Num2,Num1|Num2 AS Num1|Num2,Num1Num2 AS Num1Num2Num1的二进制数为100,Num2的二进制数为110,因此Num1&Num2的值为二进制100,Num1|Num2的值为二进制110,Num1Num2的值为二进制001,对应的十进制分别是4,6和210.3 运算符与表达式比较运算符比较运算符亦称为关系运算符,用于比较两个表达式的大小或是否相同,除了 text、ntext 或 image 数据类型的表达式外
15、,比较运算符可以用于所有的表达式其比较的结果是布尔值,即TRUE(表示表达式的结果为真)、FALSE(表示表达式的结果为假)以及UNKNOWN10.3 运算符与表达式常见的比较运算符运算符含义=等于,对于计算结果为非空值的参数,如果左侧的参数值等于右侧的参数值,则返回TRUE,否则返回FALSE,如果其中一个参数的计算结果为空值或者两个参数的计算结果均为空值,则该运算符返回空值大于,对于计算结果为非空值的参数,如果左侧的参数值大于右侧的参数值,则返回TRUE,否则返回FALSE,如果其中一个参数的计算结果为空值或者两个参数的计算结果均为空值,则该运算符返回空值=大于等于,对于计算结果为非空值的
16、参数,如果左侧的参数值大于等于右侧的参数值,则返回TRUE,否则返回FALSE,如果其中一个参数的计算结果为空值或者两个参数的计算结果均为空值,则该运算符返回空值=小于等于,对于计算结果为非空值的参数,如果左侧的参数值小于等于右侧的参数值,则返回TRUE,否则返回FALSE,如果其中一个参数的计算结果为空值或者两个参数的计算结果均为空值,则该运算符返回空值!=或者不等于,对于计算结果为非空值的参数,如果左侧的参数值不等于右侧的参数值,则返回TRUE,否则返回FALSE,如果其中一个参数的计算结果为空值或者两个参数的计算结果均为空值,则该运算符返回空值10.3 运算符与表达式比较运算符示例从Ma
17、nage数据库Wares表中查询单价大于1.00元的商品USE ManageGOSELECT*FROM Wares WHERE UnitPrice=1.00GO10.3 运算符与表达式逻辑运算符逻辑运算符可以把多个逻辑表达式连接起来逻辑运算符和比较运算符一样,返回带有 TRUE 或 FALSE 值的布尔数据类型10.3 运算符与表达式常见的逻辑运算符运算符含义ALL如果一组的比较都为 TRUE,那么就为 TRUEAND如果两个布尔表达式都为 TRUE,那么就为 TRUEANY如果一组的比较中任何一个为 TRUE,那么就为 TRUEBETWEEN如果操作数在某个范围之内,那么就为 TRUEEXI
18、STS如果子查询包含一些行,那么就为 TRUEIN如果操作数等于表达式列表中的一个,那么就为 TRUELIKE如果操作数与一种模式相匹配,那么就为 TRUENOT对任何其他布尔运算符的值取反OR如果两个布尔表达式中的一个为 TRUE,那么就为 TRUESOME如果在一组比较中,有些为 TRUE,那么就为 TRUE10.3 运算符与表达式逻辑运算符示例查询Manage数据库Wares表中价格大于2.00元,库存少于30的所有商品USE ManageGOSELECT*FROM Wares WHERE UnitPrice=1.00 AND Stock,=,=,!=,!,!1000)BEGINSET
19、message=有商品单价超过元PRINT messageEND-否则,输出没有工资以上的员工ELSE BEGINSET message=抱歉,并没有商品单价超过元PRINT messageEND10.5 流程控制语句CASE多重分支结构CASE关键字可以根据表达式的真假来确定是否返回某个值,可在允许使用表达式的任何位置使用这一关键字使用CASE语句可以进行多个分支的选择,CASE语句有两种格式CASE 简单表达式,它通过将表达式与一组简单的表达式进行比较来确定结果CASE 搜索表达式,它通过计算一组布尔表达式来确定结果10.5 流程控制语句CASE 简单表达式CASE input_expre
20、ssion WHEN when_expression THEN result_expression .n ELSE else_result_expression END使用简单 CASE 格式时所计算的表达式,input_expression 是任意有效的表达式,input_expression的数据类型必须相同或必须是隐式转换的数据类型使用简单 CASE 格式时要与 input_expression 进行比较的简单表达式。when_expression 是任意有效的表达式。input_expression 及每个 when_expression 的数据类型必须相同或必须是隐式转换的数据类型当
21、 input_expression=when_expression 计算结果为 TRUE,或者 Boolean_expression 计算结果为 TRUE 时返回的表达式。result expression 是任意有效的表达式比较运算计算结果不为 TRUE 时返回的表达式。如果忽略此参数且比较运算计算结果不为 TRUE,则 CASE 返回 NULL。else_result_expression 是任意有效的表达式。else_result_expression 及任何 result_expression 的数据类型必须相同或必须是隐式转换的数据类型10.5 流程控制语句CASE 搜索表达式CAS
22、E WHEN Boolean_expression THEN result_expression .n ELSE else_result_expression ENDWHEN Boolean_expression:使用 CASE 搜索格式时所计算的布尔表达式。Boolean_expression 是任意有效的布尔表达式10.5 流程控制语句使用带有 CASE 简单表达式的SELECT语句任务要求:在 SELECT 语句中,CASE 简单表达式只能用于等同性检查,而不进行其他比较。下面的示例使用 CASE 表达式更改性别的显示,以使性别更易于理解USE ManageGOSELECT BuyerN
23、ame,Gender=CASE BuyerSex WHEN M THEN 男 WHEN F THEN 女 ELSE Wrong END FROM BuyersGO10.5 流程控制语句使用带有 CASE 搜索表达式的SELECT语句任务要求:在 SELECT 语句中,CASE 搜索表达式允许根据比较值替换结果集中的值。下面的示例根据产品的价格范围将标价显示为文本注释USE ManageGOSELECT WareName,Price Range=CASE WHEN UnitPrice=0 THEN not for resale WHEN UnitPrice=50 and UnitPrice=25
24、0 and UnitPrice 1000 THEN Under 1000 ELSE Over$1000 ENDFROM WaresGO10.5 流程控制语句While循环结构While循环结构语句用于设置重复执行SQL语句或语句块的条件只要指定的条件为真,就重复执行语句可以再循环体内设置CONTINUE语句和Break语句Continue语句可以使程序跳过CONTINUE语句后面的语句,回到WHILE循环的第一行命令BREAK语句则使程序完全跳出循环,结束WHILE语句的执行10.5 流程控制语句While循环结构WHILE Boolean_expression sql_statement|s
25、tatement_block|BREAK|CONTINUE 返回 TRUE 或 FALSE 的表达式。如果布尔表达式中含有 SELECT 语句,则必须用括号将 SELECT 语句括起来Transact-SQL 语句或用语句块定义的语句分组。若要定义语句块,请使用控制流关键字 BEGIN 和 END导致从最内层的 WHILE 循环中退出。将执行出现在 END 关键字(循环结束的标记)后面的任何语句。如果嵌套了两个或多个 WHILE 循环,则内层的 BREAK 将退出到下一个外层循环。将首先运行内层循环结束之后的所有语句,然后重新开始下一个外层循环使 WHILE 循环重新开始执行,忽略 CONTI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL Server 2012 数据库技术 应用 10
限制150内