北大青鸟MY SQL基础教程2_第1页
北大青鸟MY SQL基础教程2_第2页
北大青鸟MY SQL基础教程2_第3页
北大青鸟MY SQL基础教程2_第4页
北大青鸟MY SQL基础教程2_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章

T-SQL回顾数据库设计的概念数据模型实体关系模型数据规范化2目标理解批和批处理的概念编写SQL逻辑控制语句来表示应用逻辑变量的定义与赋值使用SQLServer基本函数编写SQL语句在查询语句中使用基本函数3介绍SQL批处理批处理单个SQL

命令组成一批作为单个

执行计划

进行编译输出结果4批处理定义以一次执行一批命令中的一条命令的方式处理一组命令的过程被称为批处理5批处理示例UsePubsSelect*fromauthorsUpdateauthorssetphone='890451-7366'whereau_lname='White'Go标志着批处理的结束若在这个批中出现了错误,则整个批都不会执行6批处理中的注释注释常用来记录程序名称、作者名称以及对代码进行重要修改的日期。注释可以用于建立代码文档,或者暂时禁用正在诊断的部分T-SQL语句和批处理。注释可以用来描述复杂的计算或用来解释程序设计的方法。7注释方式SQLServer支持下列两种类型的注释方式:1)--(双连字符)

例如:

USENorthwindGO--单行注释2)/*...*/(正斜线-星号字符对)

例如:

SELECT*FROMEmployees

/*这是注释*/8多行注释/**/多行注释不能跨批处理。完整的注释必须包含在一个批处理中。例如,在SQL查询分析器中,GO命令标志着批处理的结束。当实用工具在一行的前两个字节中读取到字符GO时,就会将从上一个GO命令至该行前的所有代码作为一个批处理发送到服务器。9控制语句1-2顺序执行程序控制语句顺序执行流程改变程序10控制语句2-2控制关键字目的BEGIN…END创建语句块。GOTOlabel将流程转到指定标签。IF…ELSE根据指定条件执行不同的几组语句。WHILE当指定条件为TRUE时重复执行语句。BREAK中止执行流并跳出当前的WHILE循环。CONTINUE重新执行WHILE循环。WAITFOR设置语句执行延迟的时间。RETURN无条件退出。11BEGIN...ENDBEGIN...END:一组要执行的T-SQL语句可以包含在BEGIN...END中。

语法:

其中,statement为语句,statement_block为语句块。BEGIN

statement|statement_block

END12IF...ELSEIF...ELSE:可以根据指定的条件来执行不同的

SQL语句。

语法:其中,Boolean_expression为布尔表达式,sql_statement为

SQL语句,

statement_block为语句块。IFBoolean_expression sql_statement|statement_block[ELSE sql_statement|statement_block]13IF语句示例IF(SELECTCOUNT(ORDERID)FROMORDERS)>1BEGINGOTOXENDELSEBEGINSELECT*FROMCUSTOMERSENDSELECT*FROMORDERSX:SELECT*FROMSHIPPERS(SELECTCOUNT(ORDERID)FROMORDERSgroupbytype)>1

14WHILE结构WHILE:可以根据某些条件来执行一条SQL语句或一组语句。只要指定的条件为真,则重复执行该语句。

语法:其中,Boolean_expression为布尔表达式,statement为语句,statement_block为语句块。WHILEBoolean_expression

{statement|statement_block}

[BREAK]

{statement|statement_block

}

[CONTINUE]15BREAK和CONTINUE可以在While循环中使用

CONTINUE

和BREAK关键字来控制语句的执行。USEpubsGOWHILE(SELECTAVG(price)FROMtitles)<$30BEGINUPDATEtitlesSETprice=price*2SELECTMAX(price)FROMtitlesIF(SELECTMAX(price)FROMtitles)>$50BREAKELSECONTINUEENDPRINT'价格太高,市场无法承受'16GOTO关键字GOTO:可以将执行流程改变到由标签指定的位置。系统跳过GOTO关键字之后的语句,并在GOTO语句中指定的标签处继续执行操作。语法:其中label是标签GOTOlabel17RETURNRETURN:可以在任意位置使用RETURN从语句块或过程中退出。系统将不会执行RETURN语句之后的语句。语法:RETURN[integer_expression]其中integer_expression是值为整数的表达式。18课堂练习如果平均价格少于$30,将价格加倍,然后选择最高价。如果最高价少于或等于$50,再次将价格加倍。该循环不断地将价格加倍直到最高价格超过$50,然后退出。(价格price,表名titles)19答案WHILE(SELECTAVG(price)FROMtitles)<$30BEGINUPDATEtitlesSETprice=price*2SELECTMAX(price)FROMtitlesIF(SELECTMAX(price)FROMtitles)>$50BREAKELSECONTINUEEND

20CASE语句CASE:使用CASE关键字可以根据表达式是否为真来返回一个值。该关键字可用于允许使用表达式的任何地方。语法:CASEexpression WHENexpression1THENexpression1 [[WHENexpression2THENexpression2][…]] [ELSEexpression]END其中

