任务8-1 SQL编程基础 课件(共36张PPT)-《数据库应用技术-SQL Server》同步教学(人民邮电版)

资源下载
  1. 二一教育资源

任务8-1 SQL编程基础 课件(共36张PPT)-《数据库应用技术-SQL Server》同步教学(人民邮电版)

资源简介

(共36张PPT)
以程序方式处理学生信息管理数据表
任务8-1 SQL编程基础
目录
Contents
任务8-2 创建与使用存储过程
任务8-3 触发器
任务8-4 事务、锁的概念和应用
实训 以程序方式处理数据表的数据
任务8-1 SQL编程基础
PART 1
任务
assignments
(一)SQL基础
(二)Transact-SQL的流程控制
(三)常用函数
(四)游标
SQL编程基础
任务8-1
任务1-1 数据处理
【任务分析】
设计人员要编写存储过程和存储函数、触发器及事务,首先要掌握SQL的语法规范及语言基础。
【课堂任务】
熟悉SQL。
SQL的语法规范
SQL基础
常用函数
游标的基本操作
SQL编程基础
任务8-1
任务1-1 数据处理
(一)SQL基础
Transact-SQL是一系列操作数据库及数据库对象的命令语句,因此了解Transact-SQL语言基本语法和流程语句的构成是必须的,Transact-SQL语言中除了关键字,主要包括常量和变量、表达式、运算符、控制语句等。
1.常量
常量也称为文字值或标量值,是指程序运行中其值始终不会改变的量。在Transact-SQL程序设计过程中,定义常量的格式取决于它所表示的值的数据类型。表8.1列出了SQL Server中的常量类型及常量表示说明。
SQL编程基础
任务8-1
任务1-1 数据处理
SQL编程基础
任务8-1
任务1-1 数据处理
SQL编程基础
任务8-1
任务1-1 数据处理
2.变量
变量就是在程序执行过程中,其值可以改变的量。可以利用变量来存储程序执行过程中涉及的数据,如计算结果、用户输入的字符串以及对象的状态等。
变量由变量名和变量值构成,其类型与常量一样。变量名不能与命令和函数名相同,这里的变量和数学中变量的概念基本上一样,可以随时改变它对应的数值。
一些Transact-SQL系统函数的名称以两个@@符号开头。在旧版SQL Server中,@@函数称为全局变量,但它们不是变量,不具有等同于变量的行为。@@函数是系统函数,语法遵循函数规则。
SQL编程基础
任务8-1
任务1-1 数据处理
Transact-SQL局部变量是可以保存单个特定类型数据值的对象,是用户自定义的变量,它的作用域从声明变量的地方开始到声明变量的批处理或存储过程的结尾。
局部变量用DECLARE语句声明。语法格式如下。
DECLARE{@variable_namedatatype } [,…n]
参数说明如下。
@variable_name:局部变量名称。用户可以自定义符合SQL Server标识符命名规则的名称,但名称首字符必须为@。
datatype:局部变量使用的数据类型,可以是指定系统提供的或用户定义的数据类型和长度。对于数值变量,还指定精度和小数位数。对于XML类型的变量,可以指定一个可选的架构集合。
SQL编程基础
任务8-1
任务1-1 数据处理
局部变量用DECLARE声明后,都被赋予初值NULL。要给局部变量赋值,可以使用SET或SELECT语句,语法格式如下所示。
SET @variable_name=expression[,…n]
SELECT @variale_name=expression[,…n]
其中,@variable_name是局部变量名,expression是任何有效的SQL Server表达式。
【例8.1】 定义名为hello的局部变量,数据类型为char,长度为20,并为其赋值“hello,China!”。
DECLARE @hello char(20)
SET @hello='hello,China!'
【例8.2】 定义名为student1的局部变量,使用查询结果其赋值。
DECLARE @student1 char(8)
SET @student1=(SELECT snameFROM student WHERE sno=’20050101’)
SQL编程基础
任务8-1
任务1-1 数据处理
【例8.3】 查询student表中名字是例8.2中@student1值的学生信息。
SELECT sno,sname FROM student WHERE sname=@student1
【例8.4】 查询grademanager数据库的student表中“系别”为“计算机”的学生信息。
USE grademanager
DECLARE @系别 char(10)
SET @系别='计算机'
SELECT sno,sname,saddressFROM student WHEREsdept=@系别
SQL编程基础
任务8-1
任务1-1 数据处理
3.表达式
在Transact-SQL中,表达式就是常量、变量、列名、复杂计算、运算符和函数的组合。表达式通常都有返回值。与常量和变量一样,表达式的值也具有某种数据类型。根据表达式值的类型,表达式可分为字符型表达式、数值型表达式和日期型表达式。
表达式一般用在SELECT和SELECT语句的WHERE子句中。
SQL编程基础
任务8-1
任务1-1 数据处理
【例8.5】 查询学生的“学号”“平均成绩”及“考生信息”3列,其中考生信息列由学生“姓名”“性别”“班级编号”和“年级”这些来自student表的数据组成。查询结果按平均成绩降序排列,使用表达式的SELECT查询语句如下。
SELECT A.sno,AVG(degree) AS '平均成绩',
sname+SPACE(6)+ssex+SPACE(4)+ classno+'班'+SPACE(4)+left(classno,4)+'年级' AS '考生信息'
FROM scA INNER JOIN student B ON A.sno=B.sno
GROUP BY A.sno,sname,ssex,classno
ORDER BY 平均成绩 DESC
在上述语句中同时使用了表别名、列别名、字符串连接运算符、求平均值函数、系统字符串函数、内连接和各种数据列等。
SQL编程基础
任务8-1
任务1-1 数据处理
(二)Transact-SQL的流程控制
Transact-SQL的基本结构是顺序结构、条件分支结构和循环结构。顺序结构是一种自然结构,条件分支结构和循环结构需要根据程序的执行情况调整和控制程序的执行顺序。在Transact-SQL中,流程控制语句就是用来控制程序执行流程的语句,也称流控制语句或控制流语句。
SQL编程基础
任务8-1
任务1-1 数据处理
1.BEGIN…END
BEGIN…END语句用于将多个Transact-SQL语句组合为一个逻辑块。语句块允许嵌套。当流程控制语句必须执行一个包含两条或两条以上Transact-SQL语句的语句块时,使用BEGIN…END。其语法格式如下。
BEGIN
{
sql_statement|statement_block
}
END
其中,sql_statement是使用语句块定义的任何有效的Transact-SQL语句;statement_block是使用语句块定义的任何有效Transact-SQL语句块。
SQL编程基础
任务8-1
任务1-1 数据处理
2.IF…ELSE
IF…ELSE语句用于指定Transact-SQL语句的执行条件。如果条件为真,则执行条件表达式后面的Transact-SQL语句。当条件为假时,可以用ELSE关键字指定要执行的Transact-SQL语句。该语句的语法格式如下。
IF Boolean_expression
{sql_statement|statement_block}
ELSE
{sql_statement|statement_block }
其中,Boolean_expression是返回true或false的逻辑表达式。如果布尔表达式中含有SELECT语句,则必须用圆括号将SELECT语句括起来。
SQL编程基础
任务8-1
任务1-1 数据处理
【例8.6】 使用IF…ELSE语句查询计算机系的办公地点,如果为空,则显示“办公地点不详”,否则显示其办公地点。
USE grademanager
GO
IF (SELECT office FROM department WHERE deptname='计算机系') IS NULL
BEGIN
PRINT '办公地点不详'
SELECT * FROM departmentWHEREdeptname='计算机系'
END
ELSE
SELECT office FROM department WHERE deptname='计算机系'
SQL编程基础
任务8-1
任务1-1 数据处理
3.CASE语句
CASE语句可根据表达式的真假来确定是否返回某个值,可以在表达式的任何位置使用这一关键字。使用CASE语句可以选择多个分支。CASE语句两种格式。
(1)简单格式:将某个表达式与一组简单表达式进行比较以确定结果。其语法格式如下。
CASE input_expression
WHEN when_expression THEN result_expression[...n]
[ELSE else_result_expression]
END
(2)搜索格式:计算一组布尔表达式以确定结果。其语法格式如下。
CASE
WHEN Boolean_expression THEN result_expression[...n]
[ELSE else_result_expression]
END
SQL编程基础
任务8-1
任务1-1 数据处理
参数说明如下。
① input_expression:使用简单CASE格式时计算的表达式,可以是任何有效的表达式。
② when_expression:用来与input_expression表达式比较的表达式,input_expression与每个when_expression表达式的数据类型必须相同,或者可以隐式转换。
③ result_expression:表示当input_expression=when_expression的取值为true时,需要返回的表达式。
④ else_result_expression:表示当input_expression=when_expression的取值为false时,需要返回的表达式。
⑤ Boolean_expression:使用CASE搜索格式时计算的布尔表达式,可以是任何有效的布尔表达式。
SQL编程基础
任务8-1
任务1-1 数据处理
【例8.7】 利用CASE语句查询学生的考试成绩,显示成绩的档次(A~D)。
USE grademanager
GO
SELECT sname AS ‘姓名’,degree=
CASE
WHEN degree>=90THEN ‘A’
WHEN degree>=75 AND degree<90THEN ‘B’
WHEN degree>=60AND degree<75THEN ‘C’
WHEN degree<60AND degree>0THEN ‘D’
END
FROM student a,sc b WHERE a.sno=b.sno
SQL编程基础
任务8-1
任务1-1 数据处理
4.WHILE语句
WHILE语句用于设置重复执行Transact-SQL语句或语句块的条件。当指定的条件为真时,重复执行循环语句。可以在循环体内设置BREAK和CONTINUE关键字,以便控制循环语句的执行过程,其语法格式如下。
WHILE Boolean_expression
{ sql_statement | statement_block | BREAK | CONTINUE }
SQL编程基础
任务8-1
任务1-1 数据处理
参数说明如下。
Boolean_expression:返回true或false的表达式。如果布尔表达式中含有SELECT语句,则必须用括号将SELECT语句括起来。
sql_statement | statement_block:Transact-SQL 语句或用语句块定义的语句分组。若要定义语句块,则使用控制流关键字BEGIN和END。
BREAK:使程序从最内层的WHILE循环中退出,执行END关键字后面的任何语句,END关键字为循环结束标记。
CONTINUE:使WHILE循环重新开始执行,忽略CONTINUE关键字后面的任何语句。
SQL编程基础
任务8-1
任务1-1 数据处理
【例8.8】 使用WHILE语句求1~100之和。
DECLARE @iint,@sum int
SELECT @i=1,@sum=0
WHILE @i<=100
BEGIN
SET @sum=@sum+@i
SET @i=@i+1
END
SELECT @sum
SQL编程基础
任务8-1
任务1-1 数据处理
5.注释
注释是程序代码中不被执行的文本字符串,用于对代码进行说明或诊断。
双连字符(--):用于单行或嵌套的注释。用--插入的注释由换行符终止,没有最大长度限制。
斜杠星型(/*…*/):也称块注释,可以插入单独行中,也可以插入Transact-SQL语句中,支持嵌套注释。多行注释必须用/*和*/指明,没有最大长度限制。
SQL编程基础
任务8-1
任务1-1 数据处理
(三)常用函数
SQL Server为Transact-SQL提供了大量的系统函数,它们功能强大,方便易用。使用这些函数,可以极大地提高数据库的管理效率。SQL Server的常用函数见表8.2。
SQL编程基础
任务8-1
任务1-1 数据处理
SQL编程基础
任务8-1
任务1-1 数据处理
SQL编程基础
任务8-1
任务1-1 数据处理
(四)游标
游标(Cursor)是类似于C语言指针的结构,在SQL Server 中,它是一种数据访问机制,允许用户访问单独的数据行,而不是对整个行集进行操作。
在SQL Server中,游标主要包括游标结果集和游标位置两部分,游标结果集是由定义游标的SELECT语句返回行的集合,游标位置则是指向这个结果集中某一行的指针。
在使用游标之前首先要声明游标,定义Transact-SQL服务器游标的属性,如游标的滚动行为和用于生成游标所操作结果集的查询。声明游标的语法格式如下。
DECLARE cursor_name CURSOR
FOR select_statement
SQL编程基础
任务8-1
任务1-1 数据处理
参数说明如下。
cursor_name:游标定义的名称,必须符合SQL标识符规则。
select_statement:是定义游标结果集的标准SELECT语句。
【例8.10】 在grademanager数据库中为teacher表创建一个普通的游标,名称为T_cursor。
DECLARE T_cursor CURSOR
FOR SELECT * FROM teacher
声明游标后,就可对游标进行操作,主要包括打开游标、检索游标、关闭游标和释放游标。
SQL编程基础
任务8-1
任务1-1 数据处理
1.打开游标
使用游标之前必须先打开游标,打开游标的语法格式如下。
OPEN cursor_name
【例8.11】 打开前面创建T_cursor游标。
OPEN T_cursor
2.检索游标
打开游标以后,就可以提取数据了。FETCH语句的功能是从游标中将数据检索出来,以便用户能够使用这个数据。检索游标的语法格式如下。
FETCH
[ [ NEXT | PRIOR | FIRST | LAST
| ABSOLUTE { n | @nvar }
| RELATIVE { n | @nvar }
]
FROM
]
cursor_name
SQL编程基础
任务8-1
任务1-1 数据处理
参数说明如下。
NEXT:紧跟当前行返回结果行,并且当前行递增为返回行。如果FETCH NEXT为对游标的第一次提取操作,则返回结果集中的第一行。NEXT为默认的游标提取选项。
PRIOR:返回紧邻当前行前面的结果行,并且当前行递减为返回行。 如果 FETCH PRIOR 为对游标的第一次提取操作,则没有行返回并且游标置于第一行之前。
FIRST:返回游标中的第一行并将其作为当前行。
LAST:返回游标中的最后一行并将其作为当前行。
SQL编程基础
任务8-1
任务1-1 数据处理
ABSOLUTE { n| @nvar}:n是整数常量,@nvar是smallint、tinyint或int类型的值。
如果n或@nvar为正,则返回从游标起始处开始向后的第n行,并将返回行变成新的当前行。如果n或@nvar为负,则返回从游标末尾处开始向前的第n行,并将返回行变成新的当前行。如果n或@nvar为0,则不返回行。
RELATIVE { n| @nvar}:n是整数常量,@nvar是smallint、tinyint或int类型的值。
如果n或@nvar为正,则返回从当前行开始向后的第n行,并将返回行变成新的当前行。如果n或@nvar为负,则返回从当前行开始向前的第n行,并将返回行变成新的当前行。如果n或@nvar为0,则返回当前行。在第一次提取游标时,如果在将n或@nvar设置为负数或 0的情况下指定FETCH RELATIVE,则不返回行。
SQL编程基础
任务8-1
任务1-1 数据处理
【例8.12】 打开T_cursor游标之后,使用FETCH语句检索游标中的可用数据。
FETCH NEXT FROM T_cursor
WHILE @@FETCH_STATUS=0
BEGIN
FETCH NEXT FROM T_cursor
END
GO
上述语句中的@@FETCH_STATUS全局变量保存的就是FETCH操作的结果信息。如果其值为零,则表示有记录检索成功。如果值不为零,则FETCH语句由于某种原因操作失败。
SQL编程基础
任务8-1
任务1-1 数据处理
3.关闭游标
打开游标以后,SQL Server服务器会专门为游标开辟一定的内存空间,以存放游标操作的数据结果集,同时游标的使用也会根据具体情况对某些数据进行封锁。所以在不使用游标时,一定要关闭游标,以通知服务器释放游标占用的资源。
关闭游标的语法格式如下。
CLOSE cursor_name
【例8.13】 关闭游标T_cursor。
CLOSE T_cursor
SQL编程基础
任务8-1
任务1-1 数据处理
4.释放游标
因为游标结构本身也会占用一定的计算机资源,所以使用完游标后,为了回收被游标占用的资源,应该将游标释放。当释放最后的游标引用时,组成该游标的数据结构由SQL Server释放。释放游标的语法格式如下。
DEALLOCATE cursor_name
释放完游标以后,如果要重新使用这个游标,就必须重新执行声明游标的语句。

展开更多......

收起↑

资源预览