【转】数据库常用面试题


题目1:
======
  为管理岗位业务培训信息,建立3个表:
  S(S#,SN,SD,SA) S#,SN,SD,SA分别代表学号、学员姓名、所属单位、学员年龄
  C(C#,CN) C#,CN分别代表课程编号、课程名称
  SC(S#,C#,G) S#,C#,G分别代表学号、所选修的课程编号、学习成绩

  1.使用标准SQL嵌套语句查询选修课程名称为 税收基础 的学员学号和姓名

SelectSN,SDFROMS
  
Where[S#]IN (Select[S#]FROM
C,SC
  
WhereC.[C#]=SC.[C#] ANDCN=N'税收基础')

  2.使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位  
SelectS.SN,S.SDFROMS,SC
  
WhereS.[S#]=SC.[S#]ANDSC.[C#]='C2'
  

  3.使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位  
SelectSN,SDFROMS
  
Where[S#]NOTIN
(
Select[S#]FROMSC
  
Where[C#]='C5')
  4.使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位  
网上流传的错误答案:
SelectSN,SDFROMS
  
Where[S#]IN(Select[S#]FROMSC RIGHTJOIN

C
ONSC.[C#]=C.[C#]

GROUPBY[S#]

  
HAVINGCOUNT(*)=COUNT([S#]))

经过调试验证的正确答案:
SELECTSN,SDFROMS
WHERES#
IN(SELECTSC.S#
FROMSCRIGHTJOINC
ONSC.C#=C.C#
GROUPBYSC.S#--在结果集中以学生分组,分组后的SC.C#选课数=C.C#课程数即为全部课程
HAVINGCOUNT(distinct(SC.C#))--注意:一个学生同一门课程可能有多条成绩记录,需要distinct
=(selectcount(*)fromC)--注意:HAVING条件不能用COUNT(distinct(SC.C#))=COUNT(distinct(C.C#)
)--子查询获得选修全部课程的学生学号

  5.查询选修了课程的学员人数  
Select学员人数=COUNT(DISTINCT[S#])FROMSC
  6.查询选修课程超过5门的学员学号和所属单位
SelectSN,SDFROMS
  
Where[S#]IN( Select[S#]FROMSC    
GROUPBY[S#]
  
HAVING COUNT( DISTINCT[C#] ) > 5 )
题目2:
======

  已知关系模式:
  S(SNO,SNAME)学生关系。SNO为学号,SNAME为姓名
  C(CNO,CNAME,CTEACHER)课程关系。CNO为课程号,CNAME为课程名,CTEACHER为任课教师
  SC(SNO,CNO,SCGRADE)选课关系。SCGRADE为成绩

  1.找出没有选修过“李明”老师讲授课程的所有学生姓名
SelectSNAMEFROMS
  
WhereNOTEXISTS(Select*FROMSC,C
  
WhereSC.CNO=C.CNO
  
ANDCNAME='李明'
  
ANDSC.SNO=S.SNO)  
  2.列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩  
SelectS.SNO,S.SNAME,AVG_SCGRADE=AVG(SC.SCGRADE)
  
FROM S , SC ,
(
SelectSNO FROMSC
  
WhereSCGRADE<60
  
GROUPBYSNO
  
HAVINGCOUNT(DISTINCTCNO)>=2) A
WhereS.SNO=A.SNOANDSC.SNO=A.SNO
  
GROUPBYS.SNO,S.SNAME
  3.列出既学过“1”号课程,又学过“2”号课程的所有学生姓名  
SelectS.SNO,S.SNAME
  
FROMS,
(
SelectSC.SNO FROMSC,C
  
WhereSC.CNO=C.CNO
  
ANDC.CNAMEIN('1','2')
  
GROUPBYSNO
  
HAVINGCOUNT(DISTINCTCNO)=2
  )SC
WhereS.SNO=SC.SNO
  4.列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号
SelectS.SNO,S.SNAME
  
FROMS,
(
SelectSC1.SNOFROMSCSC1,CC1,SCSC2,CC2
  
WhereSC1.CNO=C1.CNOANDC1.NAME='1'
  
ANDSC2.CNO=C2.CNOANDC2.NAME='2'
  
ANDSC1.SCGRADE>SC2.SCGRADE ) SC
WhereS.SNO=SC.SNO
  5.列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩
SelectS.SNO,S.SNAME,SC.[1号课成绩],SC.[2号课成绩]
FROMS,
(
SelectSC1.SNO,[1号课成绩]=SC1.SCGRADE,[2号课成绩]=SC2.SCGRADE
  
FROMSCSC1,CC1,SCSC2,CC2
  
WhereSC1.CNO=C1.CNOANDC1.NAME='1'
  
ANDSC2.CNO=C2.CNOANDC2.NAME='2'
  
ANDSC1.SCGRADE>SC2.SCGRADE) SC
WhereS.SNO=SC.SNO 优质内容筛选与推荐>>
1、电脑如何设置自动开机
2、关于${pageContext.request.contextPath }对于工程中的那个目录
3、Delphi过程函数传递参数的几种方式
4、bzoj2428 均分数据
5、C#委托


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn