經典sql面試及答案(50)

SQL數據庫面試題以及答案(50例題)

Student(S#,Sname,Sage,Ssex)學生表
S#:學號
Sname:學生姓名
Sage:學生年齡
Ssex:學生性別
Course(C#,Cname,T#)課程表
C#:課程編號
Cname:課程名稱
T#:教師編號
SC(S#,C#,score)成績表
S#:學號
C#:課程編號
score:成績
Teacher(T#,Tname)教師表
T#:教師編號:
Tname:教師名字

問題:

1、查詢“001”課程比“002”課程成績高的所有學生的學號

select a.S# from (select S#,score from SC where C#='001')a, (select s#,score from SC where c#='002')b Where a.score>b.score and a.s# = b.s#;

2、查詢平均成績大於60分的同學的學號和平均成績

select S#, avg(score) from sc group by S# having avg(score)>60
3、查詢所有同學的學號、姓名、選課數、總成績
select student.S#, student.Sname, count(sc.C#), sum(score) from student left outer join SC on student.S# = SC.S# group by Student.S#, Sname

4、查詢姓‘李’的老師的個數:
select count(distinct(Tname)) 
from teacher 
where tname like '李%';

5、查詢沒有學過“葉平”老師可的同學的學號、姓名:

select student.S#, student.Sname 
from Student 
where S# not in (select distinct(SC.S#) from SC,Course,Teacher 
where sc.c#=course.c# AND teacher.T#=course.T# AND Teahcer.Tname ='葉平');

6、查詢學過“葉平”老師所教的所有課的同學的學號、姓名:

select S#,Sname   from Student    
where S# in (select S# from SC ,Course ,Teacher 
where SC.C#=Course.C# and Teacher.T#=Course.T# 
and Teacher.Tname='葉平' group by S# 
having count(SC.C#)=(select count(C#) from Course,Teacher  
where Teacher.T#=Course.T# and Tname='葉平'));

7、查詢學過“011”並且也學過編號“002”課程的同學的學號、姓名:

select Student.S#,Student.Sname 
from Student,SC where Student.S#=SC.S# 
and SC.C#='001'and 
exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002');

8、查詢課程編號“002”的成績比課程編號“001”課程低的所有同學的學號、姓名:

Select S#,Sname 
from (select Student.S#,Student.Sname,score ,
(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2    
from Student,SC 
where Student.S#=SC.S# and C#='001') S_2 
where score2 < score; 

9、查詢所有課程成績小於60的同學的學號、姓名:

select S#, sname 
from student 
where s# not in 
(select student.s# from student, sc where s.s# = sc.s# and score>60);

10、查詢沒有學全所有課的同學的學號、姓名:

select student.s#, student.sname 
from student, sc
where student.s#=sc.s# 
group by student.s#, student.sname 
having count(c#)<(select count(c#) from course);

11、查詢至少有一門課與學號爲“1001”同學所學相同的同學的學號和姓名:

select s#, Sname 
from Student, SC 
where student.s# = sc.s# 
and c# in (select c# from SC where s#='1001');

12、查詢至少學過學號爲“001”同學所有一門課的其他同學學號和姓名;

select distinct sc.s# , sname 
from student, sc 
where student.s#=sc.s# 
and c# in (select C# from sc where s#='001');

13、把“SC”表中“葉平”老師教的課的成績都更改爲此課程的平均成績:

Update Sc Set Score=(Select Avg(s2_Score) From sc s2 Where s2.c#=sc.c#)  
Where c# IN
(Select c# From sc cs INNER JOIN Teacher tc ON cs.t#=tc.t# WHERE tname ='葉平')

14、查詢和“1002”號的同學學習的課程完全相同的其他同學學號和姓名:

select s# from sc where c#  in 
(select c# from sc where s#='1002') 
group by s# having count(*)=
(select count(*) from sc where s#='1002');

15、刪除學習“葉平”老師課的SC表記錄:

delect sc 
from course, Teacher 
where course.c#=sc.c# 
and course.t#=teacher.t# 
and tname='葉平';

16、向SC表中插入一些記錄,這些記錄要求符合以下條件:沒有上過編號“003”課程的同學學號、002號課的平均成績:

Insert SC select S#,'002',
(Select avg(score) from SC where C#='002') 
from Student where S# not in (Select S# from SC where C#='002');

17、按平均成績從高到低顯示所有學生的“數據庫”、“企業管理”、“英語”三門的課程成績,按如下形式顯示:學生ID,數據庫,企業管理,英語,有效課程數,有效平均分:

select s# as 學生ID,
(select score from sc where sc.s#=t.s# and c#='004') as 數據庫,
(select score from sc where sc.s#=t.s# and c#='001') as 企業管理,
(select score from sc where sc.s#=t.s# and c#='006') as 英語,
count(*) as 有效課程數, avg(t.score) as 平局成績
from sc as t
group by s# 
order by avg(t.score)

18、查詢各科成績最高和最低的分:以如下的形式顯示:課程ID,最高分,最低分

select L.c# as 課程ID, L.score as 最高分,
R.score as 最低分
from sc L, sc R 
where L.c# = R.c# 
and L.score = (select max(IL.score) 
        from sc IL, student as IM 
        where L.c#=IL.c# and IM.s#=IL.s#
        group by IL.c#)
and R.score = (select min(IR.score)
        from sc as IR
        where R.c#=IR.c#
        group by IR.c#);

19、按各科平均成績從低到高和及格率的百分數從高到低順序:

SELECT t.C# AS 課程號,
max(course.Cname)AS 課程名,
isnull(AVG(score),0) AS 平均成績,
100 * SUM(CASE WHEN  isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分數     
FROM SC T,Course     
where t.C#=course.C#     
GROUP BY t.C#      
ORDER BY 100 * SUM(CASE WHEN  isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC 

20、查詢如下課程平均成績和及格率的百分數(用”1行”顯示): 企業管理(001),馬克思(002),OO&UML (003),數據庫(004):

21、查詢不同老師所教不同課程平均分從高到低顯示:

 SELECT max(Z.T#) AS 教師ID,
 MAX(Z.Tname) AS 教師姓名,
 C.C# AS 課程ID,
 AVG(Score) AS 平均成績     
 FROM SC AS T,Course AS C ,Teacher AS Z    
 where T.C#=C.C# and C.T#=Z.T#   
 GROUP BY C.C#    
 ORDER BY AVG(Score) DESC

22、查詢如下課程成績第3名到第6名的學生成績單:企業管理(001),馬克思(002),UML(003),數據庫(004):

23、統計下列各科成績,各分數段人數:課程ID,課程名稱,[100-85],[85-70],[70-60],[ 小於60] :

SELECT SC.C# as 課程ID, Cname as 課程名稱,
SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85]  ,
SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70],
SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60],
SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -]     
FROM SC,Course     
where SC.C#=Course.C#     
GROUP BY SC.C#,Cname;

24、查詢學生平均成績及其名次:

SELECT 1+(SELECT COUNT( distinct 平均成績)                
FROM (SELECT S#,AVG(score) AS 平均成績                       
FROM SC                   
GROUP BY S#  ) AS T1  WHERE 平均成績 > T2.平均成績) as 名次,       
S# as 學生學號,平均成績      
FROM (SELECT S#,AVG(score) 平均成績             
FROM SC         
GROUP BY S# ) AS T2      
ORDER BY 平均成績 desc; 

25、查詢各科成績前三名的記錄(不考慮成績並列情況):

SELECT t1.S# as 學生ID,t1.C# as 課程ID,Score as 分數       
FROM SC t1        
WHERE score IN 
(SELECT TOP 3 score               
FROM SC               
WHERE t1.C#= C#             
ORDER BY score DESC)        

26、查詢每門課程被選修的學生數:

select c#, count(s#) 
from sc 
group by c#;

27、查詢出只選修一門課程的全部學生的學號和姓名:

select sc.s#, student.sname, count(c#) as 選課數
from sc,student 
where sc.s# =student.s# 
group by sc.s#,Student.sname 
having count(c#)=1;

28、查詢男生、女生人數:

select count(Ssex) as 男生人數 
from student 
group by Ssex 
having Ssex='男';
select count(Ssex) as 女生人數 
from student 
group by Ssex 
having Ssex='女';

29、查詢姓“張”的學生名單:

select sname 
from student 
where sname like '張%';

30、查詢同名同姓的學生名單,並統計同名人數:

select sanme,count(*) 
from student 
group by sname 
havang count(*)>1;

31、1981年出生的學生名單(注:student表中sage列的類型是datetime):

select sname, convert(char(11),DATEPART(year,sage)) as age
from student 
where convert(char(11),DATEPART(year,Sage))='1981';

32、查詢平均成績大於85的所有學生的學號、姓名和平均成績:

select Sname,SC.S# ,avg(score)     
from Student,SC      
where Student.S#=SC.S# 
group by SC.S#,Sname 
having    avg(score)>85;

33、查詢每門課程的平均成績,結果按平均成績升序排序,平均成績相同時,按課程號降序排列:

select C#, avg(score) 
from sc 
group by c# 
order by avg(score), c# desc;

34、查詢課程名稱爲“數據庫”,且分數低於60的學生名字和分數:

select sname, isnull(score,0) 
from student, sc ,course 
where sc.s#=student.s#  and sc.c#=course.c# and course.cname='數據庫' and score<60;

35、查詢所有學生的選課情況:

select sc.s#,sc.c#,sname,cname 
from sc,student course 
where sc.s#=student.s# and sc.c#=course.c#;

36、查詢任何一門課程成績在70分以上的姓名、課程名稱和分數:

select distinct student.s#,student.sname,sc.c#,sc.score 
from student,sc 
where sc.score>=70 and sc.s#=student.s#;

37、查詢不及格的課程,並按課程號從大到小的排列:

select c# 
from sc 
where score<60 
order by c#;

38、查詢課程編號爲“003”且課程成績在80分以上的學生的學號和姓名:

select sc.s#,student.sname 
from sc,student 
where sc.s#=student.s# and score>80 and c#='003';

39、求選了課程的學生人數:

select count(*) from sc;

40、查詢選修“葉平”老師所授課程的學生中,成績最高的學生姓名及其成績:

select student.sname,score 
from student,sc,course c, teacher 
where student.s#=sc.S# and sc.c#=c.c#
and c.T#=teacher.T#
and teacher.tname='葉平' 
and sc.score=(select max(score) from sc where c#=c.c#);

41、查詢各個課程及相應的選修人數:

select count(*) from sc group by c#;

42、查詢不同課程成績相同的學生和學號、課程號、學生成績:

select distinct a.s#,b.score 
from sc a ,sc b 
where a.score=b.score 
and a.c#<>b.c#;

43、查詢每門課程成績最好的前兩名:

select t1.s# as 學生ID,t1.c#  課程ID, Score as 分數
from sc t1 
where score in (select top 2 score from sc 
        where t1.c#=c#
        order by score desc)
order by t1.c#;

44、統計每門課程的學生選修人數(超過10人的課程才統計)。要求輸出課程號和選修人數,查詢結果按人數降序排序,若人數相同,按課程號升序排序:

select c# as 課程號,count(*) as 人數
from sc 
group by c#
order by count(*) desc c#;

45、檢索至少選修兩門課程的學生學號:

select s# 
from sc 
group by s# 
having count(*)>=2;

46、查詢全部學生選修的課程和課程號和課程名:

select c# ,cname
from course 
where c# in (select c# from sc group by c#);

47、查詢沒學過”葉平”老師講授的任一門課程的學生姓名:

select sname 
from student 
where s# not in (select s# from course,teacher,sc where course.t#=teacher.t# and sc.c#=course.c# 
and tname='葉平');

48、查詢兩門以上不及格課程的同學的學號以及其平均成績:

select s#,avg(isnull(score,0)) 
from sc 
where s# in (select s# from sc where score<60 group by s# having count(*)>2)
group by s#;

49、檢索“004”課程分數小於60,按分數降序排列的同學學號:

select s# 
from sc 
where c#='004' 
and score<60 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章