暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

根据题目要求写出以下50道SQL语句(2)

DB宝 2016-12-29
2597




Q
题目如下所示:


昨天分享了前25道,今天继续分享后25道题。

【DB笔试面试11】根据题目要求写出以下50道SQL语句(1)

已知有如下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语句。

 

26、查询每门课程被选修的学生数

27、查询出只选修了一门课程的全部学生的学号和姓名

28、查询男生、女生人数

29、查询姓“张”的学生名单

30、查询同名同性学生名单并统计同名人数

311981年出生的学生名单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”的课程的成绩


     

A
解析如下所示:

。CD

 本题考察SQL的编写能力,对于这类型的题目,只要把4张表之间的关联关系搞清楚了,编写对应的SQL语句就比较容易了,本题给出的四张表之间的关系如下图所示:


26、答案:最终SQL如下:

 SELECT C#, COUNT(S#) FROM SC GROUP BY C#;

27、答案:最终SQL如下:

SELECT SC.S#, STUDENT.SNAME

  FROM SC, STUDENT

 WHERE SC.S# = STUDENT.S#

 GROUP BY SC.S#, STUDENT.SNAME

HAVING COUNT(C#) = 1;

28、答案:最终SQL如下:

SELECT SUM(CASE WHEN SSEX = '' THEN 1 ELSE 0) AS 男生人数,

       SUM(CASE WHEN SSEX = '' THEN 1 ELSE 0) AS 女生人数

  FROM STUDENT

 GROUP BY SSEX;

29、答案:最终SQL如下:

SELECT SNAME FROM STUDENT WHERE SNAME LIKE '%';

30、答案:最终SQL如下:

SELECT SNAME, COUNT(*) FROM STUDENT GROUP BY SNAME HAVING COUNT(*) > 1;

31、答案:最终SQL如下:

 SELECT SNAME

FROM STUDENT

WHERE TO_CHAR(STUDENT.SAGE,'YYYY')='1981';

32、答案:最终SQL如下:

 SELECT C#, AVG(SCORE) FROM SC GROUP BY C# ORDER BY AVG(SCORE), C# DESC;

33、答案:最终SQL如下:

 SELECT SNAME, SC.S#, AVG(SCORE)

  FROM STUDENT, SC

 WHERE STUDENT.S# = SC.S#

 GROUP BY SC.S#, SNAME

HAVING AVG(SCORE) > 85;

34、答案:最终SQL如下:

SELECT SNAME, NVL(SCORE, 0)

  FROM STUDENT, SC, COURSE

 WHERE SC.S# = STUDENT.S#

   ANDSC.C# = COURSE.C#

   AND COURSE.CNAME = '数据库'

   AND SCORE < 60;

35、 答案:最终SQL如下:

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

  FROM SC, STUDENT, COURSE

 WHERE SC.S# = STUDENT.S#

   ANDSC.C# = COURSE.C#;

36、答案:最终SQL如下:

SELECT DISTINCT STUDENT.S#, STUDENT.SNAME,SC.C#, SC.SCORE

  FROM STUDENT, SC

 WHERE SC.SCORE >= 70

   AND SC.S# = STUDENT.S#;

37、答案:最终SQL如下:

SELECT C# FROM SC WHERE SCORE < 60 ORDER BY C#;

38、答案:最终SQL如下:

SELECT SC.S#, STUDENT.SNAME

  FROM SC, STUDENT

 WHERE SC.S# = STUDENT.S#

   AND SCORE > 80

   AND C# = '003';

39、答案:最终SQL如下:

SELECT COUNT(DISTINCT S#) FROM SC GROUP BY S#;

40、答案:最终SQL如下:

 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、答案:最终SQL如下:

SELECT C#, COUNT(*) FROM SC GROUP BY C#;

42、答案:最终SQL如下:

SELECT DISTINCT A.S#, A.C#, B.SCORE

  FROM SC A, SC B

 WHERE A.SCORE = B.SCORE

   AND A.S# = B.S#

   AND A.C# <> B.C#;

43、答案:最终SQL如下:

SELECT T1.S# AS 学生ID, T1.C# AS 课程ID, SCORE AS 分数

  FROM (SELECT S#, C#, (RANK() OVER(PARTITION BY C# ORDER BY SCORE DESC)) RK

          FROM SC) T1

 WHERE RK <= 2;

44、答案:最终SQL如下:

SELECT C# AS 课程号, COUNT(*) AS 人数

  FROM SC

 GROUP BY C#  

 HAVING  COUNT(*)>10

 ORDER BY COUNT(*) DESC, C#;

45、答案:最终SQL如下:

SELECT S# FROM SC GROUP BY S# HAVING COUNT(*) >= 2;

46、答案:最终SQL如下:

SELECT C#, CNAME

  FROM COURSE

 WHERE C# IN (SELECT C#

                FROM (SELECT C#, COUNT(DISTINCT S#) CS# FROM SC GROUP BY C#)

               WHERE CS# = (SELECT COUNT(*) FROM STUDENT));

47、答案:最终SQL如下:

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、答案:最终SQL如下:

 SELECT S#, AVG(NVL(SCORE, 0))

  FROM SC

 WHERE S# IN

       (SELECT S# FROM SC WHERE SCORE < 60 GROUP BY S# HAVING COUNT(*) > 2)

 GROUP BY S#;

49、答案:最终SQL如下:

SELECT S#

  FROM SC

 WHERE C# = '004'

   AND SCORE < 60

 ORDER BY SCORE DESC;

50、答案:最终SQL如下:

DELETE FROM SC

 WHERE S# = '002'

   AND C# = '001';





DB笔试面试历史连接

【DB笔试面试11】根据题目要求写出以下50道SQL语句(1)
【DB笔试面试10】下列选项中,不属于SQL约束的是()
【DB笔试面试9】对数据库第二范式的理解,正确的是()
【DB笔试面试8】小明设计了如下的学籍管理系统,已知关系:
【DB笔试面试7】运行上面的程序,下面选项中哪几个更改永久保存到数据库()

【DB笔试面试6】适合建立索引的字段是()(多选题)
【DB笔试面试5】在Oracle数据库中,下面关于函数的描述正确的是()
⊙ 【DB笔试面试4】在Oracle中,关于PL/SQL下列描述正确的是()
【DB笔试面试3】下面哪种情况会让普通用户连接到Oracle数据库,但不能创建表()
【DB笔试面试2】下面哪个用户不是Oracle缺省安装后就存在的用户()
【DB笔试面试1】下列不属于Oracle的逻辑结构的是()





About Me:小麦苗

 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

 文章内容来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

 版权所有,欢迎分享本文,转载请保留出处



长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。


DBA求职布道者

◆ DB最新咨询

◆ DB求职面经
◆ DB干货推送◆ DB最新技术
◆ DB职业发展与规划◆ DB进阶思路与方法

长按二维码点选(识别图中二维码)


最后修改时间:2020-01-10 21:23:51
文章转载自DB宝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论