当前位置:首页 » 编程语言 » sql应用题解题
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql应用题解题

发布时间: 2023-04-22 14:00:36

1. 数据库 sql应用题

10.题答案
select 课程号,总分,平均分,最高分,最低分(
select 课程号,
总分=sum(成绩),
平均分=sum(成绩)/count(*),
最高分=max(成绩),
最低分=min(成绩)
from 成绩
group by 课程号) as kc order by 平均分 desc
11.题答案
select 课程号,
平均分=sum(成绩)/count(*)
from 成绩
where 课程号='1001' or 课程号='1002'
group by 课程号
12.题答案
select 姓名,xs.学号,kc.平均分
from 学生 as xs
left join (select 学号,
平均分=sum(成绩)/count(*)
from 成绩
group by 学号) as kc on kc.学号=xs.学号
where kc.平均分>80

2. SQL语句 应用题 专家们 速度解决 答得好另有奖励

1.SELECT*FROM课程

2.SELECTST.学号,
ST.姓名,
SC.成绩
FROM学生ASST
JOIN成绩ASSC
ONST.学号=SC.学号
JOIN课程ASCO
ONSC.课程号=CO.课程号
WHERECO.授课教师='刘老师'

3.SELECTCO.课程名,
ST.COUNT(*)
FROM学生ASST
JOIN成绩ASSC
ONST.学号=SC.学号
JOIN课程ASCO
桥衫ONSC.课程号=CO.课程号
GROUPBYCO.课程名

4.SELECT*FROM学生

5.SELECTST.学号,
ST.姓名,
敏吵腔SC.成绩
FROM学生ASST
JOIN成绩ASSC
ONST.学号=SC.学号
JOIN课程ASCO
ONSC.课程号=CO.课程号
WHERECO.课程名='数据库应用'

6.SELECTCOUNT(*),
性别
FROM学生
GROUPBY性别

7.SELECTST.学号,
ST.姓名,
SC.成绩
FROM学生ASST
JOIN成绩ASSC
ONST.学号=SC.学号
JOIN课程ASCO
ONSC.课程号=CO.课程号
WHERECO.课程名='Access'
ANDSC.成绩>70

8.同6

9.SELECTST.学号,
ST.姓名
FROM学生ASST
JOIN成绩ASSC
ONST.学号=SC.学号
JOIN课程ASCO
ON碰唯SC.课程号=CO.课程号
WHERECO.课程名='计算机应用'
ANDST.性别='男'

10.SELECT*FROM学生
WHERE年龄>18AND姓名LIKE'王%'

同学给分吧,不明白的追问。

3. SQL经典50题题解

本篇文章主要是对SQL经典50题进行详细解析。

解析包含:1、解题思路,2、考核知识点,3、答案;

首先,表结构用脑图输出出来,如下所示:

先进行数据准备,建表以及插入数据。

1.查询"01"课程比"02"课程成绩高的学生的信息及课程分数

解题思路:

第一步:关键词有“课程编号”、“课程成绩”、“学生信息”,锁定使用表:学生表、成绩表。

第二步:给出学生信息及课程分数,通过主键sid关联学生表和课程表。

第三步:比较同一个学生不同课程的成绩,再关联一次课程表,利用sid、cid进行关联。

第四步:根据题目,用where比较分数筛选结果。

考核知识点: join,where

答案:

1.1 查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )

解题思路:

第一步:关键词有“课程编号”、“学生编号”,锁定使用表:成绩表。

第二步:分别查询出存在" 01 "课程的学生和存在" 02 "课程的学生。

第三步:对两个子查询进行关联,用sid进行左联接。

考核知识点: where, 子查询,left join

答案:

1.2 查询同时存在01和02课程的情况

解题思路: 同1.1,把left join改为join

考核知识点: where, 子查询,join

答案:

1.3 查询选择了02课程但没有01课程的情况

解题思路: 类似1.1,把left join改为right join

考核知识点: where, 子查询,right join

答案:

小结: 上面的题主要考察join、left join、right join。

2.查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩

解题思路:

第一步:关键词有“平均成绩”、“学生编号”、“学生姓名”,锁定使用表:成绩表、学生表。

第二步:给出学生信息及课程分数,通过主键sid关联学生表和课程表。。

