.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高级开发工程师面试题
线上面试题,有空整理答案,欢迎大家回复答案
随机推荐
- C#抽象类与接口的区别【转】
一.抽象类: 抽象类是特殊的类,只是不能被实例化(可以用派生类实例化基类对象):除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法(当然它可以有普通方法),这是普通类所不能的.抽象方 ...
- Eclipse开启或取消快速导航栏(toggle breadcrumb)
在Eclipse中快速调出导航栏 关闭导航栏: 在视图的设置中,去掉breadcrum的勾选状态
- 44. Wildcard Matching (String; DP, Back-Track)
Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character. ...
- 59. Spiral Matrix II (Array)
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For ...
- Liunx下如何使用kettle
在windows下完成所有操作, 把xxx.ktr上传到liunx, Pan.sh xxx.ktr 就完成了
- C#通用数据访问类库
说明:此篇文章是给那些和我一样仍在使用ADO.NET访问数据库的.NET开发人员写的,因为某些原因,比如还在使用.NET3.0以下版本开发.NET应用或者所使用的数据库对ORM支持不是很好,或者是对O ...
- How to use mouse to moving windows of not have title bar?
How to use mouse to moving windows of not have title bar? #include "widget.h" #include < ...
- 使用mybatis提供的各种标签方法实现动态拼接Sql。使用foreach标签实现遍历查询。比如实现select * from user where id in(1,10,24)这条sql查询语句。
向sql传递数组或List,mybatis使用foreach解析,如下: 需求: 传入多个id查询用户信息,用下边的sql实现: select * from user where id in(1,10 ...
- 自学PHP的野方法
1.基础知识 最早的基础知识仅限于那么一点点的html和css,比牛毛还牛毛的一点点.所以最开始是从immoc上看视频和跟着练习,花了有一个多月,看完一个路径从:零开始学习ThinkPHP框架,由于基 ...
- Java语句
Java的条件语句,循环语句 /* switch语句格式: switch(表达式) { case 值1: 语句体1; break; case 值2: 语句体2; break; ... default: ...