第06章 TransactSQL程序设计例题解答.docx

上传人:b****5 文档编号:7433722 上传时间:2023-01-23 格式:DOCX 页数:20 大小:20.40KB
下载 相关 举报
第06章 TransactSQL程序设计例题解答.docx_第1页
第1页 / 共20页
第06章 TransactSQL程序设计例题解答.docx_第2页
第2页 / 共20页
第06章 TransactSQL程序设计例题解答.docx_第3页
第3页 / 共20页
第06章 TransactSQL程序设计例题解答.docx_第4页
第4页 / 共20页
第06章 TransactSQL程序设计例题解答.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

第06章 TransactSQL程序设计例题解答.docx

《第06章 TransactSQL程序设计例题解答.docx》由会员分享,可在线阅读,更多相关《第06章 TransactSQL程序设计例题解答.docx(20页珍藏版)》请在冰豆网上搜索。

第06章 TransactSQL程序设计例题解答.docx

第06章TransactSQL程序设计例题解答

第6章Transact-SQL程序设计——例题解答

例6-1-1:

使用GO语句的例子。

程序清单如下:

--第一个批处理完成打开STUDENT数据库的操作

USESTUDENT

GO

/*GO是批处理结束标志*/

--第二个批处理查询T_STUDENT表中的数据

SELECT*FROMT_STUDENT

GO

--第三个批处理查询T_STUDENT表中

--姓张的男学生的学号、姓名和性别

SELECTS_NUMBER,S_NAME,SEX

FROMT_STUDENT

WHERES_NAMElike'张%'

ANDSEX='男'

GO

注意:

GO语句本身并不是Transact-SQL语句的组成部分,它只是一个用于表示批处理结束的前端命令。

例6-2-1:

在程序中使用注释的例子。

程序清单如下:

--本程序是一个使用注释的例子。

USESTUDENT--打开STUDENT数据库

GO

/*下面的SQL语句完成在T_STUDENT表中查询

05541班学生的学号、姓名和出生日期三个字段

的记录,要求按姓名的降序排序*/

SELECTS_NUMBER,S_NAME,BIRTHDAY

FROMT_STUDENT

WHERESUBSTRING(T_STUDENT.S_NUMBER,1,5)='05541'

ORDERBYS_NAMEDESC

GO

/*下面的SQL语句完成在T_STUDENT表中查询

B04511班性别为男的学生记录*/

SELECT*FROMT_STUDENT

WHERESUBSTRING(T_STUDENT.S_NUMBER,1,6)='B04511'

ANDSEX='男'

GO

--下面的SQL语句完成在T_COURSE表中

--插入一条新的记录

INSERTINTOT_COURSE/*此表共有四个字段:

C_NUMBER,C_NAME,HOURS,CREDIT*/

(C_NUMBER,C_NAME,HOURS,CREDIT)

VALUES

('','Pascal程序设计',72,3)

GO

--修改上面插入的记录

UPDATET_COURSE

SETHOURS=64,

Credit=2.5

WhereC_NUMBER=''

例6-3-1:

创建了一个变量@CurrentDateTime,然后将GETDATE()函数的值放在变量中,最后输出@CurrentDateTime变量的值。

程序清单如下:

--声明变量@CurrentDateTime

DECLARE@CurrentDateTimechar(30)

--给变量@CurrentDateTime赋值

SELECT@CurrentDateTime=GETDATE()

--显示变量@CurrentDateTime的值

SELECT@CurrentDateTimeAS'当前的日期和时间'

GO

注意:

变量只在定义它的批处理中有效,因此,在上例中的程序中间不能写入GO语句。

例6-3-2:

查询T_STUDENT表,将返回的记录数赋给变量@RowsReturn。

程序清单如下:

--打开STUDENT数据库

USESTUDENT

GO

--声明变量

DECLARE@RowsReturnint

--给变量赋值

SET@RowsReturn=(SELECTCOUNT(*)FROMT_STUDENT)

--显示变量的值

SELECT@RowsReturnAS'SELECT返回的记录数'

GO

例6-3-3:

