10-28 查询选修张老师讲授所有课程的学生(MSSQL)
分数 10
全屏浏览题目
切换布局
作者 张庆
单位 集美大学
本题目要求编写SQL语句,
查询选修了张老师所讲授的所有课程的学生。
提示:MSSQLServer 评测SQL语句。
表结构:
请在这里写定义表结构的SQL语句。例如:
-- 学生表
CREATE TABLE stu (
sno char(4) NOT NULL,
sname nvarchar(8) NOT NULL,
sex smallint DEFAULT NULL,
mno char(2) DEFAULT NULL,
birdate datetime DEFAULT NULL,
memo ntext,
PRIMARY KEY (sno)
);
-- 课程表
CREATE TABLE cou (
cno char(4) NOT NULL,
cname nvarchar(30) NOT NULL,
credit smallint DEFAULT NULL,
ptime char(5) DEFAULT NULL,
teacher nvarchar(10) DEFAULT NULL,
PRIMARY KEY ( cno )
);
-- 学生选课成绩表
CREATE TABLE sc (
sno char(4) NOT NULL, -- 学生学号
cno char(4) NOT NULL, -- 课程号
grade decimal(4,1) DEFAULT NULL,
PRIMARY KEY ( sno , cno ),
CONSTRAINT fk_sc_cno FOREIGN KEY ( cno ) REFERENCES cou ( cno ),
CONSTRAINT fk_sc_sno FOREIGN KEY ( sno ) REFERENCES stu ( sno )
)
表样例
请在这里给出上述表结构对应的表样例。例如
stu
表:
cou
表:
sc
表:
输出样例:
请在这里给出输出样例。例如:
首先看到这道题我是有点无从下手。。。。。
看了大佬的解题思路让我大彻大悟,我觉得我有必要记录此题
我将解题思路分为五个步骤:
一 、先找到选修了张老师的学生学号,当然这里查询出来的肯定存在没有选修的学生
二 、再给学号用group by分组统计一下,其目的就是统计学生选修了几门张老师的课程
三 、既然已经查出每个学生选修了几门张老师课程,那么我们现在需要查出张老师交了几门课程
四 、然后我们在将第二步跟第三步作比较,如果学生选修的数量跟张老师所教的 课程数量一致,那么这个人就是我们要找的
五 、最后就是可以直接去stu表中找到学号所对应的学生姓名
当然我知道,大家做题的时候很烦去重新创一个表与数据,在不知道运行结果和调试的情况下做对题跟理解答案就更困难了,所以我针对这道题做出了如下步骤结果详解
第一步与第二步的运行结果
第三步的结果
第四步的结果(having)
第五步的结果
这里简单说两句,要去掉count(cno)才能查找出对应的sno,具体原因我也不知道,总之不去掉的话是运行出错的
文章来源:https://www.toymoban.com/news/detail-430987.html
答案一
select sname
from stu
where sno in (
select sno -- ,count(cno) -- 这里用了count(cno)的解释为了更直观的看出group by后的结果
from sc
where cno in (
select cno
from cou
where teacher='张老师'
)
group by sno
-- 基本就是分组统计了选了多少张老师的课
having count(cno)= -- 用having去过滤筛选(如果不清楚having的用法可以去查查)
(select count(cno)
from cou
where teacher='张老师')
)
答案二
如果是mssql的话需要在条件查询张老师前面加一大写的 N文章来源地址https://www.toymoban.com/news/detail-430987.html
select sname
from stu
where sno in (
select sno -- ,count(cno) -- 这里用了count(cno)的解释为了更直观的看出group by后的结果
from sc
where cno in (
select cno
from cou
where teacher=N'张老师'
)
group by sno
-- 基本就是分组统计了选了多少张老师的课
having count(cno)= -- 用having去过滤筛选(如果不清楚having的用法可以去查查)
(select count(cno)
from cou
where teacher=N'张老师')
)
到了这里,关于10-28 查询选修张老师讲授所有课程的学生(对自己来说有难度的一道题)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!