| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1011 人关注过本帖
标题:SQL 疑难笔试题[求助]急
只看楼主 加入收藏
xiangnanfox
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-10-12
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
SQL 疑难笔试题[求助]急
现在有一个SQL Server 2000版本的数据库,里面包含有三个表Info、InfoReply、User,分别表示信息、信息评论和用户表,包含的字段分别如下:
Info:
infoID            INT                信息ID(自增列)主键
infoTitle         NVARCHAR(100)      信息标题
infoContent       NVARCHAR(2000)     信息正文
infoPubDate       DATETIME           信息发布日期
infoPubUser       VARCHAR(30)        信息发布用户帐号(外键指向User表中userNo)

InfoReply:
infoReplyID       INT                评论ID(自增列)主键
infoID            INT                信息ID(外键指向Info表中infoID)
infoReplyContent  NVARCHAR(2000)     评论正文
infoReplyDate     DATETIME           评论日期
infoReplyUser     VARCHAR(30)        评论用户帐号(外键指向User表中userNo)

User
userNo            VARCHAR(30)        用户帐号
userName          NVARCHAR(30)       用户姓名

1.假设发现Info表有多条记录丢失了,如何最大程度地找出有多少条记录丢失了,写出SQL语句。(不使用InfoReply表)
2.假设发现Info表只有1条记录丢失了,如何知道丢失的记录的ID,写出SQL语句(不使用InfoReply表)
3.仍然是第一题的问题,可以使用InfoReply表,写出SQL语句
4.假设Info表有一个字段infoReplyCount(信息评论总数),infoReplyCount>=20的为热门帖子,小于20的为非热门帖子,请根据Info表的内容输出以下2行数据,要求SQL语句最简
类别     数量
热门     30
非热门   18

[ 本帖最后由 xiangnanfox 于 2010-10-12 15:01 编辑 ]
搜索更多相关主题的帖子: 疑难 笔试 SQL 
2010-10-12 14:58
zhaoyang1008
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:30
专家分:110
注 册:2010-9-15
收藏
得分:10 
我的思路是这样的:
第一题
info表中的infoID字段是自增列,而且删除记录后剩余记录的infoID的值并不会改变,其最大值就是一共的记录数所以少的记录数最大可能应该是infoID的最大值与现有记录数的差
程序代码:
declare @max int
declare @number int
select @max=Max(infoID),@number=count(*) from info
select (@max-@number) as Numbershorted
第二题
还是根据infoID列,假设这个表一行都没少,那么其所有InfoID的字段值得和就是一个等差数列的和SUM1,其减去实际上infoID的所有字段值的和就是缺少的那条记录的infoID,如果这个值是0,就表明丢失的刚好是最后一条记录
程序代码:
declare @max int
declare @sum1 int
declare @sum2 int

 select @max=max(info),@sum2=sum(infoID) from info
set @sum1=(@max*(@max+1))/2
if(@sum1-@sum2)=0
begin
      select @max+1 as lostone
end
else
   select @sum1-@sum2 as lostone
第三题
select count(*) as lostitems from infoReply left join Info
on infoRely.infoID=info.infoID where infoTitle=null
第四题
select "热门" as 类别,count(*) from Info where infoReplycount>=20
union
select "非热门" as 类别 ,count(*) from Info where infoReplycount<20

2010-10-14 22:36
liuliang9767
Rank: 2
等 级:论坛游民
帖 子:12
专家分:31
注 册:2010-10-13
收藏
得分:10 
http://www.

JAVA开发工程师
ss
北京搜狐互联网信息服务有限公司
公司类型:民营公司 公司规模:150-500人 ss
发布时间 :2010-09-28 工作年限 :不限 工作方式 :全职 薪金待遇 :面议 性别要求 :不限 招聘人数 :25 到期时间 :2010-10-28 户口要求 :无要求
2010-10-19 13:38
快速回复:SQL 疑难笔试题[求助]急
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017069 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved