当前位置: 首页 > news >正文

数据库复习1

一. 简答题(共1题,100分)

1. (简答题)

存在数据库test,数据库中有如下表:

1.学生表

 Student(Sno,Sname,Sage,Ssex) --Sno 学号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别

 主键Sno

2.教师表 

 Teacher(Tno,Tname) --Tno 教师编号,Tname 教师姓名

 主键Tno

3.课程表 

 Course(Cno,Cname,Tno) --Cno --课程编号,Cname 课程名称,Tno 教师编号

主键Cno   外键Tno参照教师表

4.成绩表 

 SC(Sno,Cno,score) --Sno 学生编号,Cno 课程编号,score 分数

 主键(Sno,Cno) 外键Sno,Cno分别参照学生表和课程表

按要求写出如下SQL语句:

1、查询学生学号、姓名、总成绩并按总成绩从大到小排名(要考虑没有选课的同学,总成绩显示0)

2、查询课程名称为"数据库",且分数低于60的学生姓名和分数

3、查询同名学生名单,并统计同名人姓名与人数

4、检索"1"课程分数小于60,按分数降序排列的学生所有信息

5、查询每门课程(已选课)的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列

6、查询平均成绩大于等于60的所有学生的学号、姓名和平均成绩,并按平时成绩降序。

7、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩(要考虑没有选课的同学,没有选课的同学平均成绩显示0)

我的答案:

1.

SELECT s.Sno, s.Sname, COALESCE(SUM(c.score), 0)  total

FROM Students

LEFT JOIN SC cON s.Sno = c.Sno

GROUP BY s.Sno, s.Sname

ORDER BY total DESC

(这里的COALESCE函数和ISNULL函数用法一致)

2.

SELECT s.Sname ,c.score 

FROM Student s ,SC c,Course co

WHERE  s.Sno =c.Sno AND c.Cno = co.Cno AND co.Cname = '数据库' AND c.score <60       

3 .

SELECT Sname, COUNT(Sno)

FROM Student 

GROUP BY Sname

WHERECOUNT (Sno)>1

4 .

SELECT S.*

FROM Studnet s,SC c.Course co

WHERE s.Sno=c.Sno AND c.Cno=co.Cno AND co.Cname ='1' AND c。score<60

ORDER BY c.score DESC

5 .

SELECT co.Cno,co.Cname,AVG(c.score) avg_score

FROM Coures co,SC c

WHERE co.Cno =c.Cno

GROUP BY co.Cno,co.Cname

ORDER BY avg_score DESC,co.Cno ASC 

6 .

SELECT s.Sno,s.Sname,AVG(c.score) avg_score

FROM student s,SC c

WHERE s.Sno=c.Sno

GROUP BY s.Sno,s.Sname

HAVING avg_score>=60

ORDER BY avg_score DESC

7 .

SELECT s.Sno,s.Sname,COALESCE(AVG(c.score),0) avg_score

FROM student s

LEFT JOIN SC c ON s.Sno=c.Sno

GROUP BY s.Sno,s.Sname

WHERE avg_score <60


标准参考答案

1、SELECT student.sno,student.Sname, IFNULL(sum(sc.score),0)

from student LEFT OUTER JOIN sc ON

student.Sno=sc.Sno

GROUP BY student.Sno

ORDER BY SUM(sc.score) DESC;

2、  SELECT sname,score from student,course,sc

where student.sno=sc.sno and sc.cno=course.Cno and cname='数据库' and score<60;

3、SELECT sname,count(*) from student

GROUP BY Sname

HAVING count(*)>1;

4、  SELECT student.*,sc.Cno,sc.score from student,sc

where student.sno=sc.Sno and sc.cno='1' and sc.score<60

ORDER BY sc.score DESC;

5、SELECT course.cno,course.Cname,avg(sc.score)

FROM course,sc

WHERE course.Cno=sc.Cno

GROUP BY course.cno

ORDER BY avg(sc.score) desc ,course.cno;

6、SELECT student.sno,student.Sname,avg(sc.score)

FROM student,sc

WHERE student.sno=sc.sno

GROUP BY student.sno

HAVING avg(sc.score)>=60

ORDER BY avg(sc.score) DESC;

7、SELECT student.sno,student.Sname,IFNULL(avg(sc.score),0)

FROM student LEFT OUTER JOIN sc

ON student.sno=sc.sno

GROUP BY student.sno

HAVING IFNULL(avg(sc.score),0)<60

ORDER BY avg(sc.score) DESC;

http://www.lryc.cn/news/18945.html

相关文章:

  • 18. linux系统基础
  • ssh远程登录报错:kex_exchange_identification: Connection closed by remote host
  • Quartus II 的入门级使用
  • Java EE|TCP/IP协议栈之TCP协议工作机制上
  • 智能化人机协作 遮挡情况下准确识别目标信息
  • React(一):初识React、类组件、jsx的基础语法
  • 2023-2-24 刷题情况
  • 测试员拿到新项目怎么着手测试?不要慌,照做准没错
  • 通过cfssl自签证书https证书
  • openEuler部署Ceph集群(块存储)
  • npm install vue2-ace-editor 安装报错
  • 【PyQt5图形界面编程(2)】:创建工程
  • ansible实战应用系列教程9:管理inclusions
  • MyBatis学习笔记(五) —— MyBatis获取参数值的两种方式
  • go module构建项目
  • 已经准备上千道软件测试面试题了,建议大家收藏!!!还有视频详解!
  • C++设计模式(19)——访问者模式
  • ChatGPT 的工作原理:机器人背后的模型
  • FreeRTOS入门(04):中断、内存、追踪与调试
  • 【C语言】带你彻底理解指针(1)
  • C/C++ 中 JSON 库的使用 (CJSON/nlohmann)
  • 【Opencv项目实战】目标检测:自动检测出现的所有动态目标
  • 活动报名:Tapdata Cloud V3 最新功能全解与核心应用场景演示
  • 人工智能AI威武,爱也……恨也……
  • SpringBoot-基础篇
  • Tapdata Connector 实用指南:实时数仓场景之数据实时同步至 ClickHouse
  • 刷题专练之数组移除元素
  • 常见激活函数Activation Function的选择
  • 大厂跟进ChatGPT,为什么百度“文心一言”成色最好?【快评】
  • ChatGPT和Web3:人工智能如何帮助您建立和发展您的 Web3 公司