sql经典面试50题

上传人:第*** 文档编号:34950402 上传时间:2018-03-05 格式:DOCX 页数:14 大小:29.45KB
返回 下载 相关 举报
sql经典面试50题_第1页
第1页 / 共14页
sql经典面试50题_第2页
第2页 / 共14页
sql经典面试50题_第3页
第3页 / 共14页
sql经典面试50题_第4页
第4页 / 共14页
sql经典面试50题_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《sql经典面试50题》由会员分享,可在线阅读,更多相关《sql经典面试50题(14页珍藏版)》请在金锄头文库上搜索。

1、1. 一般面试时考SQL,主要就是考你“统计分析”这一块,下面我们来看面试官经常采用的手段。2. 3. 4. 由4张简单的不能再简单的表,演变出50道SQL5. 6. 7. 哈哈哈哈,够这个面试官面个15,20个人,不带重复的了,而且每个SQL你真的不动动脑子还写不出呢,你别不服气,下面开始。8. 9. 表结构:10. 11. 12. 13. 表Student14. 15. (S#,Sname,Sage,Ssex)学生表16. 17. 18. S#student_no19. 20. Sagestudent_age21. 22. Ssexstudent_sex23. 24. 25. 26. 表C

2、ourse27. 28. (C#,Cname,T#)课程表29. 30. 31. C#course_no32. 33. Cnamecourse_name34. 35. T#teacher_no36. 37. 38. 39. 40. 41. 42. 表SC(学生与课程的分数mapping表)43. 44. (S#,C#,score)成绩表45. 46. 47. S#student_no48. C#course_no49. score分数啦50. 51. 52. 53. 54. 55. 56. 表Teacher57. 58. (T#,Tname)教师表59. 60. 61. T#teacher_n

3、o62. Tnameteacher_name63. 64. 65. 66. 67. 68. 69. 50道问题开始70. 71. 72. 73. 74. 75. 76. 1、查询“001”课程比“002”课程成绩高的所有学生的学号;77. 78. 79. selecta.S#from(selects#,scorefromSCwhereC#=001)a,(selects#,score80. 81. fromSCwhereC#=002)82. 83. 84. 85. 86. wherea.scoreb.scoreanda.s#=b.s#;87. 88. 89. 90. 91. 2、查询平均成绩大于

4、60分的同学的学号和平均成绩;92. 93. selectS#,avg(score)94. 95. fromsc96. 97. groupbyS#havingavg(score)60;98. 99. 100. 101. 102. 3、查询所有同学的学号、姓名、选课数、总成绩;103. 104. selectStudent.S#,Student.Sname,count(SC.C#),sum(score)105. 106. fromStudentleftOuterjoinSConStudent.S#=SC.S#107. 108. groupbyStudent.S#,Sname109. 110. 1

5、11. 112. 113. 4、查询姓“李”的老师的个数;114. 115. selectcount(distinct(Tname)116. 117. fromTeacher118. 119. whereTnamelike李%;120. 121. 122. 123. 124. 5、查询没学过“叶平”老师课的同学的学号、姓名;125. 126. selectStudent.S#,Student.Sname127. 128. fromStudent129. 130. whereS#notin(selectdistinct(SC.S#)fromSC,Course,TeacherwhereSC.C#=

6、Course.C#andTeacher.T#=Course.T#andTeacher.Tname=叶平);131. 132. 133. 134. 135. 6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;136. 137. selectStudent.S#,Student.SnamefromStudent,SCwhereStudent.S#=SC.S#andSC.C#=001andexists(Select*fromSCasSC_2whereSC_2.S#=SC.S#andSC_2.C#=002);138. 139. 140. 141. 142. 7、查询学过“叶平”老师

7、所教的所有课的同学的学号、姓名;143. 144. selectS#,Sname145. 146. fromStudent147. 148. whereS#in(selectS#fromSC,Course,TeacherwhereSC.C#=Course.C#andTeacher.T#=Course.T#andTeacher.Tname=叶平groupbyS#havingcount(SC.C#)=(selectcount(C#)fromCourse,TeacherwhereTeacher.T#=Course.T#andTname=叶平);149. 150. 151. 152. 153. 8、查

8、询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;154. 155. SelectS#,Snamefrom(selectStudent.S#,Student.Sname,score,(selectscorefromSCSC_2whereSC_2.S#=Student.S#andSC_2.C#=002)score2156. 157. fromStudent,SCwhereStudent.S#=SC.S#andC#=001)S_2wherescore260);167. 168. 169. 170. 171. 10、查询没有学全所有课的同学的学号、姓名;172. 173.

9、selectStudent.S#,Student.Sname174. 175. fromStudent,SC176. whereStudent.S#=SC.S#groupbyStudent.S#,Student.Snamehavingcount(C#)=60THEN1ELSE0END)/COUNT(*)AS及格百分数303. 304. FROMSCT,Course305. 306. wheret.C#=course.C#307. 308. GROUPBYt.C#309. 310. ORDERBY100*SUM(CASEWHENisnull(score,0)=60THEN1ELSE0END)/C

10、OUNT(*)DESC311. 312. 313. 20、查询如下课程平均成绩和及格率的百分数(用1行显示):314. 315. 316. 企业管理(001),马克思(002),OO&UML(003),数据库(004)317. 318. 319. 320. 321. 322. SELECTSUM(CASEWHENC#=001THENscoreELSE0END)/SUM(CASEC#WHEN001THEN1ELSE0END)AS企业管理平均分323. 324. ,100*SUM(CASEWHENC#=001ANDscore=60THEN1ELSE0END)/SUM(CASEWHENC#=001T

11、HEN1ELSE0END)AS企业管理及格百分数325. 326. ,SUM(CASEWHENC#=002THENscoreELSE0END)/SUM(CASEC#WHEN002THEN1ELSE0END)AS马克思平均分327. 328. ,100*SUM(CASEWHENC#=002ANDscore=60THEN1ELSE0END)/SUM(CASEWHENC#=002THEN1ELSE0END)AS马克思及格百分数329. 330. ,SUM(CASEWHENC#=003THENscoreELSE0END)/SUM(CASEC#WHEN003THEN1ELSE0END)ASUML平均分3

12、31. 332. ,100*SUM(CASEWHENC#=003ANDscore=60THEN1ELSE0END)/SUM(CASEWHENC#=003THEN1ELSE0END)ASUML及格百分数333. 334. ,SUM(CASEWHENC#=004THENscoreELSE0END)/SUM(CASEC#WHEN004THEN1ELSE0END)AS数据库平均分335. 336. ,100*SUM(CASEWHENC#=004ANDscore=60THEN1ELSE0END)/SUM(CASEWHENC#=004THEN1ELSE0END)AS数据库及格百分数337. FROMSC3

13、38. 339. 340. 341. 342. 343. 21、查询不同老师所教不同课程平均分从高到低显示344. SELECTmax(Z.T#)AS教师ID,MAX(Z.Tname)AS教师姓名,C.C#AS课程,MAX(C.Cname)AS课程名称,AVG(Score)AS平均成绩345. FROMSCAST,CourseASC,TeacherASZ346. whereT.C#=C.C#andC.T#=Z.T#347. GROUPBYC.C#348. ORDERBYAVG(Score)DESC349. 350. 351. 22、查询如下课程成绩第3名到第6名的学生成绩单:352. 353.

14、 企业管理(001),马克思(002),UML(003),数据库(004)354. 355. 学生ID,学生姓名,企业管理,马克思,UML,数据库,平均成绩356. SELECTDISTINCTtop3357. SC.S#As学生学号,358. Student.SnameAS学生姓名,359. T1.scoreAS企业管理,360. T2.scoreAS马克思,361. T3.scoreASUML,362. T4.scoreAS数据库,363. ISNULL(T1.score,0)+ISNULL(T2.score,0)+ISNULL(T3.score,0)+ISNULL(T4.score,0)

15、as总分364. FROMStudent,SCLEFTJOINSCAST1365. ONSC.S#=T1.S#ANDT1.C#=001366. LEFTJOINSCAST2367. ONSC.S#=T2.S#ANDT2.C#=002368. LEFTJOINSCAST3369. ONSC.S#=T3.S#ANDT3.C#=003370. LEFTJOINSCAST4371. ONSC.S#=T4.S#ANDT4.C#=004372. WHEREstudent.S#=SC.S#and373. ISNULL(T1.score,0)+ISNULL(T2.score,0)+ISNULL(T3.scor

16、e,0)+ISNULL(T4.score,0)374. NOTIN375. (SELECT376. DISTINCT377. TOP15WITHTIES378. ISNULL(T1.score,0)+ISNULL(T2.score,0)+ISNULL(T3.score,0)+ISNULL(T4.score,0)379. FROMsc380. LEFTJOINscAST1381. ONsc.S#=T1.S#ANDT1.C#=k1382. LEFTJOINscAST2383. ONsc.S#=T2.S#ANDT2.C#=k2384. LEFTJOINscAST3385. ONsc.S#=T3.S#

17、ANDT3.C#=k3386. LEFTJOINscAST4387. ONsc.S#=T4.S#ANDT4.C#=k4388. ORDERBYISNULL(T1.score,0)+ISNULL(T2.score,0)+ISNULL(T3.score,0)+ISNULL(T4.score,0)DESC);389. 390. 391. 23、统计列印各科成绩,各分数段人数:课程ID,课程名称,100-85,85-70,70-60,60392. SELECTSC.C#as课程ID,Cnameas课程名称393. ,SUM(CASEWHENscoreBETWEEN85AND100THEN1ELSE0E

18、ND)AS100-85394. ,SUM(CASEWHENscoreBETWEEN70AND85THEN1ELSE0END)AS85-70395. ,SUM(CASEWHENscoreBETWEEN60AND70THEN1ELSE0END)AS70-60396. ,SUM(CASEWHENscoreT2.平均成绩)as名次,408. S#as学生学号,平均成绩409. FROM(SELECTS#,AVG(score)平均成绩410. FROMSC411. GROUPBYS#412. )AST2413. ORDERBY平均成绩desc;414. 415. 25、查询各科成绩前三名的记录:(不考虑

19、成绩并列情况)416. SELECTt1.S#as学生ID,t1.C#as课程ID,Scoreas分数417. FROMSCt1418. WHEREscoreIN(SELECTTOP3score419. FROMSC420. WHEREt1.C#=C#421. ORDERBYscoreDESC422. )423. ORDERBYt1.C#;424. 425. 26、查询每门课程被选修的学生数426. selectc#,count(S#)fromscgroupbyC#;427. 428. 27、查询出只选修了一门课程的全部学生的学号和姓名429. selectSC.S#,Student.Snam

20、e,count(C#)AS选课数430. fromSC,Student431. whereSC.S#=Student.S#groupbySC.S#,Student.Snamehavingcount(C#)=1;432. 433. 28、查询男生、女生人数434. Selectcount(Ssex)as男生人数fromStudentgroupbySsexhavingSsex=男;435. Selectcount(Ssex)as女生人数fromStudentgroupbySsexhavingSsex=女;436. 437. 29、查询姓“张”的学生名单438. SELECTSnameFROMStu

21、dentWHERESnamelike张%;439. 440. 30、查询同名同性学生名单,并统计同名人数441. selectSname,count(*)fromStudentgroupbySnamehavingcount(*)1;442. 443. 31、1981年出生的学生名单(注:Student表中Sage列的类型是datetime)444. selectSname,CONVERT(char(11),DATEPART(year,Sage)asage445. fromstudent446. whereCONVERT(char(11),DATEPART(year,Sage)=1981;447

22、. 448. 32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列449. SelectC#,Avg(score)fromSCgroupbyC#orderbyAvg(score),C#DESC;450. 451. 33、查询平均成绩大于85的所有学生的学号、姓名和平均成绩452. selectSname,SC.S#,avg(score)453. fromStudent,SC454. whereStudent.S#=SC.S#groupbySC.S#,Snamehavingavg(score)85;455. 456. 34、查询课程名称为“数据库”,且分数低于6

23、0的学生姓名和分数457. SelectSname,isnull(score,0)458. fromStudent,SC,Course459. whereSC.S#=Student.S#andSC.C#=Course.C#andCourse.Cname=数据库andscore=70ANDSC.S#=student.S#;470. 471. 37、查询不及格的课程,并按课程号从大到小排列472. selectc#fromscwherescore80andC#=003;476. 477. 39、求选了课程的学生人数478. selectcount(*)fromsc;479. 40、查询选修“叶平”

24、老师所授课程的学生中,成绩最高的学生姓名及其成绩480. selectStudent.Sname,score481. fromStudent,SC,CourseC,Teacher482. whereStudent.S#=SC.S#andSC.C#=C.C#andC.T#=Teacher.T#andTeacher.Tname=叶平andSC.score=(selectmax(score)fromSCwhereC#=C.C#);483. 484. 41、查询各个课程及相应的选修人数485. selectcount(*)fromscgroupbyC#;486. 487. 42、查询不同课程成绩相同的

25、学生的学号、课程号、学生成绩488. selectdistinctA.S#,B.scorefromSCA,SCBwhereA.Score=B.ScoreandA.C#B.C#;489. 490. 43、查询每门功成绩最好的前两名491. SELECTt1.S#as学生ID,t1.C#as课程ID,Scoreas分数492. FROMSCt1493. WHEREscoreIN(SELECTTOP2score494. FROMSC495. WHEREt1.C#=C#496. ORDERBYscoreDESC497. )498. ORDERBYt1.C#;499. 500. 44、统计每门课程的学生

26、选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,查询结果按人数降序排列,若人数相同,按课程号升序排列501. selectC#as课程号,count(*)as人数502. fromsc503. groupbyC#504. orderbycount(*)desc,c#505. 506. 45、检索至少选修两门课程的学生学号507. selectS#508. fromsc509. groupbys#510. havingcount(*)=2511. 512. 46、查询全部学生都选修的课程的课程号和课程名513. selectC#,Cname514. from

27、Course515. whereC#in(selectc#fromscgroupbyc#)516. 517. 47、查询没学过“叶平”老师讲授的任一门课程的学生姓名518. selectSnamefromStudentwhereS#notin(selectS#fromCourse,Teacher,SCwhereCourse.T#=Teacher.T#andSC.C#=course.C#andTname=叶平);519. 520. 48、查询两门以上不及格课程的同学的学号及其平均成绩521. selectS#,avg(isnull(score,0)fromSCwhereS#in(selectS#fromSCwherescore2)groupbyS#;522. 523. 49、检索“004”课程分数小于60,按分数降序排列的同学学号524. selectS#fromSCwhereC#=004andscore60orderbyscoredesc;525. 526. 50、删除“002”同学的“001”课程的成绩527. deletefromScwhereS#=001andC#=001;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 初中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号