CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

招聘时的sql试题

楼主xhggg(xh)2003-11-02 12:16:06 在 MS-SQL Server / 疑难问题 提问

第一题  
  表:A01(人员基本情况表)和A32(职务信息表)  
  A01(主表)结构  
  字段名称 数据类型 备注  
  ========================================  
  Z0001 int 主关键字  
  a0101 varchar 姓名  
  a0102 varchar 地址  
  a0103 int 性别  
  a0104 char 出生年月  
   
  A32(子表)结构  
  Z0001 int 关键字(外键)  
  a0105 varchar 所在职务  
  a0106 char 上任日期  
  b0001 varchar 职务单位  
   
  问题(3)查询出职务变更最频繁的人,显示出此人的姓名  
  提示:例如A01和A32中有如下数据时,职务变更最频繁的是人是“魏新”  
  A01表中数据  
  z0001 a0101 a0102 a0103 a0104  
  10000 魏新 男 黑龙江 19800110  
  10001 林强 男 内蒙古 19801221  
  a32表中数据  
  z0001 a0105 a0106 b0001  
  10000 科长 19990110 A单位  
  10000 处长 20000123 B单位  
  10001 科长 19980213 E单位  
  10000 局长 20021104 C单位  
  **********************************************************************  
  **********************************************************************  
   
  第二题、现有一个表table1只有一个字段F1,表中数据如下:  
  Z0001  
  0  
  1  
  2  
  3  
  4  
  5  
  6  
  7  
  8  
  9  
  问题:用现有的数据用一个SQL语句构造出一个1-9999的结果集,类似如下:  
  1  
  2  
   
  ...   ...  
  9999  
   
  **********************************************************************  
  **********************************************************************  
   
  第三题  
  如下表(T2)为某班级某一学期的数学成绩:  
  学号 成绩  
  199801001 85  
  199801002 76  
  199801003 98  
  199801004 54  
  199801005 39  
  199801006 61  
  问题:请根据t2表的内容输出如下两行数据,要求SQL语句最简。(60分以上为及格)  
  类别 人数  
  ============  
  及格 4  
  不及格 2  
  问题点数:20、回复次数:25Top

1 楼playyuer(退休干部 卧鼠藏虫)回复于 2003-11-02 12:26:58 得分 5

select   *  
  from   A01  
  where   (select   count(*)   from   A32   where   A01.Z0001   =   Z0001)  
  =  
  select   max(f)  
  from    
  (  
  select   count(*)   as   f  
  from   A32  
  group   by   Z0001  
  )   TTop

2 楼playyuer(退休干部 卧鼠藏虫)回复于 2003-11-02 12:47:46 得分 0

select   (case   when   成绩   >=   60   then   '及格'  
                          else   '不及格'   end)  
  ,count(*)  
  from   t2  
  group   by   (case   when   成绩   >=   60   then   '及格'  
                          else   '不及格'   end)Top

3 楼raymond323(raymond)回复于 2003-11-02 12:49:30 得分 0

upTop

4 楼pengdali()回复于 2003-11-02 12:52:30 得分 5

第一题  
  select   *   from   a01   where   z0001=(select   top   1   z0001   from   a32   group   by   z0001   order   by   count(*)   desc)  
  第二题  
  select   a.a+b.a*10+c.a*100+d.a*1000   from   z0001   a,z0001   b,z0001   c,z0001   d   order   by   a.a+b.a*10+c.a*100+d.a*1000  
  第三题  
  select   case   when   成绩<60   then   '不及格'   else   '及格'   end   类别,count(*)   人数   from   t2   group   by   case   when   成绩<60   then   '不及格'   else   '及格'   endTop

5 楼playyuer(退休干部 卧鼠藏虫)回复于 2003-11-02 12:53:32 得分 0

select   table1.Z0001*1000   +   a.Z0001   *100   +   b.Z0001   *10   +   c.Z0001  
  from   table1,table1   as   a,table1   as   b,table1   as   c  
  order   by   #table1.Z0001*1000   +   a.Z0001   *100   +   b.Z0001   *10   +   c.Z0001Top

6 楼xhggg(xh)回复于 2003-11-02 15:34:22 得分 0

各位的功底真是了得!还有1题,不过我对这道题题目不理解?!  
  第四题  
  有如下表T记录人员的情况:  
  /*create   table   t  
  (RenID   INT   PRTMARY   KEY,  
  RenMing   CHAR(8),  
  RenParentID   INT   REFERENCES   T(RenID))*/  
  =======================================  
  RenID RenMing RenParentID  
  2 张一 10  
  3 张二 10  
  5 王一 11  
  8 王二 11  
  10 张_父 15  
  11 王_父 NULL  
  15 张_父_父 16  
  16 NULL  
  问题:  
  1、选择出所有没有父的人,注意查询性能。  
  2、选择出所有人名中含有“_”的人。  
  3、选择出“张父”的子。  
  4、选择出有“孙子”的人。  
  5、选择出如下结果:  
  项目 张 王  
  人数 4 3  
  6、选择出如下结果:  
  项目 人数  
  王 3  
  张 4  
  7、将T表中的RenID从1~8排列,不要打乱现有表中数据的关系。  
  8、选择出“张父”的子(一列一行),两个人名中用“,”相隔。  
  9、编写一存储过程可以列出给定RenID的所有子(包括子的子)。Top

7 楼wzh1215(懒猫)回复于 2003-11-02 15:39:03 得分 5

第一题:(满足职务变更最频繁为多个人的情况)  
  select   a0101   from   A01   where   z0001   in(select   z0001   from   a32   group   by   z0001   having   count(z0001)=(select   max(count(z0001))   from   a32   group   by   z0001))  
  第二题:  
  select   top   9999   convert(int,convert(char(1),a.id)+convert(char(1),b.id)+convert(char(1),c.id)+convert(char(1),d.id))+1   as   cc   from   aaa   a,aaa   b,aaa   c,aaa   d   order   by   cc  
  第三题:  
  select   '及格'   as   类别,count(cont)   as   人数   from   ccc   where   cont>=60  
  union   all  
  select   '不及格'   as   类别,count(cont)   as   人数   from   ccc   where   cont<60Top

8 楼wzh1215(懒猫)回复于 2003-11-02 16:07:57 得分 0

1.  
  select   *   from   t   where   RenParentID   is   NULL  
  2.  
  select   *   from   t   where   RenMing   like   '%[_]%'  
  3.  
  select   *   from   t   where   RenParentID   in   (select   RenId   from   t   where   RenMing='张_父')  
  4.  
  select   *   from   t   where   RenID   in   (select   RenParentID   from   (select   *   from   t   where   RenID   in(select   distinct   RenParentID   from   t))   as   tmp   where   RenParentID   is   not   NULL)    
  Top

9 楼wzh1215(懒猫)回复于 2003-11-02 16:30:50 得分 0

5.  
  select   '人数'   as   项目,(select   count(*)   from   t   where   RenMing   like   '张%')   as   张,(select   count(*)   from   t   where   RenMing   like   '王%')   as   王  
  6.  
  select   '王'   as   项目,count(*)   as   人数   from   t   where   RenMing   like   '王%'  
  union   all  
  select   '张'   as   项目,count(*)   as   人数   from   t   where   RenMing   like   '张%'  
  7.  
  select   tt.RenID,tt.RenMing,tt.RenParentID,(select   count(*)+1   from   t   where   RenID<tt.RenID)   as   ID   from   t   tt   order   by   tt.RenID  
  8.  
   
  9.  
  create   procedure   RenIDS  
  @RenID   as   int  
  AS  
  select   *   from   t   where   RenParentID   in(select   RenID   from   t   where   RenID=@RenID)  
  Go  
  exec   RenIDS   '张_父'Top

10 楼pengdali()回复于 2003-11-02 16:38:26 得分 0

--考虑了半天,不知道该不该贴,我贴出来不知道是害你还是帮你。你这样即使应聘上又有什么意义呢?  
   
   
  1、选择出所有没有父的人,注意查询性能。  
  select   *   from   t   where   RenParentID   is   null  
  2、选择出所有人名中含有“_”的人。  
  select   *   from   t   where   RenMing   like   '%[_]%'  
  3、选择出“张父”的子。  
  select   *   from   t   where   RenParentID   in(select   renid   from   t   where   RenMing='张父')  
  4、选择出有“孙子”的人。  
  select   *   from   t   a   where   exists(select   1   from   t   b   where   RenParentID=a.renid   and   exists(select   1   from   t   where   RenParentID=b.renid))  
  5、选择出如下结果:  
  项目 张 王  
  人数 4 3  
  select   '人数'   项目,sum(case   when   RenMing   like   '张%'   then   1   else   0   end)   张,sum(case   when   RenMing   like   '王%'   then   1   else   0   end)   王   from   t  
  6、选择出如下结果:  
  项目 人数  
  王 3  
  张 4  
  select   left(RenMing,1)   项目,count(*)   人数   from   t   group   by   left(RenMing,1)  
  7、将T表中的RenID从1~8排列,不要打乱现有表中数据的关系。  
  select   (select   count(*)   from   t   where   RenID<=tem.RenID)   rowid,*   from   t   tem  
  8、选择出“张父”的子(一列一行),两个人名中用“,”相隔。  
  declare   @a   varchar(8000)  
  set   @a=''  
  select   @a=@a+','+RenMing   from   t   where   RenParentID   in(select   renid   from   t   where   RenMing='张父')  
  select   right(@a,len(@a)-1)   张父的子  
   
  9、编写一存储过程可以列出给定RenID的所有子(包括子的子)。  
  create   proc   存储过程  
  @renid   int  
  as  
  begin  
      declare   @a   table   (RenID   int,RenMing   varchar(10),RenParentID   int)  
      insert   @a   select   *   from   t   where   RenParentID=@RenID  
      while   @@rowcount>0  
          insert   @a   select   *   from   t   where   RenParentID   in   (select   RenID   from   @a)   and   RenID   not   in   (select   RenID   from   @a)  
      select   *   from   @a  
  end  
  goTop

11 楼realgz(realgz)回复于 2003-11-02 16:47:44 得分 0

还可以边考边问吗?  
   
  哪个公司这么好?我也去^_^!!Top

12 楼southdoor(南门)回复于 2003-11-02 18:12:14 得分 0

学习!Top

13 楼benxie(结婚是幸福的!为了老婆努力赚钱!)回复于 2003-11-02 19:31:33 得分 0

学习!  
  Top

14 楼19191919(小楼别筑)回复于 2003-11-02 21:47:38 得分 0

----4  
    select   renming   from   t   where   renming   like   '%父!_父'escape'!'    
  ----9  
  create   proc   p_getson   (@renid   int)  
      as  
      declare   @sql   varchar(200)  
      set   @sql=''  
      select   @sql=renid   from   t   where   renid   in   (   select   renparentid   from   t   where   renparentid=@renid)          
      if   @sql=''    
          select   renming   from   t   where   renid=@sql    
      else  
          select   reming   from   t   where   reparentid=@sql   or   renid=@sqlTop

15 楼coffee_black(黑咖啡)回复于 2003-11-02 21:47:59 得分 0

gzTop

16 楼perfwell(我就是我)回复于 2003-11-03 09:31:55 得分 0

GZTop

17 楼xhggg(xh)回复于 2003-11-03 10:38:50 得分 0

各位大虾,这是我去年的应聘材料,我当时就没搞懂,本就没应聘上。贴上的目的有两个,其一就是看看别人解题的思路,找到效率最高的方法,俺好学习学习。其二也可以让和我一样的sql菜鸟也学学公司招聘一般都考什么难度的试题,其实大家如果有好题也不防共享出来。分两次写出来是因为我打字很慢,中间喝了杯茶洗了个澡外带换件衣服。不妙这两天降温,俺感冒了!最后感谢大虾辛苦解题。Top

18 楼xhggg(xh)回复于 2003-11-03 10:51:47 得分 0

另外俺还有一个埋藏心底很久的问题不知道问了多少人就是没有答案:  
  在access或sqlserver表的记录编辑中怎么插入记录(非程序)  
  access中好像只能在修改表结构时插入字段,我该怎么插入一条记录?Top

19 楼guanhua8(奋斗)回复于 2003-11-03 10:55:22 得分 5

呵呵,给你写一个存储过程可以列出给定RenID的所有子(包括子的子)。适用于sql   server  
   
  create   procedure   pd   @parentID   varchar(8),@rm   varchar(16)  
  as  
  begin  
      declare   @i   int,@tid   varchar(8),@trm   varvhar(16)  
      set   @i   =   0  
      create   table   #t(t_id   varchar(8),t_rm   varchar(16))  
      insert   into   #t   values   (@parentID,@rm)  
      while   1=1  
      begin  
          set   @i   =   @i   +   1  
          declare   cur   cursor   for   select   t_id   from   #t  
          open   cur  
          fetch   ABSOLUTE   @i   from   cur   into   @tid  
          if   @@FETCH_STATUS   <>   0    
          begin  
              break  
          end    
          insert   into   #t   select   t.renid,t.renming   from   t   where   t.renparentid   =   @tid  
          CLOSE   cur  
        DEALLOCATE   cur  
      end  
      CLOSE   cur  
      DEALLOCATE   cur  
      select   *   from   #t  
      drop   table   #t  
  end  
  Top

20 楼samuelpan(欧乐)回复于 2003-11-03 12:32:31 得分 0

第九题答案应该给出包括递归程序段的答案。Top

21 楼cp07(cp07)回复于 2003-11-03 16:27:11 得分 0

UPTop

22 楼xhggg(xh)回复于 2003-11-03 22:18:59 得分 0

up   up   up   同志们Top

23 楼cgsun(colin)回复于 2003-11-04 08:29:36 得分 0

markTop

24 楼xhggg(xh)回复于 2003-11-04 11:19:02 得分 0

总是带着问题结贴!如愿回答,下面地址给分,本人结贴及时,最快:3分钟。最慢:1星期。  
  http://expert.csdn.net/Expert/topic/2425/2425077.xml?temp=.4892542Top

25 楼vileboy(郭海宸_追星族_傻子)回复于 2003-11-04 14:40:56 得分 0

学习中。Top

相关问题

  • 华为招聘试题
  • 寻找SQL试题
  • 华为前两天在电子科大招聘时的一个笔试题:)
  • 华为前两天在电子科大招聘时的一个笔试题:)
  • 微软的招聘考试题...
  • 求PHP招聘的笔试题目。
  • 某公司招聘考试题
  • 微软面试题,Sql
  • 求Ms sql server 面试题
  • 一道SQL的面试题

关键词

  • 数据
  • 结构
  • sql
  • z0001
  • renid
  • renparentid
  • renming
  • 及格
  • 题
  • cur

得分解答快速导航

  • 帖主:xhggg
  • playyuer
  • pengdali
  • wzh1215
  • guanhua8

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo