T-SQL作业

合集下载

实验-T-SQL高级应用(答案)

实验-T-SQL高级应用(答案)

实验六T-SQL高级应用一、实验目的:(1) 掌握T-SQL程序设计的控制结构及程序设计逻辑。

(2) 掌握自定义函数、存储过程、游标的使用。

二、实验内容(1) 从学生数据库school中查询所有同学选课成绩情况:姓名、课程名、成绩。

要求:小于60分的输出“不及格”;60—70分的输出“及格”;70—80分的输出“中等”;80—90分的输出“良好”;90—100分的输出“优秀”。

select sname as '姓名',cname as '课程名',casewhen degree<60 then '不及格'when degree<70 then '及格'when degree<80 then '中等'when degree<90 then '良好'else '优秀'end as '成绩'from student s,course c,scwhere s.sno=sc.sno and o=o(2) 创建一个自定义函数,根据学生姓名查询该生所有的选课信息,包括课程名、成绩。

--创建函数f1create function f1(@xm char(10))returns tableasreturn (select cname,degreefrom student s,course c,scwhere s.sno=sc.sno and o=o and sname=@xm) --调用函数f1select * from f1('刘晨')(3) 创建一个自定义函数,实现如下功能:判断一个数是否是素数。

--创建函数,返回1代表n是素数,返回0代表n不是素数create function sh(@n int)returns tinyintbegindeclare @i int,@f tinyintset @i=2set @f=1 --假定@n是素数while @i<=sqrt(@n)beginif @n%@i=0beginset @f=0breakendset @i=@i+1endreturn @fendgo--调用函数sh,判断5是否是素数if dbo.sh(5)=1print '是素数'elseprint '不是素数'(4)创建包含两个参数的存储过程stucred,一个输入参数(@sno)用于指定学生学号,一个输出参数(@s_cred)用于返回该生所修学分总和。

T-SQL实训练习

T-SQL实训练习

T-SQL练习
任务1:请使用T-SQL编写一个程序,定义两个整型变量,使用set 和select分别将其赋值5和-3,并将这两个变量进行加法运算,最后要求分别使用select和print输出计算结果。

(参考Page163,例9.2)请将你的T-SQL程序代码复制到这里:
任务2、请定义字符型变量,用于存放“中华人民共和国PRC”,要求分别使用合适的字符串函数,完成下列要求:(参考Page163,例
9.3)
①统计其字符个数(参考Page175-len())
②返回字符串右边开始的3个字符(参考Page176-right())
③将大写字母转换为小写字母(参考Page176-lower())
请将你的T-SQL程序代码复制到这里:
任务3、请使用数学函数PI(),计算一个半径为5的圆的周长和面积。

(参考Page177-PI())
请将你的T-SQL程序代码复制到这里:
任务4、请调整你的windows系统的时间至准确时间,然后使用日期函数,分别统计香港回归日(1997-07-1)和澳门回归日(1999-12-20)距离今天的年数、月数、天数?(参考Page178-例9.28)
请将你的T-SQL程序代码复制到这里:
任务5、请编写一个简单的循环程序,计算100的阶乘。

(参考Page171-例9.17)
请将你的T-SQL程序代码复制到这里:。

T-SQL作业答案

T-SQL作业答案

24.写出下列每条语句或程序段的功能假设存在名为AAA的数据库,包括Students(学号 char(8),姓名varchar(8),年龄 int,专业 varchar(20),入学日期 DateTime)和Score (学号 char(8),课程名 varchar(10),成绩 numeric(5,2))两张表。

