T-SQL语句练习题

合集下载

T-SQL测试题

T-SQL测试题

1) 在SQL Server 中,为数据库表建立索引能够()。

A. 防止非法的删除操作B. 防止非法的插入操作C. 提高查询性能D. 节约数据库的磁盘空间2) 在SQL SERVER中,创建一个表使用()语句。

A. INSERTB. DROPC. CREATED. ALERT3) 在SQL SERVER中,下面关于视图说法错误的是()。

A. 对查询执行的大多数操作也可以在视图上进行B. 使用视图可以增加数据库的安全性C. 不能利用视图增加,删除,修改数据库中的数据D. 视图使用户更灵活的访问所需要的数据4) 在数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它是数据库设计的()阶段。

A. 需求分析B. 概要设计C. 逻辑设计D. 物理设计5) 在SQL Server 数据库中,如果强制要求grades表中的学员必须是Students表中存在的学员,以下描述正确的是()。

A. 在grades表中创建外键约束B. 在grades表中创建检查约束C. 在grades表中创建唯一约束D. 在grades表中创建默认约束6) 在SQL Server 数据库中,下面的T-SQL语句段执行第三句时出现错误,数据库中的内容修改情况是()。

BEGIN TRANSACTIONupdate Account set balance=7800 where id=1update Account set balance=9000 where id=1IF @@error <> 0ROLLBACK TRANSACTIONELSECOMMIT TRANSACTIONA. Account表中id为1的记录中balance字段的值被修改为7800B. Account表中id为1的记录中balance字段的值被修改为9000C. Account表中id为1的记录中balance字段的值不变D. 不可能发生这种情况7) 在SQL Server 数据库中,有关下列T-SQL语句的功能,说法正确的是()。

练习8 T-SQL编程答案

练习8 T-SQL编程答案

1.在查询分析器中分别调试如下程序,先修正错误再将结果以注释语句的形式写在相应程序的下方。

(1)declare @n decimal(5,2),@m varchar(10)go@n=99.995@m='n 的值为'print @m+@ngo改为:declare @n decimal(5,2),@m varchar(10)set @n=99.995set @m='n 的值为'PRINT @m+str(@n)Go(2)exec sp_addtype cy1,varchar(24)declare @a cy1set @a='abcd'select @a,datalength(@a)改为:exec sp_addtype cy1,'varchar(24)'godeclare @a cy1set @a='abcd'select @a,datalength(@a)(3)Use Studentgoselect 学号,成绩,等级=casewhen 成绩<=100 then 'A'when 成绩<90 then 'B'when 成绩<80 t hen 'C‟when 成绩<70 then …D‟when 成绩<60 then 'E'else …成绩输入有误!‟endfrom 课程注册go改为:Use Studentgoselect 学号,成绩,等级=casewhen 成绩<60 then 'E'when 成绩<70 then 'D'when 成绩<80 then 'C'when 成绩<90 then 'B'when 成绩<=100 then 'A'else '成绩输入有误!'endfrom 课程注册go(4)--本题的功能是求100以内的自然数之和declare @i int;@s intset @i=1set @s=0while @i<=100@s=@s+@i@i=@i+1print '100以内的自然数之和为: '+ltrim(str(@s))改为:declare @i int,@s intset @i=1set @s=0while @i<=100beginset @s=@s+@iset @i=@i+1endprint '100以内的自然数之和为: '+ltrim(str(@s))(5)/*本程序的功能是统计随机产生的1000个0到1之间小数以0.5为分界出现的次数,用以说明随机数的均匀性*/declare @r numeric(10,2),@m int,declare @n1 int,@n2 intset @n1=0set @n2=0while @m<=1000beginset @r=rand()if @r<=0.5@n1=@n1+1else@n2=@n2+1@m=@m+1endprint '小于等于0.5的随机数出现了'+ @n1+‟次‟print '小大于0.5的随机数出现了'+@n2‟+‟次‟改为:declare @r numeric(10,2),@m intdeclare @n1 int,@n2 intset @m=1set @n1=0set @n2=0while @m<=1000beginset @r=rand()if @r<=0.5set @n1=@n1+1elseset @n2=@n2+1set @m=@m+1endprint '小于等于.5的随机数出现了'+ str(@n1)+'次' print '小大于.5的随机数出现了'+str(@n2)+'次'2.计算1到10之间的奇数之和declare @i tinyint,@sum intset @sum=0set @i=0while @i>=0beginif(@i>=10)beginselect '总和'=@sumendelsebeginset @i=@i+1if(@i % 2) = 0continueelseset @sum=@sum+@iendend3.利用GOTO语句求出从1加到5的总和。

