zoukankan      html  css  js  c++  java
  • 关于Sql server 的 几道面试题

    一、简介

      今天在网上搜到几道数据库题还不错,是关于数据库表的操作的题目,这类题目经常出现在面试的笔试题目中。 做了一遍,特在这里记录下来做个总结。 

    二、题目及答案

      数据库中共有四张表,下面将以截图的方式说明:

    老师信息表:                                   学生信息表:

      

    课程表:                                        分数表:

    1、查询"1"课程比"2"课程成绩高的所有学生的学号;

    select a.S# from (
    select  * 
    from sc where C#=1 ) a 
    inner join  (select  * 
    from sc where C#=2)  b on a.S#=b.S#
    where a.score>b.Score

    2、查询平均成绩大于60分的学号和平均成绩;

    select  S#,avg(score) as score
    from sc 
    group by s#
    having avg(score)>60 

    3、查询所有同学的学号、姓名、选课数、总成绩;

    select  a.S#,Sname,
    case when b.Num is null then 0 else b.Num end Num ,
    case when  b.SumScore is null then 0 else  b.SumScore end SumScore
    from student a left join 
    (select S#,count(*) Num,sum(score) SumScore from SC group by S# )b on a.S#=b.S#

    4、查询姓"李"的老师个数;

    select  count(*) Num
    from Teacher  
    where Tname like '李%'

    5、查询没学过"叶平"老师课的同学的学号、姓名;

    select S#,Sname 
    from student 
    where S# not in (
    select  distinct S# 
    from SC c 
    where exists  (
    select  C# 
    from Course a left join teacher b on a.T#=b.T# 
    where  b.Tname='叶平' and c.C#=a.C#) )

    6、查询学过"1"并且也学过编号"2"课程的同学的学号、姓名;

    select a.S#,b.Sname from (
    select a.S# 
    from (
    select  * 
    from sc 
    where C# in (1,2)) a
    group by a.S# 
    having count(*)=2) a  
    left join Student b on a.S#=b.S#

    select a.S#,C.Sname from (
    select  * 
    from sc where C#=1 ) a 
    inner join  (select  * 
    from sc where C#=2)  b on a.S#=b.S#
    left join student c on a.S#=c.S#

    7、查询学过"叶平"老师所交的所有课程的同学的学号、姓名;

    select a.S#,b.Sname from (
    select S# from (
    select sc.* from sc  where C# in (
    select  C# from Course a inner join 
    Teacher b on a.T#=b.T# where b.tname='叶平' )     
    ) a group by S# 
    having  count(*)=(select count(*) from Course a inner join 
    Teacher b on a.T#=b.T# where b.tname='叶平')
    )  a left join Student b on a.S#=b.S#

    8、查询所有课程成绩小于60的同学的学号、姓名;

    select distinct a.S#,c.Sname 
    from sc  a left join Student c on a.S#=c.S# 
    where  not exists (
    select  S# 
    from sc b where Score>60 and a.S#=b.S#) 

    9、查询没有学所有课的同学的学号、姓名;

    select a.* 
    from  student  a 
    where a.S# not in (select  S# 
    from sc 
    group by S# 
    having count(*)=(
    select count(*)
    from Course)) 

    10、查询至少有一门课与"张三"的同学相同的同学的学号和姓名;

    select  distinct a.S#,b.Sname  
    from sc a left join Student b on a.S#=b.S#
    where C#  in (
    select a.C# 
    from Sc a left join student b on a.S#=b.S#
    where b.Sname='张三')                                       
    and a.S#<> (select  S# from Student where Sname='张三')    

    11、查询学过学号为"1"同学所有课的其他同学学号和姓名;

    select a.S#,b.Sname  from (
    select a.S# 
    from (
    select * 
    from sc  a
    where S#<>1 and exists (select  * 
    from sc  b where S#=1 and a.C#=b.C#  ) )  a
    group by   a.S#
    having count(*)= (select  count(*) 
    from sc  b where S#=1)  ) a left join Student b on a.S#=b.S# 

      

  • 相关阅读:
    html标题-段落-字符实体-换行
    html概述和html基本结构:
    可以在一个.java文件中写两个类吗?
    栈内存和堆内存的区别
    Java的访问权限
    (转)第三方支付的盈利模式
    (转)第三方支付参与者
    直联和间联的区别——直连和间连的区别
    HashSet和LinkedHashSet特点.
    Map和TreeMap的特点
  • 原文地址:https://www.cnblogs.com/YanYongSong/p/5378596.html
Copyright © 2011-2022 走看看