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”課程成績高的所有學生的學號
2、查詢平均成績大於60分的同學的學號和平均成績
3、查詢所有同學的學號、姓名、選課數、總成績
4、查詢姓‘李’的老師的個數:
5、查詢沒有學過“葉平”老師可的同學的學號、姓名:
6、查詢學過“葉平”老師所教的所有課的同學的學號、姓名:
7、查詢學過“011”並且也學過編號“002”課程的同學的學號、姓名:
8、查詢課程編號“002”的成績比課程編號“001”課程低的所有同學的學號、姓名:
9、查詢所有課程成績小於60的同學的學號、姓名:
10、查詢沒有學全所有課的同學的學號、姓名:
11、查詢至少有一門課與學號為“1001”同學所學相同的同學的學號和姓名:
12、查詢至少學過學號為“001”同學所有一門課的其他同學學號和姓名;
13、把“SC”表中“葉平”老師教的課的成績都更改為此課程的平均成績:
14、查詢和“1002”號的同學學習的課程完全相同的其他同學學號和姓名:
15、刪除學習“葉平”老師課的SC表記錄:
16、向SC表中插入一些記錄,這些記錄要求符合以下條件:沒有上過編號“003”課程的同學學號、002號課的平均成績:
17、按平均成績從高到低顯示所有學生的“數據庫”、“企業管理”、“英語”三門的課程成績,按如下形式顯示:學生ID,數據庫,企業管理,英語,有效課程數,有效平均分:
18、查詢各科成績最高和最低的分: 以如下的形式顯示:課程ID,最高分,最低分
19、按各科平均成績從低到高和及格率的百分數從高到低順序:
20、查詢如下課程平均成績和及格率的百分數(用”1行”顯示):
21、查詢不同老師所教不同課程平均分從高到低顯示:
22、查詢如下課程成績第3名到第6名的學生成績單:企業管理(001),馬克思(002),UML(003),數據庫(004):
23、統計下列各科成績,各分數段人數:課程ID,課程名稱,[100-85],[85-70],[70-60],[ 小於60] :
24、查詢學生平均成績及其名次:
25、查詢各科成績前三名的記錄(不考慮成績並列情況):
26、查詢每門課程被選修的學生數:
27、查詢出只選修一門課程的全部學生的學號和姓名:
28、查詢男生、女生人數:
29、查詢姓“張”的學生名單:
30、查詢同名同姓的學生名單,並統計同名人數:
31、1981年出生的學生名單(註:student表中sage列的類型是datetime):
32、查詢平均成績大於85的所有學生的學號、姓名和平均成績:
33、查詢每門課程的平均成績,結果按平均成績升序排序,平均成績相同時,按課程號降序排列:
34、查詢課程名稱為“數據庫”,且分數低於60的學生名字和分數:
35、查詢所有學生的選課情況:
36、查詢任何一門課程成績在70分以上的姓名、課程名稱和分數:
37、查詢不及格的課程,並按課程號從大到小的排列:
38、查詢課程編號為“003”且課程成績在80分以上的學生的學號和姓名:
39、求選了課程的學生人數:
40、查詢選修“葉平”老師所授課程的學生中,成績最高的學生姓名及其成績:
41、查詢各個課程及相應的選修人數:
42、查詢不同課程成績相同的學生和學號、課程號、學生成績:
43、查詢每門課程成績最好的前兩名:
44、統計每門課程的學生選修人數(超過10人的課程才統計)。要求輸出課程號和選修人數,查詢結果按人數降序排序,若人數相同,按課程號升序排序
45、檢索至少選修兩門課程的學生學號:
46、查詢全部學生選修的課程和課程號和課程名:
47、查詢沒學過”葉平”老師講授的任一門課程的學生姓名:
48、查詢兩門以上不及格課程的同學的學號以及其平均成績:
49、檢索“004”課程分數小於60,按分數降序排列的同學學號:
50、刪除“002”同學的“001”課程的成績:
答案:
1、
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、
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、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、
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、
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、
select s#, Sname
from Student, SC
where student.s# = sc.s#
and c# in (select c# from SC where s#=‘1001‘);
12、
select distinct sc.s# , sname
from student, sc
where student.s#=sc.s#
and c# in (select C# from sc where s#=‘001‘);
13、
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、
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、
delect sc
from course, Teacher
where course.c#=sc.c#
and course.t#=teacher.t#
and tname=‘葉平‘;
16、
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、
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、
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、
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
order by score desc;
50、刪除“002”同學的“001”課程的成績:
delect from sc
where s#=‘002‘
and c#=‘001‘;
SQL數據庫面試50題(轉載)