T-SQL试卷答案

T-SQL试卷答案

1.HAVING字句中应后跟(B )A.行条件表达式B.分组条件表达式C.试图序列D.列名序列2.数据定义语言的缩写词为(A )A.DDLB.DCLC.DMLD.DBL3.在SQL语言中,建立存储过程的命令为(A )A.CREATE PROCEDUREB.CREATE RULEC.CREATE DURED.CREATE FILE4.在SQL中,建立视图的命令为(C )A.CREATE SCHEMAB.CREATE TABLEC.CREATE VIEWD.CREATE INDEX5.SQL的视图的数据是从(A )中产生的A.基本表B.视图C.基本表或视图D.数据库6.从“产品”表里查询出价格高于产品名为“一次性纸杯”的产品的记录,此SQL语句为(D )A.Select * from 产品where 价格>’一次性纸杯’B.Select * from 产品where 价格>(select * from 产品where 产品名称>’一次性纸杯’)C.Select * from 产品where exists (产品名称=’一次性纸杯’)D.Select * from 产品where 价格>(select 价格from 产品where 产品名称=’一次性纸杯’)7.假设订单表orders用来存储的订单信息,cid代表客户编号,money代表单次订购额,现要查询每个客户的订购次数和每个客户的订购总金额,下面(A )sql语句可以返回正确结果。

A.Select cid,count(distinct(cid)),sum(money) from orders group by cidB.Select cid,count(distinct(cid)),sum(money) from orders order by cidC.Select cid count(cid),sum(money) from orders order by cidD.Select cid count(cid),sum(money) from orders group by cid8.实体关系中学生与任课教师之间具有(D )联系A.一对一B.一对多C.多对一D.多对多9.在SQL中,建立索引用(C )命名A.CREATE SCHEMAB.CREATE TABLEC.CREATE INDEXD.CREATE VIEW10.在SQL Server 2008中,声明一个最多可以存储10个字符的变量pwd,正确的代码是(B )A.DECLARE pwd VARCHAR(10)B.DECLARE @pwd VACHAR(10)C.pwd VARCHAR(10)D.@pwd VARCHAR(10)11.E-R图中,关系用下面(C )来表示A.矩形B.椭圆形C.菱形D.圆形12.下面变量中属于T-SQL中用户自定义的变量是(B )A.@@errorB.@numberC.AbcD.num113.在数据库中查询数据,一般根据(C )查询速度较快A.设置默认值的列B.设置为外键的列C.设置为主键的列D.设置检查约束的列14.分析下面的代码段,说法错误的是(D )(选择一项)1 CREATE PROCEDURE proc_stuInfo2 @stuName VARCHAR(10),3 @n INT OUTPUT,4 @stuAge=18 INT5 AS6 ….代码略7 GO89 DECLARE @s INT10 EXEC proc_stuInfo ‘张三’,@s,3011 EXEC proc_stuInfo @stuAge=22,@stuName=’李四’,@n=@s OUTPUTA.此代码段创建了一个存储过程,并测试调用此存储过程B.第4行代码有误C.第10行代码有误D.第11行代码有误15.关于存储过程,以下说法正确的是(A )A.不能在存储过程中使用CREATE VIEW命令B.T-SQL批代码的执行速度要快于存储过程C.存储过程必须带有参数D.存储过程不能返回结果集16.现有书目表book,包含字段:price(float);现在查询一条书价最高的书目的详细信息,以下语句正确的是(BC )(选两项)A.Select top1 * from book order by price ascB.Select top1 * from book order by price descC.Select top1 * from book where price=(select max(price) from book)D.Select top1 * from book where price=max(price)17.现有订单表orders,包含数据如下表。

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练习题参考答案

T-SQL练习题参考答案一、StudentInfo数据库已发给大家。

其中包含两个表:stuInfo和stuMarks。

根据这个数据库完成下列各题:1.编写T-SQL查找李文才的左右同桌?分析:第一步,找出“李文才“的座位号;第二步,李文才的座位号加1或减1/*--查找李文才的信息--*/DECLARE @name varchar(8) --学员姓名 SET @name='李文才' --使用SET 赋值SELECT * FROM stuInfo WHERE stuName = @name /*--查找李文才的左右同桌--*/ DECLARE @seat int --座位号SELECT @seat=stuSeat FROM stuInfo --使用SELECT赋值 WHEREstuName=@name SELECT * FROM stuInfoWHERE (stuSeat = @seat+1) OR (stuSeat = @seat-1) GO2. 统计并显示本班笔试平均分,如果平均分在70以上,显示“成绩优秀“,并显示前三名学员的考试信息;如果在70以下,显示“本班成绩较差“,并显示后三名学员的考试信息。

分析:第一步,统计平均成绩存入临时变量;第二步,用IF-ELSE判断;declare @myavg floatselect @myavg=avg(writtenExam) from stuMarks --使用select赋值print '本班的平均分:'+convert(varchar(5),@myavg) if (@myavg>70) beginprint '本班笔试成绩优秀!'select top 3 * from stuMarks order by writtenExam desc end elsebeginprint '本班笔试成绩优秀!'select top 3 * from stuMarks order by writtenExam end go3. 本次笔试成绩较差,假定要提分,确保每人笔试都通过。

T-SQL语句练习题

T-SQL语句练习题

一、根据要求用T-SQL语句创建数据库和表。

创建数据库“英才大学成绩管理”。

分别创建三个表,具体的表名、字段名如下:学生(学号,姓名,性别,出生年月,籍贯,班级) 其中性别字段只能为“男”或“女”课程(课程编号,课程名称,学分) 其中课程名称字段为唯一值约束成绩(学号,课程编号,成绩)带下划线的字段为主键,表之间的外键关联参考下图,各字段的数据类型应尽量合理。

CREATE DATABASE 英才大学成绩管理create table 学生(学号 char(6) primary key,姓名 char(6),性别 char(2) check(性别='男' or 性别='女'),出生年月 datetime,籍贯 varchar(50),班级 char(12),)create table 课程(课程编号 char(5) primary key,课程名称 char(20) unique,学分 smallint,)create table 成绩(学号 char(6) references 学生(学号),课程编号 char(5) references 课程(课程编号),成绩 decimal(5,2),primary key(学号,课程编号))二、根据T-SQL语句写出执行结果(20分,每题4分)对上题所创建的表添加记录后如图所示,详细写出下面的SQL语句的执行结果。

1、select * from 课程 where 课程编号='30442'1、2、select 姓名 from 学生where 性别='女' and 籍贯='辽宁'2、3、select 姓名,课程名称,成绩 from 学生,课程,成绩where 学生.学号=成绩.学号 and 课程.课程编号=成绩.课程编号and 学分='4'3、4、select max(成绩) as 最高分 from 课程,成绩where 课程.课程编号=成绩.课程编号 and 课程名称='C语言程序设计' 4、5、select 籍贯,count(*) as 人数from 学生where 班级='计ZG091' group by 籍贯5、三、对第一题中的表用T-SQL语句完成如下操作。

数据库期末复习_T-SQL语句

数据库期末复习_T-SQL语句

T-SQL语句应用实例【例1-1】查询XSCJ数据库中所有学生基本信息。

使用查询分析器实现这个查询的具体步骤如下:①依照本章 1.3.1节中介绍的方法登录到服务器,打开查询分析器窗口,如图1-26所示。

②在查询编辑窗口中用户可以输入SQL语句如下:USE XSCJGOSELECT * FROM 学生基本信息表 / 视图GO(去掉/ 视图,完成)【例1-2】查询学生成绩信息。

在查询分析器中运行如下命令:USE XSCJGOSELECT * FROM 成绩表GO(完成)【例1-2】查询pubs示例数据库中authors表的信息。

USE pubsGOSELECT * FROM authorsGO(用上题)【例2-3】计算XSCJ数据库中“学生基本信息表”的总行数。

USE XSCJGOSELECT COUNT(*) AS '学生总人数' FROM 学生基本信息表GO(完成)【例2-5】在成绩表中查询课程编号为003的课程的最高分和最低分。

USE XSCJGOSELECT MAX(成绩) AS '最高分',MIN(成绩) AS '最低分'FROM 成绩表WHERE 课程编号='003'GO(完成)【例2-14】显示XSCJ数据库信息。

sp_helpdb XSCJsp_helptext 视图名或表名sp_helpindex 表名(can not)【例2-15】创建一个名称为somename的数据库,利用sp_renamedb存储过程将该数据库重命名为newnameCREATE DATABASE somenameGOsp_renamedb 'somename','newname'GO(完成)【例2-16】显示超级用户dbo的用户信息。

sp_helpuser dbosp_help(can not)【例2-17】在系统中添加一个名为test、密码为1234的登录帐号。

T-SQL编程及练习题

T-SQL编程及练习题

• Case语句
CASE 表达式 WHEN 值1 THEN 返回值1 …… [ELSE 返回值n] END CASE WHEN 表达式1 THEN 返回 值1 …… [ELSE 返回值n] END
T-SQL流程控制示例
示例:求1到100间的偶数和
declare @isum int declare @i int begin set @isum=0 set @i=0 while(@i<100) begin set @i=@i+1 if(@i%2=0) begin set @isum=@isum+@i print '@i='+cast(@i as varchar) end else continue end print @isum end
• 执行存储过程时,可以有3种不同的返回值
– 以return n的形式返回一个整数值。 – 指定output返回参数来返回值。 – 执行T-SQL语句返回数据集,如select语句。
• 示例:return n形式
CREATE PROCEDURE [dbo].[test2] AS BEGIN Declare @avgsal money SELECT @avgsal=avg(salary) FROM employees Return @avgsal END
CREATE PROCEDURE [dbo].[test1] @department_id int AS SELECT * FROM employees WHERE department_id=@department_id
• 执行:
EXECUTE test1 @department_id=10
存储过程返回值
用户定义函数的两种类型
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、根据要求用T-SQL语句创建数据库和表。

创建数据库“英才大学成绩管理”。

分别创建三个表,具体的表名、字段名如下:学生(学号,姓名,性别,出生年月,籍贯,班级) 其中性别字段只能为“男”或“女”课程(课程编号,课程名称,学分) 其中课程名称字段为唯一值约束成绩(学号,课程编号,成绩)带下划线的字段为主键,表之间的外键关联参考下图,各字段的数据类型应尽量合理。

CREATE DATABASE 英才大学成绩管理create table 学生(学号char(6) primary key,姓名char(6),性别char(2) check(性别='男' or 性别='女'),出生年月datetime,籍贯varchar(50),班级char(12),)create table 课程(课程编号char(5) primary key,课程名称char(20) unique,学分smallint,)create table 成绩(学号char(6) references 学生(学号),课程编号char(5) references 课程(课程编号),成绩decimal(5,2),primary key(学号,课程编号))二、根据T-SQL语句写出执行结果(20分,每题4分)对上题所创建的表添加记录后如图所示,详细写出下面的SQL语句的执行结果。

1、select * from 课程where 课程编号='30442'1、2、select 姓名from 学生where 性别='女' and 籍贯='辽宁'2、3、select 姓名,课程名称,成绩from 学生,课程,成绩where 学生.学号=成绩.学号and 课程.课程编号=成绩.课程编号and 学分='4'3、4、select max(成绩) as 最高分from 课程,成绩where 课程.课程编号=成绩.课程编号and 课程名称='C语言程序设计' 4、5、select 籍贯,count(*) as 人数from 学生where 班级='计ZG091' group by 籍贯5、三、对第一题中的表用T-SQL语句完成如下操作。

1、按年龄由大到小显示学生的姓名和班级。

select 姓名,班级from 学生order by 出生年月2、查询周悦含同学所有课程的平均分。

select avg(成绩) from 学生,成绩where 学生.学号=成绩.学号and 姓名='周悦含'3、把成绩表中所有不及格的分数都改为40分。

update 成绩set 成绩=40where 成绩<604、创建一个视图,确切的字段名是:学生姓名,课程名称,分数,其中的记录不包括成绩不及格的学生。

create view v01(学生姓名,课程名称,分数)asselect 姓名,课程名称,成绩from 学生,课程,成绩where 学生.学号=成绩.学号and 课程.课程编号=成绩.课程编号and 学生.学号not in(select 学号from 成绩where 成绩<60)5、创建一个触发器,规定学生不能转班级,即不能修改学生表的班级字段的值。

create trigger tr01on 学生for updateasif update(班级)beginrollback tranend一、根据要求用T-SQL语句创建数据库和表。

创建数据库“英才大学学生管理”。

分别创建三个表,具体的表名、字段名如下:系(系编号,系名称,系主任,班级个数) 其中系名称字段非空班级(班级编号,班级名称,班级人数,班长姓名,专业,系编号) 其中班级名称字段唯一值约束学生(学号, 姓名,性别,出生年月,籍贯,班级编号) 其中性别字段只能为“男”或“女”带下划线的字段为主键,表之间的外键关联参考下图,各字段的数据类型应尽量合理。

CREATE DATABASE 英才大学学生管理create table 系(系编号char(4) primary key,系名称char(20) not null,系主任char(6),班级个数smallint,)create table 班级(班级编号char(8) primary key,班级名称char(12) unique,班级人数smallint,班长姓名char(6),专业char(20),系编号char(4) references 系(系编号))create table 学生(学号char(6) primary key,姓名char(6),性别char(2) check(性别='男' or 性别='女'), 出生年月datetime,籍贯varchar(50),班级编号char(8) references 班级(班级编号))二、根据T-SQL语句写出执行结果对上题所创建的表添加记录后如图所示,请详细写出下面的SQL语句的执行结果。

1、select * from 系where 班级个数between 14 and 172、select 班长姓名from 班级where 班级人数<26 or 专业='计算机网络技术'3、select 姓名,系名称from 学生,班级,系where 学生.班级编号=班级.班级编号and 班级.系编号=系.系编号and 籍贯='山东'4、select sum(班级个数) as 班级数from 系5、select 籍贯,count(*) as 人数from 学生,班级where 学生.班级编号=班级.班级编号and 班级名称='网ZG092' group by 籍贯三、对第一题中的表用T-SQL语句完成如下操作。

1、在班级表中查询班级人数最多的班级名称和人数。

select 班级名称,班级人数from 班级where 班级人数= (select max(班级人数) from 班级)2、查询姓王的学生的姓名和所在班级。

select 姓名,班级名称from 学生,班级where 学生.班级编号= 班级.班级编号and 姓名like'王%'3、在班级表中删除系部是“管理系”的记录。

delete 班级where 系编号=(select 系编号from 系where 系名称='管理系') 4、显示比管理系班级人数最少的班级的人数还少的班级名称和专业。

select 班级名称,专业from 班级where 班级人数< all(select 班级人数from 班级,系where 班级.系编号=系.系编号and 系名称='管理系')5、为系表创建一个触发器,实现一次最多只能删除2条记录。

create trigger tr01on 系for deleteasif (select count(*) from deleted )>2beginrollback tranend一、根据要求用T-SQL语句创建数据库和表。

创建数据库“英才大学教师管理”。

分别创建三个表,具体的表名、字段名如下:系(系编号,系名称,系主任,教研室个数) 其中系名称字段非空教研室(教研室编号,教研室名称,教师人数,系编号)教师(教师编号,姓名,性别,职称,教研室编号) 其中性别字段只能为“男”或“女”带下划线的字段为主键,表之间的外键关联参考下图,各字段的数据类型应尽量合理。

CREATE DATABASE 英才大学教师管理create table 系(系编号char(4) primary key,系名称char(20) not null,系主任char(6),教研室个数smallint,)create table 教研室(教研室编号char(6) primary key,教研室名称char(20),教师人数smallint,系编号char(4) references 系(系编号))create table 教师(教师编号char(7) primary key,姓名char(6),性别char(2) check(性别='男' or 性别='女'),职称char(10),教研室编号char(6) references 教研室(教研室编号))二、根据T-SQL语句写出执行结果对上题所创建的表添加记录后如图所示,请详细写出下面的SQL语句的执行结果。

1、select * from 系where 教研室个数<42、select 姓名,职称from 教师where 职称='助教' or 性别='女'3、select 姓名as 教师姓名from 教研室,教师where 教研室.教研室编号=教师.教研室编号and 教研室名称='软件教研室'4、select top 2 教研室名称from 教研室order by 教师人数desc5、select 职称, count(*)as 人数from 教师group by 职称having 职称not like '%教授'三、对第二题中的表用T-SQL语句完成如下操作。

1、查询全部男教师的教师编号、姓名和职称。

select 教师编号,姓名,职称from 教师where 性别='男'2、通过教研室表查询信息工程系下的教研室的教师总数。

select sum(教师人数)from 教研室where 系编号=(select 系编号from 系where 系名称='信息工程系') 3、删除教研室数最少的系部。

delete from 系where 教研室个数=(select min(教研室个数) from 系)4、创建一个视图,包括教师姓名、性别、职称、教研室四个字段。

然后利用该视图查询硬件教研室的教师姓名和职称。

create view v01asselect 姓名,性别,职称,教研室名称from 教师,教研室where 教师.教研室编号=教研室.教研室编号select 姓名,职称from v01where 教研室名称='硬件教研室'5、创建一个存储过程,当输入一个系名称时,能显示该系所有的教师姓名。

并写出存储过程的执行语句。

create proc p01 @系编号char(4)asselect 姓名from 教师,教研室where 教师.教研室编号=教研室.教研室编号and 系编号= @系编号exec p01 '1103'。

相关文档
最新文档