SQL数据库面试题以及答案!
生活随笔
收集整理的這篇文章主要介紹了
SQL数据库面试题以及答案!
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文轉載自公眾號JAVA
Student(Sid,Sname,Sage,Ssex)學生表
Sid:學號
Sname:學生姓名
Sage:學生年齡
Ssex:學生性別
Course(Cid,Cname,T#)課程表
Cid:課程編號
Cname:課程名稱
Tid:教師編號
SC(Sid,Cid,score)成績表
Sid:學號
Cid:課程編號
score:成績
Teacher(Tid,Tname)教師表
Tid:教師編號:
Tname:教師名字
問題:
1、查詢“001”課程比“002”課程成績高的所有學生的學號
select?a.sid?from? (select?sid,score?from?sc?where?cid='001')a, (select?sid,score?from?sc?where?cid='002')b? where?a.sid?=?b.sid?and?a.score>b.score;2、查詢平均成績大于60分的同學的學號和平均成績
select?sid,avg(score)?from?sc group?by?sid? having?avg(score)>60;3、查詢所有同學的學號、姓名、選課數、總成績
select?s.sid,s.sname,count_cid?as?選課數,? sum_score??as?總成績 from?student?s left?join? (select?sid,count(cid)?as?count_cid,sum(score)?as?sum_score? from?sc?group?by?sid?)sc on?s.sid?=?sc.sid;4、查詢姓‘李’的老師的個數:
select?count(tname) from?teacher? where?tname?like?'李%';5、查詢沒有學過“葉平”老師可的同學的學號、姓名:
select?s.sid,s.sname? from?student?as?s? where?s.sid?not?in?(select?DISTINCT?sid?from?sc?as?sc?where?sc.cid?in?(select?cid?from?course?as?c?left?join?teacher?as?t?on?c.tid?=?t.tid?where?t.tname?=?'葉平') );6、查詢學過“葉平”老師所教的所有課的同學的學號、姓名:
select?s.sid,s.sname? from?student?as?s? where?s.sid?in?(select?distinct?sc.sid?from?sc?as?sc?where?sc.cid?in?(select?cid?from?course?as?c?left?join?teacher?as?t?on?c.tid?=?t.tid?where?t.tname?=?'葉平')group?by?sc.sid?HAVING?count(cid)=(select?count(cid)?from?course?as?c?left?join?teacher?as?t?on?c.tid?=?t.tid?where?t.tname?=?'葉平') );7、查詢學過“011”并且也學過編號“002”課程的同學的學號、姓名:
SELECT?s.sid,s.sname? from?student?as?s? left?join?sc?as?sc?on?s.sid?=?sc.sid where?sc.cid?=?'001' and?EXISTS(select?*?from?sc?as?sc_2?where?sc.sid?=?sc_2.sid?and?sc_2.cid='002');select?s.sid,s.sname from?student?as?s? left?join?sc?as?sc? on?sc.sid?=?s.sid where?sc.cid?=?'001' and?s.sid?in?(select?sid?from?sc?as?sc_2?where?sc_2.cid='002'?and?sc_2.sid?=?sc.sid);8、查詢課程編號“002”的成績比課程編號“001”課程低的所有同學的學號、姓名:
select?sid,sname from?(select?student.sid,student.sname,score,(select?score?from?sc?as?sc_2?where?sc_2.sid?=?student.sid?and?sc_2.cid?=?'002')?as?score2?from?student,sc?where?student.sid=sc.sid?and?cid?=?'001')?s_2 where?score2<score;9、查詢所有課程成績小于60的同學的學號、姓名:
select?sid,sname from?student where?sid?not?in? (select?s.sid? from?student?s,sc? where?s.sid=sc.sid?and?score>60?);select?sid,sname from?student?s where?not?EXISTS?( select?s.sid?from?sc? where?sc.sid?=?s.sid?and?sc.score>60);10、查詢沒有學全所有課的同學的學號、姓名:
select?s.sid,s.sname from?student?s?,sc?sc? where?s.sid?=?sc.sid group?by?s.sid,s.sname having?count(sc.cid)<( select?count(cid)? from?course);select?s.sid,s.sname from?student?s? right?join?sc?sc?on?s.sid?=?sc.sid group?by?s.sid,s.sname having?count(sc.cid)< (select?count(cid)?from?course);11、查詢至少有一門課與學號為“1001”同學所學相同的同學的學號和姓名:
select?student.sid,sname from?student,sc? where?student.sid?=?sc.sid and?cid?in? (select?cid?from?sc?where?sid='1001');select?s.sid,s.sname from?sc?sc?left?join?student?as?s on?sc.sid?=?s.sid where?sc.cid?in?(select?cid?from?sc?where?sid='1001');select?sc_1.sid,s.sname from?sc?sc_1?left?join?student?as?s on?sc_1.sid?=?s.sid where? exists?(select?sc_2.cid?from?sc?as?sc_2? where?sc_1.cid?=?sc_2.cid? and?sc_2.sid?=?'1001');12、查詢至少學過學號為“001”同學所有一門課的其他同學學號和姓名;
13、把“SC”表中“葉平”老師教的課的成績都更改為此課程的平均成績:
update?sc?set?score?=? (select?avg(sc_2.score)?from?sc?sc_2?? where?sc_2.cid?=?sc.cid) where?cid?in? (select?c.cid?from?course?c? left?join?teacher?t?on?t.tid?=?c.tid? where?t.tname?=?'葉平');14、查詢和“1002”號的同學學習的課程完全相同的其他同學學號和姓名:
select?sc_1.sid? from?(select?cid?from?sc?where?sid='1002')a left?join?sc?sc_1?on?a.cid?=?sc_1.cid where?sc_1.sid<>'1002'? group?by?sc_1.sid? having?count(sc_1.cid)?=? (select?count(cid)?from?sc?where?sid='1002');select?a.sid,s.sname?from? (select?sid,GROUP_CONCAT(cid?order?by?cid?separator?',')?as?cid_str? from?sc?where?sid='1002')b, (select?sid,GROUP_CONCAT(cid?order?by?cid?separator?',')?as?cid_str? from?sc?group?by?sid)a left?join?student?s? on?a.sid?=?s.sid where?a.cid_str?=?b.cid_str?and?a.sid<>'1002';15、刪除學習“葉平”老師課的SC表記錄:
delete?from?sc?WHERE cid?in?( select?c.cid?from?course?c? LEFT?JOIN?teacher?t?on?c.tid=t.tid? where?t.tname?=?'葉平');16、向SC表中插入一些記錄,這些記錄要求符合以下條件:沒有上過編號“003”課程的同學學號、002號課的平均成績:
insert?into?sc?select?sid,'002', (select?avg(score)?from?sc?where?cid='0022') from?student? where?sid?not?in?(select?sid?from?sc?where?cid='002');17、按平均成績從高到低顯示所有學生的“數據庫”、“企業管理”、“英語”三門的課程成績,按如下形式顯示:學生ID,數據庫,企業管理,英語,有效課程數,有效平均分:
select?sid?as?學生id, (SELECT?score?from?sc? where?sc.sid?=?t.sid?and?cid='004')?as?數據庫, (select?score?from?sc? where?sc.sid?=?t.sid?and?cid='001')?as?企業管理, (select?score?from?sc? where?sc.sid?=?t.sid?and?cid='015')?as?英語, count(cid)?as?有效課程數,?avg(t.score)?as?平均成績 from?sc?as?t? group?by?sid order?by?avg(t.score);18、查詢各科成績最高和最低的分:以如下的形式顯示:課程ID,最高分,最低分
select?l.cid?as?課程id,l.score?as?最高分, r.score?as?最低分 from?sc?l,sc?r where?l.cid?=?r.cid and?l.score?=? (select?max(t.score)?from?sc?t? where?l.cid?=?t.cid?group?by?t.cid) and?r.score?=?(select?min(t.score)?from?sc?t? where?r.cid?=?t.cid?group?by?t.cid) order?by?l.cid;select?cid?as?課程id,max(score)?as?最高分, min(score)?as?最低分 from?sc? group?by?cid;19、按各科平均成績從低到高和及格率的百分數從高到低順序:
SELECT?t.cid?as?課程號, c.cname?as?課程名, COALESCE(avg(score),0)?as?平均成績, 100*sum(case? when?COALESCE(score,0)>=60? then?1?else?0?END)/count(*)?as?及格百分數 from?sc?t left?join?course?c? on?t.cid?=?c.cid group?by?t.cid order?by?100*sum(case? when?COALESCE(score,0)>=60? then?1?else?0?END)/count(*);20、查詢如下課程平均成績和及格率的百分數(用”1行”顯示): 企業管理(001),馬克思(002),OO&UML (003),數據庫(004):
21、查詢不同老師所教不同課程平均分從高到低顯示:
select?t.tid?as?教師id, t.tname?as?教師姓名, sc.cid?as?課程id, avg(score)?as?平均成績 from?sc?as?sc LEFT?JOIN?course?c?on?sc.cid?=?c.cid left?join?teacher?t?on?c.tid?=?t.tid group?by?sc.cid? order?by?avg(sc.score)?desc;22、查詢如下課程成績第3名到第6名的學生成績單:企業管理(001),馬克思(002),UML(003),數據庫(004):
23、統計下列各科成績,各分數段人數:課程ID,課程名稱,[100-85],[85-70],[70-60],[ 小于60] :
select?sc.cid?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-0]' from?sc?as?sc? left?join?course?as?c on?sc.cid?=?c.cid group?by?sc.cid;24、查詢學生平均成績及其名次:
select?1+(select?count(distinct?平均成績)? from?(select?sid,avg(score)?as?平均成績? from?sc?group?by?sid)t1? where?平均成績>t2.平均成績)?as?名次, sid?as?學生學號,平均成績? from?(select?sid,avg(score)?平均成績?from?sc?group?by?sid)?as?t2 order?by?平均成績?desc;25、查詢各科成績前三名的記錄(不考慮成績并列情況):
select?sid,cid,score from?sc?sc_1 where?( select?count(3)?from?sc?sc_2? where?sc_1.cid?=?sc_2.cid? and?sc_2.score>=sc_1.score)<=2? order?by?sc_1.cid );26、查詢每門課程被選修的學生數:
select?cid,?count(sid) from?sc? group?by?cid;27、查詢出只選修一門課程的全部學生的學號和姓名:
select?sc.sid,s.sname, count(sc.cid)?as?課程數 from?sc?as?sc LEFT?JOIN?student?as?s on?sc.sid?=?s.sid group?by?sc.sid having?count(sc.cid)=1;28、查詢男生、女生人數:
select?count(ssex)?as?男生人數 from?student group?by?ssex having?ssex?=?'男'; select?count(2)?from?student where?ssex?=?'女';29、查詢姓“張”的學生名單:
select?sid,sname from?student? where?sname?like?'張%';30、查詢同名同姓的學生名單,并統計同名人數:
select?sname,count(8) from?student? group?by?sname having?count(8)>1;31、1981年出生的學生名單(注:student表中sage列的類型是datetime):
32、查詢平均成績大于85的所有學生的學號、姓名和平均成績:
select?s.sname,sc.sid,avg(sc.score)?as?平均成績 from?sc?as?sc left?join?student?as?s? on?sc.sid?=?s.sid group?by?sc.sid? having?avg(sc.score)>85;33、查詢每門課程的平均成績,結果按平均成績升序排序,平均成績相同時,按課程號降序排列:
select?cid,avg(score) from?sc? group?by?cid order?by?avg(score),cid?desc;34、查詢課程名稱為“數據庫”,且分數低于60的學生名字和分數:
select?c.cname,s.sid,s.sname,sc.score from?course?c left?join?sc?on?sc.cid?=?c.cid LEFT?JOIN?student?s?on?s.sid?=?sc.sid where?c.cname?=?'數據庫'?and?sc.score<60;35、查詢所有學生的選課情況:
select?sc.sid,sc.cid,s.sname,c.cname from?sc? LEFT?JOIN?course?c?on?sc.cid?=?c.cid left?join?student?s?on?sc.sid?=?s.sid;36、查詢任何一門課程成績在70分以上的姓名、課程名稱和分數:
select?distinct?s.sid,s.sname,sc.cid,sc.score from?sc? left?join?student?s?on?sc.sid?=?s.sid left?join?course?c?on?sc.cid?=?c.cid where?sc.score>70;37、查詢不及格的課程,并按課程號從大到小的排列:
select?cid from?sc? where?score<60 ORDER?BY?cid;38、查詢課程編號為“003”且課程成績在80分以上的學生的學號和姓名:
select?sc.sid,s.sname? from?sc? left?join?student?s?on?sc.sid?=?s.sid where?sc.cid?=?'003'?and?sc.score>80;39、求選了課程的學生人數:
select?count(2)?from? (select?distinct?sid?from?sc)a;40、查詢選修“葉平”老師所授課程的學生中,成績最高的學生姓名及其成績:
select?s.sname,sc.score from?sc?sc? left?join?student?s?on?sc.sid?=?s.sid left?join?course?c?on?sc.cid?=?c.cid left?join?teacher?t?on?c.tid?=?t.tid where?t.tname?=?'葉平' and?sc.score?=?( select?max(score)? from?sc?sc_1? where?sc.cid?=?sc_1.cid);41、查詢各個課程及相應的選修人數:
select?cid,count(*)?from?sc?group?by?cid;42、查詢不同課程成績相同的學生和學號、課程號、學生成績:
select?DISTINCT?a.sid,a.cid,a.score from?sc?as?a?,sc?as?b? where?a.score?=?b.score and?a.cid?<>?b.cid;43、查詢每門課程成績最好的前兩名:
44、統計每門課程的學生選修人數(超過10人的課程才統計)。要求輸出課程號和選修人數,查詢結果按人數降序排序,若人數相同,按課程號升序排序:
select?cid?as?課程號,count(8)?as?選修人數 from?sc group?by?cid HAVING?count(sid)>10 order?by?count(8)?desc,cid;45、檢索至少選修兩門課程的學生學號:
select?sid from?sc group?by?sid having?count(8)>=2;46、查詢全部學生選修的課程和課程號和課程名:
select?cid,cname from?course? where?cid?in?(select?cid?from?sc?group?by?cid);47、查詢沒學過”葉平”老師講授的任一門課程的學生姓名:
select?sname? from?student? where?sid?not?in?(select?sid?from?sc,course,teacher?where?course.tid?=?teacher.tid?and?sc.cid?=?course.cid?and?teacher.tname='葉平' );48、查詢兩門以上不及格課程的同學的學號以及其平均成績:
select?sid,avg(COALESCE(score,0)) from?sc where?sid?in?(select?sid?from?sc?where?score<60?group?by?sid?having?count(8)>2 ) group?by?sid;49、檢索“004”課程分數小于60,按分數降序排列的同學學號:
select?sid,score from?sc where?cid='004' and?score<60 order?by?score?desc;50、刪除“002”同學的“001”課程的成績:
delete?from?sc where?sid?=?'002' and?cid?=?'001';來源:blog.csdn.net/hundan_520520/article/details/54881208
IT技術分享社區
個人博客網站:https://programmerblog.xyz
文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識
總結
以上是生活随笔為你收集整理的SQL数据库面试题以及答案!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 51学吧
- 下一篇: java实现ping_java实现Pin