(1)SELECT *FROM StudentsWHERE DATEPART(year,入学日期) =DATEPART(year,GETDATE())((1)从Students表中查询出所有当年(系统时间)入学的学生记录。

)(2)DECLARE @MyNO CHAR(8)SET @MyNO='20030001'IF (SELECT 专业FROM Students WHERE 学号=@MyNO)='计算机软件'BEGINSELECT AVG(成绩) AS 平均成绩FROM ScoreWHERE 学号=@MyNOENDELSEPRINT '学号为' +@MyNO+'的学生不存在或不属于软件专业' GO((2)首先定义一个名为@MyNo的局部变量,并给它赋初值,如果@MyNo属于计算机软件专业,则显示出平均成绩,否则显示“学号为@MyNo 的学生不存在或不属于软件专业”)(3)declare @a numeric(5,2)set @a=(select avg(成绩) from score)select *from scorewhere 成绩>=@a(从score表中查询出大于等于平均成绩的所有记录。

)(4)declare @a numeric(5,2),@b numeric(5,2) set @a=(select max(成绩) from score)set @b=(select min(成绩) from score)print @a-@b(求出score表中最高成绩与最低成绩的分数之差。

第四章T-SQL语言、存储过程触发器例题

第四章T-SQL语言、存储过程触发器例题

第四章T-SQL语言部分例题【例4-13】创建一个只有一个主数据文件SchoolTest(不指定该文件的大小)的数据库。

CREATE DATABASE SchoolTestON(NAME=SchoolTest_Data,FILENAME='D:\SchoolTest_Data.MDF')【例4-14】建立学生表T_StudentTest。

CREATE TABLE T_StudentTest (StudentCode CHAR(8) NOT NULL UNIQUE, /*唯一性约束,不许取空值*/StudentName V ARCHAR(16) NOT NULL,Sex CHAR(2) NOT NULL,LiveInDorm BIT DEFAULT 1, /*默认值为1*/Constraint StudentPK Primary Key(StudentCode) /* StudentCode为主键约束*/ )【例4-15】建立成绩表T_GradeTest。

CREATE TABLE T_GradeTest(StudentCode CHAR(8) NOT NULL , /*不许取空值*/Grade REAL DEFAULT 0 , /*默认值为0*/Constraint GradeCK Check(Grade>=0 AND Grade<=100)/*检查约束0>= Grade<=100*/)【例4-16】删除T_GradeTest表DROP TABLE T_GradeTest【例4-17】在T_Student表的姓名(StudentName)字段上建立升序索引。

CREATE INDEX NameIndex on T_Student (StudentName)【例4-18】在T_Student表的学号(StudentCode)字段上建立唯一降序索引。

CREATE UNIQUE INDEX StudentCodeIndex on T_Student (StudentCode DESC)【例4-19】删除T_Student表中索引名称分别为NameIndex和StudentCodeIndex的两个索引。

T_SQL函数习题及答案(完整版)

T_SQL函数习题及答案(完整版)

作业参考答案:--1.设数据库中有学生成绩表sc(sno char(10),cno char(5),grade tinyint),设计一个函数Count_course,返回指定学生的选修的课程门数. 注意:没有选修时应返回0;create function Count_course(@sno char(10))returns intas beginreturn( select count(0) from sc where sno=@sno)end--2.写一个T-sql函数reversion,完成颠倒一个字符串,即:select dbo.reversion('abcd') 输出的结果为dcba;create function reversion(@str varchar(4000))returns varchar(4000)as begindeclare @ret varchar(4000)declare @i intset @ret=''set @i=len(@str)while @i>0 beginset @ret=@ret+substring(@str,@i,1)set @i=@i -1endreturn @retend--select dbo.reversion('abcdefg')--对照: 下面的算法有错误,当字符串长度超过2000后不能得到正确结果create alter function reversion2(@str varchar(4000))returns varchar(4000)as begindeclare @i int, @j intset @i=len(@str)set @j=len(@str)while @i>0 beginset @str=@str+substring(@str,@i,1)set @i=@i -1endset @str=right(@str,@j)return @strend--select dbo.reversion2('abcdefg')--3.写一个函数T-sql函数elimination(a,b)将出现在第一个字符串中的第二个字符串中的所有字符删除,即:select dbo.elimination('abcdefg12345','bd2') 输出为:acefg1345;create function elimination(@a varchar(4000),@b varchar(4000))returns varchar(4000)as begin--declare @ret varchar(4000)declare @i int--set @ret=''set @i=1while @i < len(@b) beginset@a=replace(@a,substring(@b,@i,1),'')set @i= @i + 1endreturn @aend--select dbo.elimination('abcdefg12345','bd2') --4.写一个函数Output_RMB,完成将人民币数值转换为汉字大写,即:select dbo.Output_RMB(4567.12) 输出为:肆仟伍佰陆拾柒元壹角贰分;/*方法二:推荐使用的方法,支撑两种转换类型select dbo.Convert_money('20002.45',0) select dbo.Convert_money('20002.45',1)*/Create function Convert_money(@n_LowerMoney numeric(15,2),@v_TransType int)returns varchar(200)ASbeginDeclare @v_LowerStr V ARCHAR(200) -- 小写金额Declare @v_UpperPart V ARCHAR(200)Declare @v_UpperStr V ARCHAR(200) -- 大写金额Declare @i_I intselect @v_LowerStr=LTRIM(RTRIM(STR(@n_LowerMoney,20,2) )) --四舍五入为指定的精度并删除数据左右空格select @i_I = 1select @v_UpperStr = ''while ( @i_I <= len(@v_LowerStr))beginselect @v_UpperPart=casesubstring(@v_LowerStr,len(@v_LowerStr) - @i_I + 1,1) WHEN '.' THEN '元'WHEN '0' THEN '零'WHEN '1' THEN '壹'WHEN '2' THEN '贰'WHEN '3' THEN '叁'WHEN '4' THEN '肆'WHEN '5' THEN '伍'WHEN '6' THEN '陆'WHEN '7' THEN '柒'WHEN '8' THEN '捌'WHEN '9' THEN '玖'END+ case @i_IWHEN 1 THEN '分'WHEN 2 THEN '角'WHEN 3 THEN ''WHEN 4 THEN ''WHEN 5 THEN '拾'WHEN 6 THEN '佰'WHEN 7 THEN '仟'WHEN 8 THEN '万'WHEN 9 THEN '拾'WHEN 10 THEN '佰'WHEN 11 THEN '仟'WHEN 12 THEN '亿'WHEN 13 THEN '拾'WHEN 14 THEN '佰'WHEN 15 THEN '仟'WHEN 16 THEN '万'ELSE ''ENDselect @v_UpperStr = @v_UpperPart + @v_UpperStrselect @i_I = @i_I + 1end--print '//v_UpperStr='+@v_UpperStr +'//' if ( @v_TransType=0 )beginselect @v_UpperStr=REPLACE(@v_UpperStr,'零拾','零')select @v_UpperStr=REPLACE(@v_UpperStr,'零佰','零')select @v_UpperStr=REPLACE(@v_UpperStr,'零仟','零')select @v_UpperStr=REPLACE(@v_UpperStr,'零零零','零') select @v_UpperStr=REPLACE(@v_UpperStr,'零零','零')select @v_UpperStr=REPLACE(@v_UpperStr,'零角零分','整') select @v_UpperStr=REPLACE(@v_UpperStr,'零分','整')select @v_UpperStr=REPLACE(@v_UpperStr,'零角','零')select @v_UpperStr=REPLACE(@v_UpperStr,'零亿零万零元','亿元')select @v_UpperStr=REPLACE(@v_UpperStr,'亿零万零元','亿元' select @v_UpperStr=REPLACE(@v_UpperStr,'零亿零万','亿') select @v_UpperStr=REPLACE(@v_UpperStr,'零万零元','万元') select @v_UpperStr=REPLACE(@v_UpperStr,'万零元','万元') select @v_UpperStr=REPLACE(@v_UpperStr,'零亿','亿')select @v_UpperStr=REPLACE(@v_UpperStr,'零万','万')select @v_UpperStr=REPLACE(@v_UpperStr,'零元','元')select @v_UpperStr=REPLACE(@v_UpperStr,'零零','零')end-- 对壹元以下的金额的处理if ( substring(@v_UpperStr,1,1)='元' ) beginselect @v_UpperStr=substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))endif (substring(@v_UpperStr,1,1)= '零') begin select @v_UpperStr=substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))endif (substring(@v_UpperStr,1,1)='角') begin select @v_UpperStr=substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))endif ( substring(@v_UpperStr,1,1)='分') beginselect @v_UpperStr=substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))endif (substring(@v_UpperStr,1,1)='整')begin select @v_UpperStr = '零元整'endreturn @v_UpperStrendgo/*/*5.写一个函数Custom_A VG模拟多名裁判打分时求平均值的函数,去掉一个最高分、一个最低分、然后取平均。

T-SQL练习题

T-SQL练习题

T-SQL练习题
一、数据表及操作:
所示。

3.用UPDATE语句实现更新:把工号为“02004”的教师的部门代号修改为“05”。

4.DELETE语句实现删除:删除部门代号为“03”的所有的教师信息。

二、查询
下面的查询基于下图的3个表进行。

1.查询全体学生的姓名、学号、所在系。

2.查询年龄不在20~23岁之间的学生姓名、系别和年龄。

3.查询所有姓刘学生的姓名、学号和性别。

4.求各个课程号及相应的选课人数。

5.查询每个学生的学号、姓名、选修的课程名及成绩
6.将所有学生的年龄增加1岁。

7.检索不学课程号为“C01”课程的学生信息
8.检索至少学过课程号为“C01”和“C02”的学生信息;
9.从学生表中删除成绩出现过0分的所有学生信息
10.找出没有选修过“数据库基础”课程的所有学生姓名
11.检索所有比“宋平”年龄大的学生的姓名、年龄和性别,
12.将选课在3门以上(包括3门)的学生的学号,姓名,平均分和选课门数
按平均分降序排序,并将结果存于数据库表stu_temp(字段名为学号,姓名,平均分和选课门数)
13.将“高等数学”课程不及格的成绩修改为0分。

T-SQL综合练习

T-SQL综合练习

T-SQL综合练习T-SQL综合练习注:没有指定表的,所有都是使用AdventureWorks,用T-SQL 语句完成题目要求。

1.查询表Sales.CreditCard中的CardNumber,更改列标题为…Credit CardNumber?2.查询表product中的categoryid,unitprice并分别给定例标题产品类别代号,单价;系统先对产品类别递增排序,然后在每个产品类别内按照单价减序排列。

3.查询表employee中的title(产品标识符),要求得到唯一的产品标识符。

4.利用查询得到今天,明天,前天的现在时间.5.在employee表和contact表中,查询列为fullname,VacationHours,SickLeaveHours,?休假总数?.其中fullname为firstname、lastname 字符的结合字符串,休假总数,为前两列的和。

6.为所有的product表中的productNuberm数据开头增加04编号,要求0要出现。

7.查询contact表中区号为415的所有电话号码。

8.查询address表中地址为4个字符的邮政编码,其邮政编码的第一个字符限制在A-E、第二个字符为A-Z,最后两个字符分别为数字。

查询表contact中所有一AI开头,并且第三个字母不是a的名称,并用firstname 对其进行排序。

查询store表中所有CustomID以1开头,且Name以B开头的行。

9.查询employees表中职称title不是Design Engineer、ToolDesigner或者Marketing Assistant的员工的名单。

10.在表produst中查询ProductID,ProductModelID列,并且要求ProductModelID产品型号为20及21的红色(red)产品。

在表produst中查询ProductID,ProductModelID,并且要求ProductModelID产品型号为20和21的红色(red)产品。

t_sql编程例题

t_sql编程例题

t_sql编程例题当涉及到T-SQL编程,我们通常会涉及到数据库查询、存储过程、触发器等方面。

下面我将针对这些方面提供一些例题和解答。

1. 数据库查询:题目,假设有一个学生表(Student),包含学生ID (StudentID)、姓名(Name)、年龄(Age)和成绩(Grade)四个字段。

请编写一个T-SQL查询,找出成绩大于80分的学生信息。

解答,SELECT FROM Student WHERE Grade > 80;2. 存储过程:题目,编写一个存储过程,根据输入的学生ID,返回该学生的姓名和年龄。

解答:CREATE PROCEDURE GetStudentInfo.@StudentID int.AS.BEGIN.SELECT Name, Age FROM Student WHERE StudentID =@StudentID;END.3. 触发器:题目,在学生表(Student)中,当插入新记录时,自动在成绩表(Grade)中插入对应的学生ID和成绩(初始值为0)。

解答:CREATE TRIGGER InsertGrade.ON Student.AFTER INSERT.AS.BEGIN.INSERT INTO Grade (StudentID, Grade) SELECT StudentID,0 FROM inserted;END.这些例题涵盖了T-SQL编程中常见的查询、存储过程和触发器。

通过这些例题,你可以加深对T-SQL编程的理解,并在实际工作中更好地应用T-SQL编程技巧。

希望这些例题能够帮助到你。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

作业
创建的产品销售数据库,数据库名为
姓名拼音首字母CPXS,数据库,姓名拼音首字母CPXS包含下列3个表:
产品表:表名为CP,描述产品信息
销售商表:表名为XSS,描述销售商信息
产品销售表:表名为XSCP,描述产品的销售信息.
1) 使用T-SQL实现创建数据库名称为“姓名拼音首字母CPXS”。

要求截查询分析器中运行后的图。

要求:主要数据文件:逻辑名CPXS_data,物理文件名e:\CPXS.mdf,初始大小为10MB,最大为40MB,增长幅度为10%.
日志文件逻辑名cpxs_log,物理文件名e:\CPXS_log.ldf,初始大小为2MB,最大为5MB,增长幅度为1MB.
2)利用企业管理器在“姓名拼音首字母CPXS”数据库中创建表CP、XSS、XSCP
要求截表结构图,在表上右击打开设计表截图
产品表(CP)结构
销售商(XSS)表结构
产品销售(XSCP)表结构
3)利用企业管理器向3张表添加数据如下:要求打开表,截表中数据图
XSCP表数据。

相关文档
最新文档