第三步:根据题目,用group by聚合计算出平均成绩,然后筛选出大于等于60分的学生。

考核知识点: join、group by、avg()

答案:

3.查询在 SC 表存在成绩的学生信息

解题思路:

第一步:关键词有“SC”、“学生信息”,锁定使用表:成绩表、学生表。

第二步:用EXISTS判断在SC表存在成绩的学生信息

考核知识点: EXISTS语句

答案:

4.查询所有同学的学生编号、学生姓名、选课总数、所有课程的成绩总和

解题思路:

第一步:关键词有“学生编号”、“学生姓名”、“选课总数”、“课程成绩”,锁定使用表:成绩表、学生表。

第二步:通过主键sid关联学生表成绩表,得到学生信息、学生成绩的宽表

第三步:根据题目,用group by聚合计算选课总数和总成绩

考核知识点: left join、group by、count()、sum()、ifnull()

答案:

5.查询“李”姓老师的数量

解题思路:

第一步:关键词有“老师的数量”,锁定使用表:教师表。

第二步:先筛选出“李”姓老师,再汇总统计“李”姓老师的数量

考核知识点: like、where、%、count()

答案:

6.查询学过“张三”老师授课的同学的信息

解题思路:

第一步:关键词有“老师”、“学生信息”,锁定使用表:教师表、学生表、成绩表、课程表。

第二步:通过sid关联学生表、成绩表,再通过cid关联课程表,最后通过tid关联教师表。

第三步:用where筛选出“张三”老师授课的同学的信息。

考核知识点: 多重连接join

答案:

7.查询没有学全所有课程的同学的信息。

解题思路:

第一步:关键词有“课程”、“学生信息”,锁定使用表:学生表、成绩表、课程表。

第二步:先统计学生的课程数量,再筛选出小于所有课程数量的学生。

考核知识点: left join、group by、count()

答案:

8.查询至少有一门课与学号为" 01 "的同学所学相同的同学的信息。

解题思路:

第一步:关键词有“课程”、“学生信息”,锁定使用表:学生表、成绩表。

第二步:先查询学号“01”的同学学习的课程。

第三步:通过sid关联学生表和成绩表,获取所有学生信息、课程信息。

第四步:用EXISTS筛选出至少1门课相同的同学信息。

考核知识点: left join、子查询、EXISTS

答案:

9.查询和" 01 "号的同学学习的课程完全相同的其他同学的信息

解题思路:

第一步:关键词有“课程”、“学生信息”,锁定使用表:学生表、成绩表。

第二步:用“01”号的同学学习的课程左关联学生课程表,筛选出关链课程数一致的其他同学的sid

第三步:通过sid关联学生表和成绩表,获取完整的学生信息。

考核知识点: left join、子查询、group by

答案:

10.查询没学过"张三"老师讲授的任一门课程的学生姓名

解题思路:

第一步:关键词有“老师”、“学生姓名”,锁定使用表:学生表、成绩表、课程表、教师表。

第二步:反向求解。先查询至少学过“张三”老师讲授的课程的学生sid

第三步:用NOT EXISTS筛选出不在第二步查询结果的学生信息,。

考核知识点: 多重连接join、NOT EXISTS、子查询

答案:

11.查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩

解题思路:

第一步:关键词有“姓名”、“平均成绩”,锁定使用表:学生表、成绩表。

第二步:通过sid关联学生表和成绩表,得到学生成绩信息宽表

第三步:用group by聚合统计,having对聚合的结果进行筛选。

考核知识点: join、group by、having、case when语句、avg()

答案:

12.检索" 01 "课程分数小于 60,按分数降序排列的学生信息

解题思路:

第一步:关键词有“课程分数”、“学生信息”,锁定使用表:学生表、成绩表。

第二步:通过sid关联学生表和成绩表,得到学生成绩信息宽表

第三步:用where筛选" 01 "课程分数小于 60的记录,并按照分数降序排列。

考核知识点: join、where、order by

答案:

13.按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩

解题思路:

第一步:关键词有“平均成绩”,锁定使用表:成绩表。

第二步:用group by将学生课程的成绩由行转换为列并计算平均成绩。

第三步:按照平均成绩降序显示学生的所有课程的成绩以及平均成绩。

考核知识点: join

答案:

14.查询各科成绩最高分、最低分和平均分,以如下形式显示:

以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,

优良率,优秀率

及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90

要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

解题思路:

第一步:关键词有“课程name”、“最高分”,锁定使用表:课程表、成绩表。

第二步:用group by聚合计算课程最高分、最低分、平均分。

第三步:用case语句判断及格、中等、优良、优秀,并结合group by计算。

考核知识点: join、group by、max()、min()、avg()、sum()、case when语句

答案:

15.按各科成绩进行排序,并显示排名, Score 重复时保留名次空缺

解题思路:

第一步:关键词有“各科成绩”,锁定使用表:成绩表。

第二步:用rank()排名。

考核知识点: rank() over(partition by)

答案:

15.1 按各科成绩进行行排序,并显示排名, Score 重复时合并名次

解题思路:

第一步:关键词有“各科成绩”,锁定使用表:成绩表。

第二步:用dense_rank()排名。

考核知识点: dense_rank() over(partition by)

答案:

16.查询学生的总成绩,并进行排名,总分重复时保留名次空缺

解题思路:

第一步:关键词有“总成绩”,锁定使用表:成绩表。

第二步:用group by统计学生的总成绩。

第三步:用left join自关联进行排名。

考核知识点: group by、 left join

答案:

16.1 查询学生的总成绩,并进行排名,总分重复时不保留名次空缺

解题思路:

第一步:关键词有“总成绩”,锁定使用表:成绩表。

第二步:用group by统计学生的总成绩。

第三步:用变量进行排名。

考核知识点: group by、变量

答案:

17. 统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[60-0] 及所占百分比

解题思路:

第一步:关键词有“各科成绩”、“课程名称”,锁定使用表:成绩表、课程表。

第二步:通过cid关联课程表和成绩表,得到课程、成绩信息宽表。

第三步:用group by聚合统计各分段的人数及百分比。

考核知识点: join、group by、case when条件语句

答案:

18.查询各科成绩前三名的记录

解题思路:

第一步:关键词有“各科成绩”,锁定使用表:成绩表。

第二步:筛选出各科比当前成绩高的人数小于3的学生记为各科的前三名。

考核知识点: 子查询

答案:

19.查询每门课程被选修的学生数

解题思路:

第一步:关键词有“每门课程”、“学生数”,锁定使用表:课程表、成绩表。

第二步:用left join关联课程表和成绩表,再用group by分组汇总各科的学生数。

考核知识点: left join、group by

答案:

20.查询出只选修两门课程的学生学号和姓名

解题思路:

第一步:关键词有“选修课程”、“学生姓名”,锁定使用表:学生表、成绩表。

第二步:用join关联学生表和成绩表,再用group by分组汇总每个学生的选修课程数,最后用having对分组汇总结果筛选出选修两门课程的学生。

考核知识点: join、group by、having

答案:

21. 查询男生、女生人数

解题思路:

第一步:关键词有“男生、女生”,锁定使用表:学生表。

第二步:通过ssex学生表用group by分组汇总男生、女生人数。

考核知识点: group by

答案:

22. 查询名字中含有“风”字的学生信息

解题思路:

第一步:关键词有“学生信息”,锁定使用表:学生表。

第二步:用like匹配姓名中含有风”字的学生。

考核知识点: like、%

答案:

23查询同名同性学生名单,并统计同名人数

解题思路:

第一步:关键词有“学生名单”,锁定使用表:学生表。

第二步:使用group by,汇总同名同性人数,再用having筛选出大于1的记录

考核知识点: group by、having

答案:

24.查询 1990 年出生的学生名单

解题思路:

第一步:关键词有“学生名单”,锁定使用表:学生表。

第二步:用where筛选出1990年出生的学生名单

考核知识点: where、year

答案:

25.查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编

号升序排列。

解题思路:

第一步:关键词有“平均成绩”,锁定使用表:成绩表。

第二步:用group by分组计算各科平均成绩,再用order by完成多列排序

考核知识点: group by、order by

答案:

26.查询平均成绩大于等于 85 的所有学生的学号、姓名和平均成绩

解题思路:

第一步:关键词有“平均成绩”、“学生姓名”,锁定使用表:成绩表、学生表。

第二步:用join关联学生表和成绩表

