常见sql面试题

有3个表S,C,SC
S(SNO,SNAME)代表(学号,姓名)  //主键:SNO    
//多个人,多门课 3张表   ,SC 关系表
C(CNO,CNAME,CTEACHER)代表(课号,课名,教师)//主键:CNO
SC(SNO,CNO,SCGRADE)代表(学号,课号成绩)//主键:SNO+CNO

 

问题:
1.找出没选过“黎明”老师的所有学生名字。

select sname 
from s 
join sc 
on (s.sno = sc.sno) 
join c (c.cno = sc.cno) 
where c.cteacher <> 'liming';


2.列出2门以上(含2门)不及格学生名字及平均成绩。

复制代码
select sname 
from s
where sno in (
              select sno 
              from sc
              where scgrade < 60 
              group by sno 
              having count(*) >= 2);
复制代码

 

3.即学过1号课程又学过2号课程所有学生的名字。

复制代码
select sname 
from s 
where sno in (
        select sno 
        from sc 
        where cno = 1 and sno in (
                      select sno 
                      from sc 
                      where cno = 2));
复制代码


 

 

 

 

 

对于教学数据库的三个表:
 S(S#,SNAME,AGE,SEX)
 SC(S#,C#,GRADE)
 C(C#,CNAME,TEACHER)
 试用SQL查询语句完成下列查询操作
(1)统计有学生选修的课程门数
(2)求选修C4课程的女学生的平均年龄
(3)求刘老师所授的课程的每门课程的平均成绩
(4)统计每门课程的学生选修人数(超过10人的课程才统计)。要求显示课程号和人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。
(5)检索学号比王军同学大,而年龄比他小的学生姓名。
(6)在表SC中检索成绩为空值的学生学号和课程号
(7)求年龄大于女同学平均年龄的男学生的姓名和年龄
(8)求年龄大于所有女同学年龄的男学生的姓我和年龄

 


对于教学数据库的三个表:
学生表 S(S#,SNAME,AGE,SEX)
选课表 SC(S#,C#,GRADE)
课程表 C(C#,CNAME,TEACHER)
 试用SQL查询语句完成下列查询操作
(1)统计有学生选修的课程门数
select count(C#) 
from SC

(2)求选修C4课程的女学生的平均年龄
select avg(AGE) 
from S, SC
where S.S#=SC.S# and SC.C#='C4' and SEX='女'

(3)求刘老师所授的课程的每门课程的平均成绩
select CNAME, avg(GRADE)
from SC, C
where SC.C#=C.C# and C.TEACHER='刘老师'
group by CNAME

(4)统计每门课程的学生选修人数(超过10人的课程才统计)。要求显示课程号和人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。
select C#, count(S#) as count_s
from S, SC
where S.S# = SC.S#
having count(S#)>10
group by C#
order by count_s, C#

(5)检索学号比王军同学大,而年龄比他小的学生姓名。
select SNAME
from S, 
  (select S# as S_WJ, AGE as AGE_WJ from S where S.NAME='王军') as A
where S# > A.S_WJ and AGE < A.AGE_WJ

(6)在表SC中检索成绩为空值的学生学号和课程号
select S#,C#
from SC
where GRADE is null

(7)求年龄大于女同学平均年龄的男学生的姓名和年龄
select NAME, AGE
from S,
  (select avg(AGE) as AGE1 from S where SEX='女') as A
where SEX='男' and AGE > A.AGE1

(8)求年龄大于所有女同学年龄的男学生的姓我和年龄
select NAME, AGE
from S,
  (select max(AGE) as AGE1 from S where SEX='女') as A
where SEX='男' and AGE > A.AGE1


你可能感兴趣的:(常见sql面试题)