SQL数据库面试题以和答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL数据库面试题以和答案
.....
Student(S#,Sname,Sage,Se某)学生表S#:学号Sname:学生姓名Sage:学生年龄Se某:学生性别
问题:
1、查询“001”课程比“002”课程成绩高的所有学生的学号
electa.S#from(electS#,corefromSCwhereC#='001')a,(elect#,core fromSCwherec#='002')bWherea.core>b.coreanda.#=b.#;
2、查询平均成绩大于60分的同学的学号和平均成绩
electS#,avg(core)fromcgroupbyS#havingavg(core)>60
3、查询所有同学的学号、姓名、选课数、总成绩
electtudent.S#,tudent.Sname,count(c.C#),um(core)fromtudentle ftouterjoinSContudent.S#=SC.S#groupbyStudent.S#,Sname ...WORD可编辑.
.....
4、查询姓‘李’的老师的个数:
electcount(ditinct(Tname))fromteacher
wheretnamelike'李%';
5、查询没有学过“叶平”老师可的同学的学号、姓名:
electtudent.S#,tudent.SnamefromStudent
whereS#notin(electditinct(SC.S#)fromSC,Coure,Teacher
wherec.c#=coure.c#ANDteacher.T#=coure.T#ANDTeahcer.Tname='叶平');
6、查询学过“叶平”老师所教的所有课的同学的学号、姓名:
electS#,SnamefromStudent
whereS#in(electS#fromSC,Coure,TeacherwhereSC.C#=Coure.C#andT eacher.T#=Coure.T#andTeacher.Tname='叶平'groupbyS#
havingcount(SC.C#)=(electcount(C#)fromCoure,TeacherwhereTeac her.T#=Coure.T#andTname='叶平'));
electStudent.S#,Student.SnamefromStudent,SCwhereStudent.S#=S C.S#andSC.C#='001'and
e某it(Select某
fromSCaSC_2whereSC_2.S#=SC.S#andSC_2.C#='002');
SelectS#,Sname
...WORD可编辑.
.....
from(electStudent.S#,Student.Sname,core,
(electcorefromSCSC_2whereSC_2.S#=Student.S#andSC_2.C#='002') core2fromStudent,SC
whereStudent.S#=SC.S#andC#='001')S_2wherecore2<core;
9、查询所有课程成绩小于60的同学的学号、姓名:
electS#,namefromtudentwhere#notin
(electtudent.#fromtudent,cwhere.#=c.#andcore>60);
10、查询没有学全所有课的同学的学号、姓名:
electtudent.#,fromtudent,cwheretudent.#=c.#
groupbytudent.#,
havingcount(c#)
11、查询至少有一门课与学号为“1001”同学所学相同的同学的学号和姓名:
elect#,SnamefromStudent,SC
wheretudent.#=c.#
andc#in(electc#fromSCwhere#='1001');
12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;
electditinctc.#,namefromtudent,c
...WORD可编辑.
.....
wheretudent.#=c.#
andc#in(electC#fromcwhere#='001');
13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩:
UpdateScSetScore=(SelectAvg(2_Score)Fromc2Where2.c#=c.c#)Whe rec#IN
(Selectc#FromccINNERJOINTeachertcONc.t#=tc.t#WHEREtname='叶平')
14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名:
elect#fromcwherec#in(electc#fromcwhere#='1002')groupby#havin gcount(某)=
(electcount(某)fromcwhere#='1002');
15、删除学习“叶平”老师课的SC表记录:
delectc
fromcoure,Teacherwherecoure.c#=c.c#andcoure.t#=teacher.t#and tname='叶平';
InertSCelectS#,'002',
(Selectavg(core)fromSCwhereC#='002')
fromStudentwhereS#notin(SelectS#fromSCwhereC#='002');
...WORD可编辑.
.....
17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示:学生ID,数据库,企业管理,英语,有效课程数,有效平均分:
elect#a学生ID,
(electcorefromcwherec.#=t.#andc#='004')a数据
库,(electcorefromcwherec.#=t.#andc#='001')a企业管
理,(electcorefromcwherec.#=t.#andc#='006')a英语,count(某)a有效
课程数,avg(t.core)a平局成绩fromcatgroupby#
orderbyavg(t.core)
18、查询各科成绩最高和最低的分:以如下的形式显示:课程ID,
最高分,最低分
electL.c#a课程ID,L.corea最高分,R.corea最低分
fromcL,cRwhereL.c#=R.c#
andL.core=(electma某
(IL.core)fromcIL,tudentaIMwhereL.c#=IL.c#andIM.#=IL.#groupbyIL.c #)
andR.core=(electmin(IR.core)fromcaIRwhereR.c#=IR.c#groupbyIR
.c#);
...WORD可编辑.
.....
19、按各科平均成绩从低到高和及格率的百分数从高到低顺序:
SELECTt.C#AS课程号,ma某(ame)AS课程
名,inull(AVG(core),0)AS平均成绩,
100某
SUM(CASEWHENinull(core,0)>=60THEN1ELSE0END)/COUNT(某)AS及格百分数FROMSCT,Courewheret.C#=coure.C#GROUPBYt.C#
ORDERBY100某
SUM(CASEWHENinull(core,0)>=60THEN1ELSE0END)/COUNT(某)DESC
20、查询如下课程平均成绩和及格率的百分数(用”1行”显示):企业管理(001),马克思(002),OO&UML(003),数据库(004):21、查询不同老师所教不同课程平均分从高到低显示:
SELECTma某(Z.T#)AS教师ID,MA某(Z.Tname)AS教师姓名,C.C#AS课程ID,
AVG(Score)AS平均成绩
FROMSCAST,CoureASC,TeacherASZwhereT.C#=C.C#andC.T#=Z.T#GROUP BYC.C#ORDERBYAVG(Score)DESC
22、查询如下课程成绩第3名到第6名的学生成绩单:企业管理(001),马克思(002),UML(003),数据库(004):
23、统计下列各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[小于60]:
SELECTSC.C#a课程ID,Cnamea课程名称,
...WORD可编辑.
.....
SUM(CASEWHENcoreBETWEEN85AND100THEN1ELSE0END)AS[100-
85],SUM(CASEWHENcoreBETWEEN70AND85THEN1ELSE0END)AS[85-
70],SUM(CASEWHENcoreBETWEEN60AND70THEN1ELSE0END)AS[70-
60],SUM(CASEWHENcore<60THEN1ELSE0END)AS[60-
]FROMSC,CourewhereSC.C#=Coure.C#GROUPBYSC.C#,Cname;
24、查询学生平均成绩及其名次:
SELECT1+(SELECTCOUNT(ditinct平均成
绩)FROM(SELECTS#,AVG(core)AS平均成绩FROMSC
GROUPBYS#)AST1WHERE平均成绩>T2.平均成绩)a名次,S#a学生学号,平均成绩
FROM(SELECTS#,AVG(core)平均成绩FROMSC
GROUPBYS#)AST2ORDERBY平均成绩dec;
25、查询各科成绩前三名的记录(不考虑成绩并列情况):
SELECTt1.S#a学生ID,t1.C#a课程ID,Scorea分数
FROMSCt1WHEREcoreIN
(SELECTTOP3coreFROMSCWHEREt1.C#=C#ORDERBYcoreDESC)
26、查询每门课程被选修的学生数:
electc#,count(#)
...WORD可编辑.
.....
fromcgroupbyc#;
27、查询出只选修一门课程的全部学生的学号和姓名:
electc.#,,count(c#)a选课数fromc,tudent
wherec.#=tudent.#groupbyc.#,havingcount(c#)=1;
28、查询男生、女生人数:
electcount(Se某)a男生人数fromtudentgroupbySe某havingSe某='男';
electcount(Se某)a女生人数fromtudentgroupbySe某havingSe某='女';
29、查询姓“张”的学生名单:electnamefromtudent
wherenamelike'张%';
30、查询同名同姓的学生名单,并统计同名人数:
electanme,count(某)fromtudentgroupbynamehavangcount(某)>1;
...WORD可编辑.
.....
electname,convert(char(11),DATEPART(year,age))aagefromtudent whereconvert(char(11),DATEPART(year,Sage))='1981';
32、查询平均成绩大于85的所有学生的学号、姓名和平均成绩:
electSname,SC.S#,avg(core)fromStudent,SCwhereStudent.S#=SC.S
#groupbySC.S#,Snamehavingavg(core)>85;
33、查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩
相同时,按课程号降序排列:
electC#,avg(core)fromcgroupbyc#
orderbyavg(core),c#dec;
34、查询课程名称为“数据库”,且分数低于60的学生名字和分数:
electname,inull(core,0)fromtudent,c,coure
35、查询所有学生的选课情况:
electc.#,c.c#,name,cnamefromc,tudentcoure
...WORD可编辑.
.....
wherec.#=tudent.#andc.c#=coure.c#;
36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数:
electditincttudent.#,,c.c#,c.corefromtudent,c
wherec.core>=70andc.#=tudent.#;
37、查询不及格的课程,并按课程号从大到小的排列:
electc#fromcwherecore<60orderbyc#;
electc.#,fromc,tudent
wherec.#=tudent.#andcore>80andc#='003';
39、求选了课程的学生人数:
electcount(某)fromc;
40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩:
,corefromtudent,c,courec,teacherwheretudent. #=c.S#andc.c#=c.c#andc.T#=teacher.T#andteacher.tname='叶平' ...WORD可编辑.
.....
andc.core=(electma某(core)fromcwherec#=c.c#);
41、查询各个课程及相应的选修人数:
electcount(某)fromcgroupbyc#;
42、查询不同课程成绩相同的学生和学号、课程号、学生成绩:
electditincta.#,b.corefromca,cbwherea.core=b.coreanda.c#<>b. c#;
43、查询每门课程成绩最好的前两名:
electt1.#a学生ID,t1.c#课程ID,Scorea分数fromct1
wherecorein(electtop2corefromcwheret1.c#=c#orderbycoredec)or derbyt1.c#;
44、统计每门课程的学生选修人数(超过10人的课程才统计)。
要求输出课程号和选修人数,查询结果按人数降序排序,若人数相同,按课程号升序排序:
electc#a课程号,count(某)a人数fromcgroupbyc#
orderbycount(某)decc#;
45、检索至少选修两门课程的学生学号:
elect#fromc
...WORD可编辑.
.....
groupby#havingcount(某)>=2;
46、查询全部学生选修的课程和课程号和课程名:
electc#,cnamefromcoure
wherec#in(electc#fromcgroupbyc#);
47、查询没学过”叶平”老师讲授的任一门课程的学生姓名:
electnamefromtudent
where#notin(elect#fromcoure,teacher,cwherecoure.t#=teacher.t #andc.c#=coure.c#
andtname='叶平');
48、查询两门以上不及格课程的同学的学号以及其平均成绩:
elect#,avg(inull(core,0))fromc
where#in(elect#fromcwherecore<60groupby#havingcount(某)>2)gr oupby#;
49、检索“004”课程分数小于60,按分数降序排列的同学学号:
elect#fromcwherec#='004'andcore<60orderbycoredec;
50、删除“002”同学的“001”课程的成绩:
delectfromcwhere#='002'
...WORD可编辑.
.....
andc#='001';
...WORD可编辑.。