第三步:用group by分组汇总计算每个学生的平均成绩,再用having筛选平均成绩>=85的记录

考核知识点: join、group by、having

答案:

27.查询课程名称为“数学”,且分数低于 60 的学生姓名和分数

解题思路:

第一步:关键词有“课程名称”、“分数”、“学生姓名”,锁定使用表:课程表、成绩表、学生表。

第二步:用join关联学生表、成绩表、课程表,再用where筛选

考核知识点: 多重join、where

答案:

28. 查询所有学生的课程及分数情况(存在学生没成绩,没选课的情况)

解题思路:

第一步:关键词有“所有学生”、“分数”,锁定使用表:学生表、成绩表

第二步:用left join关联学生表、成绩表

考核知识点: left join

答案:

29.查询任何一门课程成绩在 70 分以上的姓名、课程名称和分数

解题思路:

第一步:关键词有“课程成绩”、“姓名”、“课程名称”,锁定使用表:学生表、成绩表、课程表

第二步:用join关联学生表、成绩表、课程表,再筛选出课程成绩在70分以上的。

考核知识点: 多重join

答案:

30.查询不及格的课程

解题思路:

第一步:关键词有“不及格的课程”,锁定使用表:成绩表、课程表

第二步:关联课程表和成绩表,再条件筛选出不及格的课程信息。

考核知识点: join、where、去重

答案:

31.查询课程编号为 01 且课程成绩在 80 分以上的学生的学号和姓名

解题思路:

第一步:关键词有“课程编号”、“课程成绩”、“姓名”,锁定使用表:成绩表、学生表

第二步:关联成绩表和学生表,再条件筛选出结果。

考核知识点: join、where

答案:

32.求每门课程的学生人数

解题思路:

第一步:关键词有“课程”、“学生人数”,锁定使用表:成绩表

第二步:用group by分组汇总各科的学生人数。

考核知识点: group by

答案:

33.成绩不重复,查询选修“张三”老师所授课程的学生中,成绩最高的学生信息及其成绩

解题思路:

第一步:关键词有“成绩”、““张三”老师”、“学生信息”,锁定使用表:成绩表、课程表、学生表、教师表

第二步:关联所有表,筛选出选修“张三”老师所授课程的学生。

第三步:因为成绩不重复,对学生成绩由高到低排序,筛选出第一行记录。

考核知识点: 多重join、order by、limit

答案:

34.成绩有重复的情况下,查询选修“张三”老师所授课程的学生中,成绩最高的学生

信息及其成绩

解题思路:

第一步:关键词有“成绩”、““张三”老师”、“学生信息”,锁定使用表:成绩表、课程表、学生表、教师表

第二步:关联所有表,筛选出选修“张三”老师所授课程的学生。

第三步:因为成绩有重复,先求出最高成绩,再匹配最高成绩对应的学生信息。

考核知识点: 多重join、max()

答案:

35.查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩

解题思路:

第一步:关键词有“成绩”,锁定使用表:成绩表

第二步:自联接,筛选出不同课程成绩相同的记录

考核知识点: 自联接join

答案:

36. 查询每门成绩最好的前两名

解题思路:

第一步:关键词有“成绩”,锁定使用表:成绩表

第二步:自联接,筛选出各科低于自身成绩的人数为2的。

考核知识点: left join

答案:

37. 统计每门课程的学生选修人数(超过 5 人的课程才统计)。

解题思路:

第一步:关键词有“选修人数”,锁定使用表:成绩表

第二步:先用group by分组汇总各科的选修人数,再条件筛选出超过5人的课程。

考核知识点: group by、having

答案:

38.检索至少选修两门课程的学生学号

解题思路:

第一步:关键词有“两门课程”,锁定使用表:成绩表

第二步:先用group by分组汇总每个学生的选修课程数,再用having筛选出至少2门课程的学生学号

考核知识点: group by、having

答案:

39.查询选修了全部课程的学生信息

解题思路:

第一步:关键词有“全部课程”、“学生信息”,锁定使用表:成绩表、课程表、学生表

第二步:关联学生表和成绩表,再用group by分组统计每个学生的选修课程数

第三步:最后用having筛选出等于全部课程数的学生信息。

考核知识点: join、 group by、having、子查询