expression为表达式。SELECTau_fname,au_lname,CASEstateWHEN'OR'THEN'Oregon'ENDASStateNameFROMauthors示例:21CASE语句-1下面示例在查询结果集内显示每个作者所居住州的全名:SELECTau_fname,au_lname,CASEstateWHEN'CA'THEN'California'WHEN'TN'THEN'Tennessee'WHEN'OR'THEN'Oregon'ENDASStateNameFROMauthorsORDERBYau_lname22使用CASE对多列进行更新-1UPDATEpublishers

SETstate=

CASE

WHENcountry<>"USA"

THEN"--"

ELSEstate

END,

city=

CASE

WHENpub_id="9999"

THEN"LYON"

ELSEcity

END

WHEREcountry<>"USA"OR

pub_id="9999"以这种方式可以用一个命令更新两个或多个列23使用CASE对多列进行更新-2例4-10调整员工工资工作级别为1的上调8%工作级别为2的上调7%工作级别为3的上调6%其它上调5%updateemployeesete_wage=casewhenjob_level=’1’thene_wage*1.08whenjob_level=’2’thene_wage*1.07whenjob_level=’3’thene_wage*1.06elsee_wage*1.05end

24课堂练习已知学生成绩表:姓名数学英语语文张三508070李四806882黄六857890需要得出结果集:姓名最大分数最小分数平均分数张三80(英语)50(数学)66.67李四826876.67黄六907884.3325答案Select姓名,最大分数=casewhen数学>英语and数学>语文thencast(数学asvarchar)+'(数学)'when英语>数学and英语>语文thencast(英语asvarchar)+'(英语)'elsecast(语文asvarchar)+'(语文)'end,

最小分数=casewhen数学<英语and数学<语文thencast(数学asvarchar)+'(数学)'when英语<数学and英语<语文thencast(英语asvarchar)+'(英语)'elsecast(语文asvarchar)+'(语文)'end,

平均分数=cast((数学+英语+语文)/3.0asnumeric(10,2))From学生成绩表26变量SQLServer在T-SQL中支持下列两种类型的变量

全局变量局部变量27全局变量SQLServer中的全局变量都用两个@标记作为前缀。可以使用简单的SELECT查询语句检索任意全局变量的值。SELECT@@VERSIONASSQL_SERVER_VERSION_DETAILS28全局变量列表1-2变量 含义@@IDENTITY 最后一次插入的标识值@@CPU_BUSY 自SQLServer启动至今,系统持续运行的毫秒数。@@CURSOR_ROWS 最近打开的游标中的行数@@DATEFIRST SETDATEFIRST参数的当前值,该参数用于设置一个星期的第一天为哪一天。@@ERROR 最后一个T-SQL错误的错误号@@FETCH_STATUS如果最后一次提取的状态为成功状态,则为0。如果出错,则为-129全局变量列表2-2变量含义@@IDENTITY 最后一次插入的标识值@@LANGUAGE 当前使用的语言的名称@@MAX_CONNECTIONS可以创建的同时连接的最大数@@ROWCOUNT 受上一个SQL

语句影响的行数@@SERVERNAME 本地服务器的名称@@SERVICENAME 该计算机上的SQL服务的名称@@TIMETICKS 当前计算机上每指令周期的微秒数@@TRANSCOUNT 当前连接打开的事务数@@VERSION SQLServer

的版本信息30局部变量变量是可以存储数据值的对象使用局部变量可以将数据传递到SQL

语句局部变量名必须以'@'

为前缀SET

或SELECT语句用于给局部变量赋值例如:DECLARE@custVARCHAR(20)SET@cust='FRANK'31为变量赋值SET语句或SELECT语句用于给局部变量赋值。语法:SET@local_variablename=value或 SELECT@local_variablename=value其中@local_variablename为局部变量名例如,为先前声明的变量赋值:SET@CUST='FRANK'SELECTCUSTOMERID,COMPANYNAMEFROMCUSTOMERSWHERECUSTOMERID=@CUST32局部变量的定义与赋值实例DECLARE@CUSTVARCHAR(5)SET@CUST='FRANK'SELECTCUSTOMERID,COMPANYNAMEFROMCUSTOMERSWHERECUSTOMERID=@CUST33函数T-SQL

有三种类型的函数:行集函数聚合函数标量函数34标量函数-转换函数1-2转换函数用于将一种数据类型的值转换为另一种类型的值。

另外,该函数还可以用于获得各种特殊的日期格式。SQLServer提供了一个转换函数,即CONVERT()。语法:CONVERT(datatype[(length)],expression[,style])其中

datatype为数据类型,length为数据长度,expression为表达式,style为样式。SELECT'EMPID:'+CONVERT(CHAR(4),EMPLOYEEIDFROM

EMPLOYEES示例:35标量函数-日期部分2-2日期部分缩写值星期wk1-53星期几dw 1-7月mm1-12季度qq1-4年yy1753-999936标量函数-日期函数和数学函数日期函数GETDATE()DATEADD(datepart,number,date)DATEDIFF(datepart,date1,date2)DATENAME(datepart,date)DATEPART(datepart,date)数学函数AB

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论