.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)的问题,可以使用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 |
最新文章
- 添加自编译的apache为linux系统服务
- 实用redis前需了解的5大事项
- 萌新笔记——C++里将string类字符串(utf-8编码)分解成单个字(可中英混输)
- NodeJs使用asyncAwait两法
- ios项目上传svn丢失*.a文件
- 【开发】Dialog 对话框
- ajax xmlhttprequest status
- 当MVC4无法跳转时
- 目标HttpController在ASP.NET Web API中是如何被激活的:目标HttpController的选择
- 3、Spring的AOP详解和案例
- 【java虚拟机系列】java虚拟机系列之JVM总述
- FOFA爬虫大法——API的简单利用
- Java框架spring 学习笔记(十二):aop实例操作
- Exception.ToString()使用及其他方法比较
- mysql in 排序 也可以按in里面的顺序来排序
- 下载 rpm 源码包并重新编译
- 如何下载腾讯视频的视频转为MP4常用格式视频
- Oracle 11g 物理Dataguard日常操作维护(二)
- CAShapeLayer 画直线
- MESS-配置
热门文章
- BDE 升级到FireDAC
- msxml3.dll 执行页内操作时的错误
- 用MyEclipse JPA创建项目
- 跟我学算法 - 读取excel文件(xlrd)
- 7.25 8figting!
- linux 使用systemctl 启动服务报错: Error: No space left on device
- S导入部门数据 更新父部门、责任人
- 2015年传智播客JavaEE 第168期就业班视频教程17-登录功能业务逻辑实现(代码)
- 11. Container With Most Water 装水最多的容器
- 使用Log4J监控系统日志邮件警报