答案:

40.查询各学生的年龄,只按年份来算

解题思路:

第一步:关键词有“学生的年龄”,锁定使用表:学生表

第二步:用year和now来统计

考核知识点: year、now

答案:

41. 按照出生日期来算,当前月日 < 出生年月的月日则,年龄减一

解题思路:

第一步:关键词有“出生日期”,锁定使用表:学生表

第二步:用timestampdiff()统计年龄

考核知识点: timestampdiff()

答案:

42.查询本周过生日的学生

解题思路:

第一步:关键词有“过生日”,锁定使用表:学生表

第二步:用week函数

考核知识点: week()

答案:

43. 查询下周过生日的学生

解题思路:

第一步:关键词有“过生日”,锁定使用表:学生表

第二步:用week函数

考核知识点: week()

答案:

44.查询本月过生日的学生

解题思路:

第一步:关键词有“过生日”,锁定使用表:学生表

第二步:用month函数

考核知识点: month()

答案:

45.查询下月过生日的学生

解题思路:

第一步:关键词有“过生日”,锁定使用表:学生表

第二步:用month函数

考核知识点: month()

答案:

4. 关于SQL综合应用题(学生选课系统)

3、写出SQL语句。
①查询所有选SQL课程的学生学号,姓名和专业
select 学生学号,姓名,专业 from 学生基本信息表 where 学号 in (select 学号 from 选课表 where 课程号 in (select 课程号 from 课程表 where 课程名='SQL课程'))

②删除所有选择数学的同学的选课记录
delete from 选课表 where 课程号 in (select 课程号 from 课程表 where 课程名='数学')

③查询有哪些课程没有被任何同学报选
select 课程名 from 课程表 where 课程号 not in (select 课程号 from 选课表)

5. SQL的应用题,求答案

貌似回答过一次
上面那个题目没有拍全吧,只针对下面那个题:
1.SC(学号,课程号,课程名,教师名,教师地址,成绩);
函数依赖集:课程号〈--〉课程名,课程号-〉教师名,教师名-〉教师地址,(学号,课程号)-〉成绩;
部分函数依赖:(课程号,课程名)-〉教师名,(学号,课程号,课程名)-〉成绩,等等很多……;
传递函数依赖:课程号-〉教师名,教师名-〉教师地址。
2.第一范式(1NF),存在插入、删除异常。
3.插入异常,增加未授课巧胡教师,无人教授的课程等会有异常;
删除异常,当好汪希望删除某位教师、某个地址、某个课程、某个学生时,相关的信息都会被不期望的删除掉,例如删除操作系统课程 s1、王平都会被删除掉。
4.可部分解决,2NF:
成绩(学号,课程号,成绩),
课程教师(课程号,课程名,教师名,教师地址)。
5.仍存在,可分解为3NF:
成绩(学号,课孝袜拦程号,成绩),
课程(课程名,教师名),
教师(教师名,教师地址),
课程教师(课程名,教师名)。

回答的不是很专业,希望有帮助。

6. SQL 触发器应用题 不胜感激~O(∩_∩)O谢谢

CREATE TRIGGER my_insupd
ON Student
FOR INSERT
AS
RAISERROR ('欢迎新同学', 16, 1)

7. 请求解题 要求用SQL语句完成下列题目

按图中问题和需求,以下会使用mysql环境的sql进行解答。

  • 第一题: 考察主键和外键的创建表语句,以及基本的创建语句格式。这里提供两种,其余可以查阅相关资料。

mysql 插入数据

8. SQL DB应用题

1、select 姓名,S.学号,课程号 from SC,S where 籍贯='福建' and S.学号=SC.学号

2、select 姓名,年龄 from S,C,SC where C.课程号=SC.课程号 and S.学号=SC.学号

3、alter table S
(
学号 int primary key,
年龄 int check(年龄>=12 and 年龄<=25),
性别 char(4) check(stugender='男' or stugender='女'),
)

4、select avg(成绩) from C,SC where C.课程号=SC.课程号 and 课程名='高等数学'

5、select 姓名,年龄,性别 from S where 姓名='李四' and 年龄>李四的年龄

6、create view STA
as
select SC.学号,C.课程名,C.教师姓名 from C,SC where SC.课程号=C.课程号