1. 程式人生 > >SQL數據庫面試50題(轉載)

SQL數據庫面試50題(轉載)

top 答案 sum cname sco 性別 then del 16px

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行”顯示):

企業管理(001),馬克思(002),OO&UML 003),數據庫(004):

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、查詢同名同姓的學生名單,並統計同名人數:

311981年出生的學生名單(註: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=‘葉平‘));

7select 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;

311981年出生的學生名單(註: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題(轉載)