在SELECT语句中使用由SET赋值的变量。

程序清单如下:

--打开STUDENT数据库

USESTUDENT

GO

--声明变量

DECLARE@StuSexchar

(2)

--给变量赋值

SET@StuSex='女'

--根据变量@StuSex的值进行查询

SELECTS_NUMBER,S_NAME,SEX,BIRTHDAY

FROMT_STUDENT

WHERESEX=@StuSex

GO

例6-3-4:

在T_SCORE表中,求05541班学生高等数学课程的最高分和最低分的学生信息,包括学号、姓名、课程名、成绩四个字段。

程序清单如下:

--打开STUDENT数据库

USESTUDENT

GO

--声明变量

DECLARE@MaxScorereal,@MinScorereal

--给变量赋值

SELECT@MaxScore=MAX(SCORE),

@MinScore=MIN(SCORE)

FROMT_SCORE,T_COURSE

WHERET_SCORE.C_NUMBER=T_COURSE.C_NUMBER

ANDSUBSTRING(T_SCORE.S_NUMBER,1,5)='05541'

ANDT_COURSE.C_NAME='高等数学'

--根据变量@MaxScore和@MinScore的值进行查询,

--查询学生的学号、姓名、课程名称、考试分数

SELECTT_SCORE.S_NUMBER,S_NAME,C_NAME,SCORE

FROMT_STUDENT,T_COURSE,T_SCORE

WHERET_STUDENT.S_NUMBER=T_SCORE.S_NUMBER

ANDT_SCORE.C_NUMBER=T_COURSE.C_NUMBER

