日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库笔试面试(第一版)——根据题目完成以下50道SQL语句

發布時間:2023/12/20 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库笔试面试(第一版)——根据题目完成以下50道SQL语句 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

已知有如下4張表:

學生表:STUDENT(S#,SNAME,SAGE,SSEX)

課程表:COURSE(C#,CNAME,T#)

成績表:SC(S#,C#,SCORE)

教師表:TEACHER(T#,TNAME)

其中,S#代表學號,SNAME代表學生姓名,SAGE代表學生年齡,SSEX代表學生性別,C#代表課程編號,CNAME代表課程名字,T#代表教師編號,TNAME代表教師名字,SCORE代表成績。

根據以上信息按照下面要求寫出對應的SQL語句。

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

2、查詢平均成績大于60分的學生的學號和平均成績

3、查詢所有學生的學號、姓名、選課數、總成績

4、查詢姓“李”的老師的個數

5、查詢沒學過“李美玲”老師課的學生的學號、姓名

6、查詢學過編號為“001”的課程并且也學過編號為“002”的課程的學生的學號、姓名

7、查詢學過“李多多”老師所教的所有課的學生的學號、姓名

8、查詢課程編號為“002”的總成績

9、查詢所有課程成績小于60分的學生的學號、姓名

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

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

12、查詢所學課程和學號為“001”的學生所有課程一樣的其他學生的學號和姓名

13、把“SC”表中“李多多”老師教的課的成績都更改為此課程的平均成績

14、查詢沒有學習過“1002”號課程的的學生的學號和姓名

15、刪除學習“李多多”老師課的SC表記錄

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

17、按平均成績從高到低顯示所有學生的“數據庫”、“企業管理”、“英語”三門的課程成績,其中數據庫的c#為004,企業管理的c#為001,英語的c#為006,按如下形式顯示:

學生ID數據庫企業管理英語有效課程數有效平均成績

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

19、按各科平均成績從低到高和及格率的百分數從高到低排列,以如下形式顯示:

課程號課程名平均成績及格百分數

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

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

22、查詢如下課程成績第3名到第6名的學生成績單,其中企業管理為001,馬克思為002,UML為003,數據庫為004,以如下形式顯示:

學生ID學生姓名企業管理馬克思UML數據庫平均成績

23、使用分段[100-85],[85-70],[70-60],[<60]來統計各科成績,分別統計各分數段人數:課程ID和課程名稱

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

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

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

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

28、查詢男生、女生人數

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

30、查詢同名同性學生名單并統計同名人數

31、1981年出生的學生名單(注:STUDENT表中SAGE列的類型是DATE)

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

33、查詢平均成績大于85的所有學生的學號、姓名和平均成績

34、查詢課程名稱為“數據庫”且分數低于60的學生姓名和分數

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

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

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

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

39、查詢選了課程的學生人數

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

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

42、查詢有2門不同課程成績相同的學生的學號、課程號、學生成績

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

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

45、查詢至少選修兩門課程的學生學號

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

47、查詢沒學過“李多多”老師講授的任一門課程的學生姓名

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

49、檢索課程編號為“004”且分數小于60的學生學號,結果按按分數降序排列

50、刪除學生編號為“002”的課程編號為“001”的課程的成績

本題考察SQL的編寫能力,對于這類型的題目,只要把4張表之間的關聯關系搞清楚了,編寫對應的SQL語句就比較容易了,本題給出的四張表之間的關系如下圖所示:

1、答案:首先查詢課程編號分別為001和002的所有學生的學號及其分數作為內嵌視圖A和B,然后將A和B通過學號關聯,過濾條件就是A的分數大于B的分數,最終SQL如下:

SELECTA.S#

FROM(SELECTS#,SCOREFROMSCWHEREC#='001')A,

(SELECTS#,SCOREFROMSCWHEREC#='002')B

WHEREA.SCORE>B.SCORE

ANDA.S#=B.S#;

2、答案:該內容通過SC表即可獲取,按照SC表的S#分組后即可求出平均成績,最后通過HAVING子句來過濾平均分大于60的學生,最終SQL如下:

SELECTS#,AVG(SCORE)

FROMSC

GROUPBYS#

HAVINGAVG(SCORE)>60;

3、答案:學生姓名通過STUDENT表獲取,成績通過SC表獲取,考察的是COUNT和GROUPBY函數,最終SQL如下:

SELECTSTUDENT.S#,STUDENT.SNAME,COUNT(SC.C#),SUM(SCORE)

FROMSTUDENT

LEFTOUTERJOINSC

ONSTUDENT.S#=SC.S#

GROUPBYSTUDENT.S#,SNAME;

4、答案:老師通過TEACHER表即可查詢,考察模糊查詢,最終SQL如下:

SELECTCOUNT(DISTINCT(TNAME))

FROMTEACHER

WHERETNAMELIKE'李%';

5、答案:首先查詢學習過“李美玲”老師課的學生的學號作為子查詢,而“李美玲”老師涉及到TEACHER表,TEACHER表要和學生有關聯必須通過課程和成績表,最終SQL如下:

SELECTSTUDENT.S#,STUDENT.SNAME

WHERES#NOTIN(SELECTDISTINCT(SC.S#)

FROMSC,COURSE,TEACHER

WHERESC.C#=COURSE.C#

ANDTEACHER.T#=COURSE.T#

ANDTEACHER.TNAME='李美玲');

6、答案:這道題需要注意的是“且”這個關鍵詞,說明查詢出來的學生即學習過001也學習過002的課程,最終SQL如下:

FROMSTUDENT,SC

WHERESTUDENT.S#=SC.S#

ANDSC.C#='001'

ANDEXISTS(SELECT*

FROMSCASSC_2

WHERESC_2.S#=SC.S#

ANDSC_2.C#='002');

錯誤答案:

ANDSC.C#IN('001','002');

7、答案:這道題和第6題比較相似,需要理解題意,題目說的是查詢學過“李多多”老師所教的所有課的同學的學號、姓名,舉個例子,比如“李多多”老師教過語文和數學,那么就得找出哪些同學同時學習了語文和數學這2門課程,最終SQL如下:

SELECTS#,SNAME

WHERES#IN(SELECTS#

ANDTEACHER.TNAME='李多多'

HAVINGCOUNT(SC.C#)=(SELECTCOUNT(C#)

FROMCOURSE,TEACHER

WHERETEACHER.T#=COURSE.T#

ANDTNAME='李多多'));

WHERES#IN(SELECTS#FROMSC,COURSE,TEACHER

WHERESC.C#=COURSE.C#

ANDTEACHER.TNAME='李多多');

8、答案:本題考查SUM函數,最終SQL如下所示:

SELECTSUM(SCORE)FROMSCSC_2WHERESC_2.C#='002';

9、答案:涉及到學生表和成績表,比較簡單,最終SQL如下:

WHERES#NOTIN(SELECTSTUDENT.S#

WHERESCORE>=60);

10、答案:沒有學全所有課,翻譯一下就是學生學習的課程數小于總的課程數,最終SQL如下:

GROUPBYSTUDENT.S#,STUDENT.SNAME

HAVINGCOUNT(C#)<(SELECTCOUNT(C#)FROMCOURSE);

11、答案:首先找出學號為1001的學生學習過的課程,然后根據這些課程號就可以找到有哪些學生學習過部分1001學生學習過的課程,最終SQL如下:

ANDC#IN(SELECTC#FROMSCWHERES#='1001');

SELECTSC.S#,SNAME;

12、答案:首先找出學號為1001的學生學習過的課程,然后根據這些課程號和所學課程總數就可以找到有哪些同學學習過和他一樣的課程,最終SQL如下:

ANDC#IN(SELECTC#FROMSCWHERES#='001')

HAVINGCOUNT(C#)=(SELECTCOUNT(C#)FROMSCWHERES#='001');

13、答案:首先找到李多多老師教過哪些課程及其課程的平均成績,然后根據課程號關聯成績表進行更新,最終SQL如下:

UPDATESC

SETSCORE=

(SELECTAVG(SC_2.SCORE)

FROMCOURSE,TEACHER,SCSC_2

WHERECOURSE.T#=TEACHER.T#

ANDCOURSE.C#=SC_2.C#

ANDSC_2.C#=SC.C#

GROUPBYCOURSE.C#)

WHEREEXISTS(SELEC1FROMCOURSE,

TEACHER,

SCSC_2WHERECOURSE.T#=TEACHER.T#

GROUPBYCOURSE.C#

);

14、答案:本題比較簡答,最終SQL如下:

ANDC#NOTIN(SELECTC#FROMSCWHERES#='1002');

15、答案:本題比較簡答,最終SQL如下:

DELETEFROMSC

WHERESC.C#IN

(SELECTCOURSE.C#FROMCOURSEC,TEACHERTWHEREC.T#=T.T#ANDT.TNAME='李多多');

16、答案:2個點,002課程的平均成績和沒有學習過003課程的學生,最終SQL如下:

INSERTINTOSC(S#,C#,SCORE)

SELECTS#,'002',(SELECTAVG(SCORE)FROMSCWHEREC#='002')

WHERES#NOTIN(SELECTS#FROMSCWHEREC#='003');

17、答案:查看標量子查詢,最終SQL如下:

SELECTS#AS學生ID,

(SELECTSCOREFROMSCWHERESC.S#=T.S#ANDC#='004')AS數據庫,

(SELECTSCOREFROMSCWHERESC.S#=T.S#ANDC#='001')AS企業管理,

(SELECTSCOREFROMSCWHERESC.S#=T.S#ANDC#='006')AS英語,

COUNT(*)AS有效課程數,

AVG(T.SCORE)AS平均成績

FROMSCAST

ORDERBYAVG(T.SCORE)DESC;

18、答案:最終SQL如下:

SELECTC#AS課程ID,MAX(SCORE)AS最高分,MIN(SCORE)AS最低分

GROUPBYC#;

19、答案:最終SQL如下:

SELECTT.C#AS課程號,

MAX(COURSE.CNAME)AS課程名,

NVL(AVG(SCORE),0)AS平均成績,

((100*SUM(CASE

WHENNVL(SCORE,0)>=60THEN

1

ELSE

0

END))/COUNT(*))AS及格百分數

FROMSCT,COURSEC

WHERET.C#=C.C#

GROUPBYT.C#

ORDERBY平均成績,

END))/COUNT(*));

20、答案:最終SQL如下:

SELECTSUM(CASEWHENC#='001'THENSCOREELSE0END)/SUM(CASEC#WHEN'001'THEN1ELSE0END)AS企業管理平均分,

100*SUM(CASEWHENC#='001'ANDSCORE>=60THEN1ELSE0END)/SUM(CASEWHENC#='001'THEN1ELSE0END)AS企業管理及格百分數,

SUM(CASEWHENC#='002'THENSCOREELSE0END)/SUM(CASEC#WHEN'002'THEN1ELSE0END)AS馬克思平均分,

100*SUM(CASEWHENC#='002'ANDSCORE>=60THEN1ELSE0END)/SUM(CASEWHENC#='002'THEN1ELSE0END)AS馬克思及格百分數,

SUM(CASEWHENC#='003'THENSCOREELSE0END)/SUM(CASEC#WHEN'003'THEN1ELSE0END)ASUML平均分,

100*SUM(CASEWHENC#='003'ANDSCORE>=60THEN1ELSE0END)/SUM(CASEWHENC#='003'THEN1ELSE0END)ASUML及格百分數,

SUM(CASEWHENC#='004'THENSCOREELSE0END)/SUM(CASEC#WHEN'004'THEN1ELSE0END)AS數據庫平均分,

100*SUM(CASEWHENC#='004'ANDSCORE>=60THEN1ELSE0END)/SUM(CASEWHENC#='004'THEN1ELSE0END)AS數據庫及格百分數

FROMSC;

21、答案:最終SQL如下:

SELECTZ.T#AS教師ID,

Z.TNAMEAS教師姓名,

C.C#AS課程,

C.CNAMEAS課程名稱,

AVG(SCORE)AS平均成績

FROMSCAST,COURSEASC,TEACHERASZ

ANDC.T#=Z.T#

GROUPBYC.C#,Z.T#,Z.TNAME,C.CNAME

ORDERBYAVG(SCORE)DESC;

22、答案:最終SQL如下:

SELECTSC.S#AS學生學號,

STUDENT.SNAMEAS學生姓名,

T1.SCOREAS企業管理,

T2.SCOREAS馬克思,

T3.SCOREASUML,

T4.SCOREAS數據庫,

NVL(T1.SCORE,0)+NVL(T2.SCORE,0)+NVL(T3.SCORE,0)+

NVL(T4.SCORE,0)AS總分

LEFTJOIN(SELECT*

FROM(SELECTNB.S#,

NB.SCORE,

(RANK()OVER(PARTITIONBYNB.S#ORDERBYNB.SCORE))RK

FROMSCNB

WHERENB.C#='001')

WHERERK<=6

ANDRK>=3)AST1

ONSC.S#=T1.S#

WHERENB.C#='002')

ANDRK>=3)AST2

ONSC.S#=T2.S#

(RANK()OVER(PARTITIONBYNB.S#ORDERBYNB.SCORE))RK

WHERENB.C#='003')

ANDRK>=3)AST3

ONSC.S#=T3.S#

WHERENB.C#='004')

ANDRK>=3)AST4

ONSC.S#=T4.S#

WHERESTUDENT.S#=SC.S#;

23、答案:最終SQL如下:

SELECTSC.C#AS課程ID,

CNAMEAS課程名稱,

SUM(CASEWHENSCOREBETWEEN85AND100THEN1ELSE0END)AS"[100-85]",

SUM(CASEWHENSCOREBETWEEN70AND85THEN1ELSE0END)AS"[85-70]",

SUM(CASEWHENSCOREBETWEEN60AND70THEN1ELSE0END)AS"[70-60]",

SUM(CASEWHENSCORE<60THEN1ELSE0END)AS"[60-]"

FROMSC,COURSE

WHERESC.C#=COURSE.C#

GROUPBYSC.C#,CNAME;

24、答案:最終SQL如下:

SELECTS#AS學生學號,RKAS名次,平均成績

FROM(SELECTS#,

AVG(SCORE)平均成績,

SUM(SCORE)總成績,

(RANK()OVER(PARTITIONBYS#ORDERBYSUM(SCORE)DESC))RK

GROUPBYS#)AST2

ORDERBY名次DESC;

25、答案:最終SQL如下:

SELECTT1.S#AS學生ID,T1.C#AS課程ID,SCOREAS分數

FROMSCT1

WHERESCOREIN

(SELECTTOP3SCOREFROMSCWHERET1.C#=C#ORDERBYSCOREDESC)

ORDERBYT1.C#;

26、答案:最終SQL如下:

SELECTC#,COUNT(S#)FROMSCGROUPBYC#;

27、答案:最終SQL如下:

SELECTSC.S#,STUDENT.SNAME

FROMSC,STUDENT

WHERESC.S#=STUDENT.S#

GROUPBYSC.S#,STUDENT.SNAME

HAVINGCOUNT(C#)=1;

28、答案:最終SQL如下:

SELECTSUM(CASEWHENSSEX='男'THEN1ELSE0)AS男生人數,

SUM(CASEWHENSSEX='女'THEN1ELSE0)AS女生人數

GROUPBYSSEX;

29、答案:最終SQL如下:

SELECTSNAMEFROMSTUDENTWHERESNAMELIKE'張%';

30、答案:最終SQL如下:

SELECTSNAME,COUNT(*)FROMSTUDENTGROUPBYSNAMEHAVINGCOUNT(*)>1;

31、答案:最終SQL如下:

SELECTSNAME

WHERETO_CHAR(STUDENT.SAGE,'YYYY')='1981';

32、答案:最終SQL如下:

SELECTC#,AVG(SCORE)FROMSCGROUPBYC#ORDERBYAVG(SCORE),C#DESC;

33、答案:最終SQL如下:

SELECTSNAME,SC.S#,AVG(SCORE)

GROUPBYSC.S#,SNAME

HAVINGAVG(SCORE)>85;

34、答案:最終SQL如下:

SELECTSNAME,NVL(SCORE,0)

FROMSTUDENT,SC,COURSE

ANDSC.C#=COURSE.C#

ANDCOURSE.CNAME='數據庫'

ANDSCORE<60;

35、答案:最終SQL如下:

SELECTSC.S#,SC.C#,SNAME,CNAME

FROMSC,STUDENT,COURSE

ANDSC.C#=COURSE.C#;

36、答案:最終SQL如下:

SELECTDISTINCTSTUDENT.S#,STUDENT.SNAME,SC.C#,SC.SCORE

WHERESC.SCORE>=70

ANDSC.S#=STUDENT.S#;

37、答案:最終SQL如下:

SELECTC#FROMSCWHERESCORE<60ORDERBYC#;

38、答案:最終SQL如下:

ANDSCORE>80

ANDC#='003';

39、答案:最終SQL如下:

SELECTCOUNT(DISTINCTS#)FROMSCGROUPBYS#;

40、答案:最終SQL如下:

SELECTSTUDENT.SNAME,SCORE

FROMSTUDENT,SC,COURSEC,TEACHER

ANDSC.C#=C.C#

ANDC.T#=TEACHER.T#

ANDSC.SCORE=(SELECTMAX(SCORE)FROMSCWHEREC#=C.C#);

41、答案:最終SQL如下:

SELECTC#,COUNT(*)FROMSCGROUPBYC#;

42、答案:最終SQL如下:

SELECTDISTINCTA.S#,A.C#,B.SCORE

FROMSCA,SCB

WHEREA.SCORE=B.SCORE

ANDA.S#=B.S#

ANDA.C#<>B.C#;

43、答案:最終SQL如下:

FROM(SELECTS#,C#,(RANK()OVER(PARTITIONBYC#ORDERBYSCOREDESC))RK

FROMSC)T1

WHERERK<=2;

44、答案:最終SQL如下:

SELECTC#AS課程號,COUNT(*)AS人數

GROUPBYC#

HAVINGCOUNT(*)>10

ORDERBYCOUNT(*)DESC,C#;

45、答案:最終SQL如下:

SELECTS#FROMSCGROUPBYS#HAVINGCOUNT(*)>=2;

46、答案:最終SQL如下:

SELECTC#,CNAME

FROMCOURSE

WHEREC#IN(SELECTC#

FROM(SELECTC#,COUNT(DISTINCTS#)CS#FROMSCGROUPBYC#)

WHERECS#=(SELECTCOUNT(*)FROMSTUDENT));

47、答案:最終SQL如下:

WHERES#NOTIN(SELECTS#

FROMCOURSE,TEACHER,SC

ANDTNAME='李多多');

48、答案:最終SQL如下:

SELECTS#,AVG(NVL(SCORE,0))

WHERES#IN

(SELECTS#FROMSCWHERESCORE<60GROUPBYS#HAVINGCOUNT(*)>2)

GROUPBYS#;

49、答案:最終SQL如下:

SELECTS#

WHEREC#='004'

ANDSCORE<60

ORDERBYSCOREDESC;

50、答案:最終SQL如下:

WHERES#='002'

ANDC#='001';

總結

以上是生活随笔為你收集整理的数据库笔试面试(第一版)——根据题目完成以下50道SQL语句的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。