.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 |
.Net开发工程师笔试试题的更多相关文章
- Web前端开发工程师面试题
Web前端开发工程师面试题1.说说css的优先级?2.在移动端中,常常使用tap作为点击事件,好处是?会带来什么问题?3.原生JS的window,onload与Jquery的$(document).r ...
- iOS开发工程师笔试题
iOS开发工程师笔试题 1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? Object-c的类不可以多重继承:可以 ...
- 珍藏版 Python 开发工程师面试试题
珍藏版 Python 开发工程师面试试题 说明:不拿到几家公司的offer,那就是卑鄙的浪费 一.Python_基础语法 1.可变与不可变类型: 2.浅拷贝与深拷贝的实现方式.区别:deepcopy如 ...
- python后端开发工程师考证试题
python开发工程师考证试题 问答题链接 python开发工程师考证试题 选择题 题目 关于 Python 程序格式框架的描述,以下选项中错误的是 ( A ) A: Python 语言不采用严格的“ ...
- 复盘鼎甲科技2020web开发工程师-笔试题(校招)
复盘鼎甲科技2020web开发工程师-笔试题(校招) 本试卷以W3C规范为准,JavaScript使用ES5标准,除特别说明外,不考虑各个浏览器之间差异. 一.多项选择题 以下标签是行内元素(inli ...
- 牛客网试卷: 京东2019校招笔试Java开发工程师笔试题(1-)
1.在软件开发过程中,我们可以采用不同的过程模型,下列有关 增量模型描述正确的是() A 是一种线性开发模型,具有不可回溯性 B 把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析 ...
- C++开发工程师面试题库 50~100道
51. New delete 与malloc free 的联系与区别?答案:都是在堆(heap)上进行动态的内存操作.用malloc函数需要指定内存分配的字节数并且不能初始化对象,new 会自动调用对 ...
- C++开发工程师面试题库 1~50道
1. 指出以下变量数据存储位置 全局变量int(*g_pFun)(int);g_pFun=myFunction;g_pFun存储的位置(A ) 为全局的函数指针 指向空间的位置( B) 所有函数 ...
- 【面试题】Python高级开发工程师面试题
线上面试题,有空整理答案,欢迎大家回复答案
随机推荐
- 配置vmWare10(桥接模式),使得虚拟机成为网络中的一台独立的主机
受到启发的原文:https://www.cnblogs.com/liongis/p/3265458.html 第一步:配置虚拟网络 第二步:配置桥接(VMnet0) 第三步:给虚拟机配置桥接模式 第四 ...
- 内存表 FDMemTable ClientDataSet CreateDataSet 动态创建字段
https://community.embarcadero.com/index.php/blogs/entry/firedac-in-memory-dataset-tfdmemtable Client ...
- 提示框一段时间以后消失setTimeout
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JPA with Hibernate implementation
https://code.google.com/p/jpa-basics-tutorial/source/checkout http://alextretyakov.blogspot.com/2013 ...
- Symfony 建立一个Bundle
如果说,这个时候你萌生了一个去看一看Symfony源码的想法,个人建议还是算了,看了之后,你就会感到非常迷茫.因为他实在是大于绝大部分你使用过的框架,并且有多达近二十个的插件,使用了一些非常精巧的设计 ...
- window 10 javac不是内部或外部命令
今天在新电脑上配置Java环境变量(window 10),不管怎么配置都是提示“javac不是内部或外部命令”,java,java -version命令是正常的. 后来发现是path路径配置的不对,修 ...
- NormalMap原理详细解析
NormalMap的实现标志着对渲染流水线的各个环节以及矩阵变化有了正确和深入的认识.这里记录一下学习过程,以及关于NormalMap的诸多细节. 刚开始想要实现NormalMap程序的时候,查阅的是 ...
- python pip 代理设置
pip install --proxy="user:password@server:port" packagename origin url: http://xiuxixiuxi. ...
- oracle 分页其实一个子查询就好了,没理解的自然只能见样学样
.首先rownum是一个查询缓存级别的东西,所以以下写法是错误的 ; 因为rn其实不是student表的内容,看做一个缓存编号就好 但是有些人不服了,加个a.rn<= ;结果还是不行,这下相信了 ...
- TOGAF架构培训材料学习总结
作于一个架构师尤其是企业架构师来说,丰富的理论知识可以帮助他在架构规划及管理过程中站在更高的角度去看待问题,历史发展原因有很多已成体系的架构理论,TOGAF是近年来比较接地气的,受到了政府和银 ...