AND(

SCORE=@MaxScore

OR

SCORE=@MinScore

GO

例6-4-1:

计算表达式的值,并将结果赋给变量@ExpResult。

程序清单如下:

--定义变量

DECLARE@ExpResultnumeric

--给变量赋值

SET@ExpResult=67%31

--显示变量的值

SELECT@ExpResultAS'表达式计算结果'

例6-4-2:

查询05541班的学生信息,要求列出的字段为:

班级、本班内的学号、姓名、性别、出生日期、政治面貌。

程序清单如下:

--打开STUDENT数据库

USESTUDENT

GO

--查询05541班的学生信息

SELECT班级=SUBSTRING(S_NUMBER,1,5),

本班内的学号=SUBSTRING(S_NUMBER,6,7),

姓名=S_NAME,

性别=SEX,

出生日期=BIRTHDAY,

政治面貌=POLITY

FROMT_STUDENT

WHERESUBSTRING(S_NUMBER,1,5)='05541'

GO

例6-4-3:

使用位运算符计算表达式的值。

程序清单如下:

--声明4个变量

DECLARE@ExpResult1int,

@ExpResult2int,

@ExpResult3int

--给变量赋值

SELECT@ExpResult1=20&12,

@ExpResult2=20|12,

@ExpResult3=20^12

--输出变量的值

SELECT@ExpResult1AS'位与运算结果',

@ExpResult2AS'位或运算结果',

@ExpResult3AS'位异或运算结果'

GO

例6-4-4:

使用比较运算符计算表达式的值。

程序清单如下:

--定义两个变量

DECLARE@Exp1integer,

@Exp2integer

--给变量赋值

SET@Exp1=30

SET@Exp2=50

--根据两个变量的值输出结果

IF@Exp1>@Exp2

PRINT'第1个变量的值大于第2个变量的值。

'

ELSEIF@Exp1=@Exp2

PRINT'第1个变量的值等于第2个变量的值。

'

ELSE

PRINT'第1个变量的值小于第2个变量的值。

'

GO

例6-4-5:

使用比较运算符计算表达式的值。

程序清单如下:

--定义两个变量

DECLARE@Exp1integer,

@Exp2integer

--给变量赋值

SET@Exp1=30

SET@Exp2=50

--根据两个变量的值输出结果

--与运算结果

IF@Exp1>@Exp2AND@Exp1<@Exp2

PRINT'@Exp1>@Exp2AND@Exp1<@Exp2的结果值为真。

'

ELSE

PRINT'@Exp1>@Exp2AND@Exp1<@Exp2的结果值为假。

'

--或运算结果

IF@Exp1>@Exp2OR@Exp1<@Exp2

PRINT'@Exp1>@Exp2OR@Exp1<@Exp2的结果值为真。

'

ELSE

PRINT'@Exp1>@Exp2OR@Exp1<@Exp2的结果值为假。

'

GO

例6-4-6:

使用字符串连接运算符计算表达式的值。

程序清单如下:

--定义变量

DECLARE@ExpResultchar(60)

--对变量赋值

SELECT@ExpResult='河北省廊坊市'+'北华航天工业学院'+'计算机软件教研室'

--输出变量的值

SELECT@ExpResultAS'字符串的连接结果'

GO

例6-4-7:

使用括号改变表达式的计算顺序。

程序清单如下:

--定义变量

DECLARE@ExpResultint

--给变量赋值

SELECT@ExpResult=100+(20-5)*2/3

--输出变量的值

SELECT@ExpResultAS'计算结果'

GO

例6-5-1:

从STUDENT数据库中返回T_STUDENT表的第4列的名称。

程序清单如下:

--打开STUDENT数据库

USESTUDENT

GO

--使用系统函数求第4列的名称

SELECTCOL_NAME(OBJECT_ID('T_STUDENT'),4)

AS'T_STUDENT表中第4列的名称'

例6-5-2:

从STUDENT数据库中返回T_STUDENT表的S_NUMBER列的长度。

程序清单如下:

--打开STUDENT数据库

USESTUDENT

GO

--使用系统函数求S_NUMBER列的长度

SELECTCOL_LENGTH('T_STUDENT','S_NUMBER')

AS'T_STUDENT表中的S_NUMBER列的长度'

例6-5-3:

检查sysdatabases中的每一个数据库,使用数据库标识号来确定数据库名称。

程序清单如下:

USEmaster

SELECTdbid,DB_NAME(dbid)ASDB_NAME

FROMsysdatabases

ORDERBYdbid

例6-5-4:

在T_STUDENT表中先插入三条新记录,其中的POLITY字段的值为NULL,要求对记录进行查询时,对应的NULL值在显示时显示“群众”。

程序清单如下:

--打开数据库STUDENT

USESTUDENT

GO

--向T_STUDENT表中插入三条记录

INSERTINTOT_STUDENT(

S_NUMBER,S_NAME,SEX)

VALUES(

'Y','王志鹏','男')

INSERTINTOT_STUDENT(

S_NUMBER,S_NAME,SEX)

VALUES(

'Y','周小娟','女')

INSERTINTOT_STUDENT(

S_NUMBER,S_NAME,SEX)

VALUES(

'Y','李磊','男')

--查询刚插入的记录信息

SELECTS_NUMBERAS学号,S_NAMEAS姓名,

SEXAS性别,POLITYAS政治面貌

FROMT_STUDENT

WHERESUBSTRING(S_NUMBER,1,6)='Y04522'

--将政治面貌字段的值为空的记录用'群众'代替NULL显示

SELECTS_NUMBERAS学号,S_NAMEAS姓名,

SEXAS性别,(ISNULL(POLITY,'群众'))AS政治面貌

FROMT_STUDENT

WHERESUBSTRING(S_NUMBER,1,6)='Y04522'

例6-5-5:

利用@@ERROR返回程序的错误代码。

程序清单如下:

--打开STUDENT数据库

USESTUDENT

GO

--对T_COURSE表操作,在T_COURSE表中

--插入一条新的记录

INSERTINTOT_COURSE

(C_NUMBER,C_NAME,HOURS,CREDIT)

VALUES

('','C语言程序设计',72,3)

--输出此时错误代码的值

SELECT@@ERRORAS'第一次插入记录时的错误代码'

GO

/*在T_COURSE表中再插入一条新的记录,

但课程号与上面插入的记录相同,

输出此时错误代码的值*/

INSERTINTOT_COURSE

(C_NUMBER,C_NAME,HOURS,CREDIT)

VALUES

('','VB程序设计',64,2.5)

--输出此时错误代码的值

SELECT@@ERRORAS'第二次插入记录时的错误代码'

GO

例6-5-6:

显示到当前日期和时间为止试图登录SQLServer的次数。

程序清单如下:

SELECTGETDATE()AS'今天的日期和时间',

@@CONNECTIONSAS'企图登录的次数'

例6-5-7:

返回在程序执行过程中上一条SQL语句影响的记录数。

程序清单如下:

--打开STUDENT数据库

USESTUDENT

GO

--查询T_STUDENT表中的记录

SELECT*

FROMT_STUDENT

--查询上一条SELECT语句影响的记录数

SELECT@@ROWCOUNTAS'第一次查询返回的记录数'

GO

--查询T_STUDENT表中性别为男的记录

SELECT*

FROMT_STUDENT

WHERESEX='男'

--查询上一条SELECT语句影响的记录数

SELECT@@ROWCOUNTAS'第二次查询返回的记录数'

GO

--对T_COURSE表操作,在T_COURSE表中

--插入一条新的记录

INSERTINTOT_COURSE

(C_NUMBER,C_NAME,HOURS,CREDIT)

VALUES

('','VB程序设计',72,3)

--查询上一条INSERT语句影响的记录数

SELECT@@ROWCOUNTAS'第一次插入记录时影响的记录数'

GO

--对T_COURSE表操作,在T_COURSE表中

--插入一条新的记录,

--但课程号与前面插入的记录相同

INSERTINTOT_COURSE

(C_NUMBER,C_NAME,HOURS,CREDIT)

VALUES

('','VC程序设计',64,2.5)

--查询上一条INSERT语句影响的记录数

SELECT@@ROWCOUNTAS'第二次插入记录时影响的记录数'

GO

例6-5-8:

返回SQLServer安装的日期、版本和处理器类型。

程序清单如下:

SELECT@@VERSIONAS'当前的SQLServer信息'

例6-5-9:

使用RTRIM函数删除字符型字段中的尾部空格。

程序清单如下:

--打开STUDENT数据库

USESTUDENT

--使用字符串函数RTRIM去掉尾部空格

SELECTCOL_LENGTH('T_COURSE','C_NAME')AS'课程名称列的长度',

C_NAMEAS课程名称,

DATALENGTH(RTRIM(C_NAME))AS'课程名称列的实际数据长度'

FROMT_COURSE

例6-5-10:

使用SUBSTRING函数、LEFT函数和RIGHT函数求T_STUDENT中的班级名称和学号。

程序清单如下:

--打开STUDENT数据库

USESTUDENT

GO

--使用字符串函数

SELECTSUBSTRING(S_NUMBER,1,LEN(S_NUMBER)-2)AS'班级',

RIGHT(RTRIM(S_NUMBER),2)AS学号,

S_NAMEAS姓名,

SEXAS性别,

BIRTHDAYAS出生日期,

POLITYAS政治面貌

FROMT_STUDENT

WHERELEFT(S_NUMBER,5)='05541'

例6-5-11:

在第一个字符串(GoodMorning)中删除从第6个位置(字符M)开始的7个字符,然后在删除的起始位置插入第二个字符串(Afternoon),创建并返回一个新的字符串。

程序清单如下:

--定义变量@varString

DECLARE@varStringchar(30)

--给变量赋值

SELECT@varString=STUFF('GoodMorning',6,7,'Afternoon')

--显示变量的值

SELECT@varStringAS'返回的字符串'

例6-5-12:

查询T_STUDENT表的学生信息,要求显示的字段为:

学号、姓名、性别和学生的年龄。

程序清单如下:

USESTUDENT

GO

SELECTS_NUMBERAS学号,

S_NAMEAS姓名,

SEXAS性别,

YEAR(GETDATE())-YEAR(BIRTHDAY)AS年龄

FROMT_STUDENT

例6-5-13:

在T_STUDENT表中查询每个学生的出生月份。

程序清单如下:

USESTUDENT

GO

SELECTS_NUMBERAS学号,

S_NAMEAS姓名,

SEXAS性别,

DATEPART(Month,BIRTHDAY)AS出生月份

FROMT_STUDENT

例6-5-14:

从系统当前日期中返回系统当前的年份数、月份数和天数。

程序清单如下:

SELECTYEAR(GETDATE())AS当前年份,

MONTH(GETDATE())AS当前月份,

DAY(GETDATE())AS当前天数

 

例6-5-15:

在同一表达式中使用CEILING(),FLOOR(),ROUND()函数。

程序清单如下:

SELECTCEILING(28.6)AS'CEILING(28.6)的值',

FLOOR(28.6)AS'FLOOR(28.6)的值',

ROUND(37.2364,3)AS'ROUND(37.2364,3)的值'

例6-5-16:

查询T_STUDENT表中出生年份为1985年的学生信息。

程序清单如下:

USESTUDENT

GO

SELECTS_NUMBERAS学号,

S_NAMEAS姓名,

SEXAS性别,

BIRTHDAYAS出生日期,

POLITYAS政治面貌

FROMT_STUDENT

WHERECONVERT(char(40),BIRTHDAY,102)LIKE'1985%'

例6-5-17:

编写一个用户自定义函数fun_SumScores,要求根据输入的班级号和课程号,求此班此门课程的总分。

程序清单如下:

--打开STUDENT数据库

USESTUDENT

GO

--创建用户自定义函数fun_SumScores

CREATEFUNCTIONfun_SumScores

@ClassNameASchar(10),

@CourseNumberASchar(10)

RETURNSreal

BEGIN

DECLARE@SumResultASreal

SELECT@SumResult=SUM(SCORE)

FROMT_SCORE

WHERESUBSTRING(S_NUMBER,1,LEN(S_NUMBER)-2)=@ClassName

ANDC_NUMBER=@CourseNumber

GROUPBYSUBSTRING(S_NUMBER,1,LEN(S_NUMBER)-2)

RETURN@SumResult

END

GO

例6-5-18:

使用自定义函数fun_SumScores,求T_SCORE表中的各个班级的各门课程的总分。

--打开STUDENT数据库

USESTUDENT

GO

--使用自定义函数fun_SumScores求总分

SELECTDISTINCT

班级名称=SUBSTRING(S_NUMBER,1,LEN(S_NUMBER)-2),

课程名称=T_COURSE.C_NAME,

总分=dbo.fun_SumScores(

SUBSTRING(S_NUMBER,1,LEN(S_NUMBER)-2),

T_SCORE.C_NUMBER

FROMT_SCORE,T_COURSE

WHERET_SCORE.C_NUMBER=T_COURSE.C_NUMBER

例6-6-1:

根据T_SCORE表中的考试成绩,查询05541班学生高等数学的平均成绩,并根据平均成绩输出相应的提示信息。

程序清单如下:

USESTUDENT

GO

IF(SELECTAVG(SCORE)FROMT_SCORE

WHERELEFT(S_NUMBER,5)='05541'

ANDC_NUMBER='')

>75

BEGIN

PRINT'05541班高等数学的平均考试成绩比较理想!

'

PRINT''

SELECTAVG(SCORE)AS平均考试成绩

FROMT_SCORE

WHERELEFT(S_NUMBER,5)='05541'

ANDC_NUMBER=''

END

ELSE

BEGIN

PRINT'05541班高等数学的平均考试成绩不太理想!

'

PRINT''

SELECTAVG(SCORE)AS平均考试成绩

FROMT_SCORE

WHERELEFT(S_NUMBER,5)='05541'

ANDC_NUMBER=''

END

例6-6-2:

查询05541班学生的考试情况,并使用CASE语句将课程号替换为课程名进行显示。

程序清单如下:

USESTUDENT

GO

SELECTS_NUMBERAS学号,

课程名称=CASEC_NUMBER

WHEN''THEN'高等数学'

WHEN''THEN'关系型数据库原理'

END

SCOREAS考试分数

FROMT_SCORE

WHERELEFT(S_NUMBER,5)='05541'

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1