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# 

      

  • 相关阅读:
    Sum Root to Leaf Numbers
    Sum Root to Leaf Numbers
    Sort Colors
    Partition List
    Binary Tree Inorder Traversal
    Binary Tree Postorder Traversal
    Remove Duplicates from Sorted List II
    Remove Duplicates from Sorted List
    Search a 2D Matrix
    leetcode221
  • 原文地址:https://www.cnblogs.com/YanYongSong/p/5378596.html
Copyright © 2011-2022 走看看