SQL Server.Net开发工程师笔试试题

首先片【数据库技术】

依附自己举行的答案,提出不足之处

 

而今产生一个SQL Server
2000本子的数据库,里面含有有三独表Info、InfoReply、User,分别代表信息、信息评论和用户表,包含的字段分别如下:

Info

infoID

INT

信息ID(自增列)

infoTitle

NVARCHAR(100)

信息标题

infoContent

NVARCHAR(2000)

信息正文

infoPubDate

DATETIME

信息发布日期

infoPubUser

VARCHAR(30)

信息发布用户帐号

 

InfoReply

infoReplyID

INT

评论ID(自增列)

infoID

INT

信息ID

infoReplyContent

NVARCHAR(2000)

评论正文

infoReplyDate

DATETIME

评论日期

infoReplyUser

VARCHAR(30)

评论用户帐号

 

User

userNo

VARCHAR(30)

用户帐号

userName

NVARCHAR(30)

用户姓名

 

老三独说明的关系得以经下列模型图来叙述:

 

 

现有下列问题:

(1)   请说明在上述模型图中,PK和FK1、FK2的含义?

  答:pk是主键 fk1、fk2分别是外面

  表infoReply有俩独外键fk1,fk2

  表info有一个外键pk1

 

 

(2)  
现在时有发生一个询问,需要回到一个时发布的20长长的信息列表,要求涵盖:信息ID、信息题、信息发布时、信息发布人姓名、信息评论总数和最后评论时,并且依照最终评价时排序,请于闹该查询的SQL语句?

 

Select top 20 i.InfoID,i.InfoTItle,i.InfoPubDate,u.userName,

count(ir.infoID)as ReplyCount   –信息评论总数总数

ir.infoReplyDate

from Info i

inner join User u on i.infoPubuser =u.userNo

inner join InfoReply ir on ir.infoID=i.inforID

group by i.InfoID,i.InfoTItle,i.InfoPubDate,u.userName

order by ir.inforReplyUser desc

 

(3)  
仍是第(2)中的询问要求,现在要Info表和User表之间未设有其他外键约束,即infoPubUser表示的用户帐号可能以User表中就为剔除,这时如如继承回来时的20长达消息列表,包含(2)中千篇一律之排,该SQL语句应该怎么写?

Select top 20 i.InfoID,i.InfoTItle,i.InfoPubDate,u.userName,

count(ir.infoID)as ReplyCount   –信息评论总数总数

ir.infoReplyDate

from Info i

left join User u on i.infoPubuser =u.userNo

left join InfoReply ir on ir.infoID=i.inforID

group by i.InfoID,i.InfoTItle,i.InfoPubDate,u.userName

order by ir.inforReplyUser desc

 

 

(4)  
假设Info表有一个字段infoReplyCount(信息评论总数),那我们用怎么开才能够被用户每多一长长的评论,该字段自动+1,说发大概思路就,能写有SQL语句极好

当表Info创建一个触发器,原理:当评论表数据插入后(after关键字)就会接触下面update语句

Create trigger tri_addReply

On InfoReply

After insert

As

Beigin

    Declare @infoID int  –定义一个变量

Select @infoID=infoID from inserted –从插入表选出infoID

Update infoReply set infoReplyCount=infoReplyCount+1 where
infoID=@infoID

end

(5)   写起返回各国一样长消息之褒贬总数的SQL语句

   Select i.infoID,count(ir.infoID)

From Info inner join InfoReply ir on i.infoID=ir.infoID

Group by i.infoID, ir.infoID

(6)  
假设发现Info表有多条记下丢失了,如何最好可怜程度地寻找有有略条记下丢失了,写有SQL语句。(不使InfoReply表)

       Select count(*) from Info –选出表中的总数

       Select max(infoID) from Info   –选出表中不过要命infoID

       之后以少个结实相减得到多少丢失记录

 

(7)  
假设发现Info表只发1长长的记下丢失了,如何了解少的笔录之ID,写起SQL语句(不使InfoReply表)

第一举行只稍判断,这个丢失的一律修记下不容许是最终一条记下

select rownum from

(select row_number()over (order by id desc) as rownum from
Info)—采用sql的分页函数

as a

where rownum not in(select id from Info)

 

(8)   仍然是(6)的问题SQL Server,可以使InfoReply表,写起SQL语句。

 

          Select count(infoID)from  –此语句统计多少条记下丢失

 (Select infoID from InfoReply

where infoID not in

(select infoID from Info)) as a   –查找来有些条丢记录停放a表中

(9)  
假设Info表有一个字段infoReplyCount(信息评论总数),infoReplyCount>=20的也罢热点帖子,小于20之为非热门帖子,请根据Info表的内容输出以下2行数据,要求SQL语句最简。

Select infoReplyCount as 数量,

(

    Case

When infoReplyCount>=20 then N‘热门’

Else N‘非热门’

End

) as 类别

From Info

 

类别

数量

热门

30

非热门

18

相关文章