24小时热门版块排行榜    

Znn3bq.jpeg
北京石油化工学院2026年研究生招生接收调剂公告
查看: 1179  |  回复: 4
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

huycwork

金虫 (著名写手)

[交流] 求讨论,SQL对子表的检索方法 已有2人参与

老师布置下了作业,要学SQL语句,呃,里面有一些奇怪的要求,诸如:

  • 查询选修了C1课程但是没有选修C2课程的学生学号,姓名。
  • 查询选修了所有课程的学生的学号,姓名。
  • 查询至少选修了学号为S2的同学所选全部课程的学生学号和姓名。

给出的数据表有三个,第一个是学生表,姑且以S表示:
CODE:
create table S(
        sno char(4) primary key,
        sname varchar(16)
);

第二个是课程表,姑且以C表示:
CODE:
create table C(
        cno char(4) primary key,
        cname varchar(16)
);

第三个是成绩表,姑且以SC表示:
CODE:
create table SC(
        sno char(4) not null,
        cno char(4) not null,
        grade numeric(4, 1) default 0,
        primary key(sno, lno),
        foreign key(sno) references S(sno),
        foreign key(cno) references C(cno)
);

像第一个查询,选了C1而没有选C2,这都还好一些,建立两个子查询就可以了:
CODE:
select S.sno as 学号, S.sname as 姓名 from S
where S.sno in
(select SC1.sno from
(select SC.sno from SC where SC.cno = 'C1') as SC1,
(select SC.sno from SC where SC.cno <> 'C2') as SC2
where SC1.sno = SC2.sno);

第二个就有点难受了,要给出所有的课程号,但是想了很久也没想出来怎么拿两个表比较出一个学号出来,只好求助count:
CODE:
select S.sno as 学号, S.sname as 姓名
from S where S.sno in(
select SC.sno from SC group by SC.sno
having count(SC.cno) = (select COUNT(*) from C));

第三个问题的性质也差不多,要首先给出一个表,然后,又没想出来怎么比较两个表,没办法,只好计数:
CODE:
select S.sno as 学号, S.sname as 姓名 from
S, (select SC.sno from SC
where SC.sno = 'S2') as SC2 left join SC
on SC.sno=SC2.sno
where S.sno = SC.sno
group by S.sno,S.sname
having COUNT(SC.cno) =
(select COUNT(SC.cno) from SC where SC.sno = 'S2');

我实在不想再玩这种复杂到头疼的代码了,求教育!求讨论!

对于这种需要对比两个或以上数据表以得出数据的select,有什么简单而有效的方法可以实际完成这样的工作?上面给出的代码并没有平行地比较两个表得出学号,有点旁门左道的感觉呃~

附上数据库的二进制样本,SQL Server 生成,用于还原数据库的。[ Last edited by huycwork on 2011-6-9 at 22:37 ]
回复此楼
漩涡的中心有一块空地,空空的。
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)


dubo(金币+1): 欢迎常来程序语言版讨论 2011-06-19 19:42:50
引用回帖:
Originally posted by xiangling1 at 2011-06-15 19:25:01:
搞金融怎么干上程序了

金融的核心目的是拿钱去赚钱,先决条件是有钱。
漩涡的中心有一块空地,空空的。
3楼2011-06-15 19:51:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 5 个回答

xiangling1

金虫 (正式写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
jjdg(金币+1): 感谢参与 2011-06-16 01:48:24
搞金融怎么干上程序了
黄沙百战穿金甲,不破楼兰终不还!
2楼2011-06-15 19:25:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
dubo(金币+1): 欢迎常来程序语言版讨论 2011-06-19 19:42:58
看来这里的人都不研究SQL啊,我也一窍不通~
4楼2011-06-16 11:00:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)


dubo(金币+1): 欢迎常来程序语言版讨论 2011-06-19 19:43:17
引用回帖:
Originally posted by sudo at 2011-06-16 11:00:47:
看来这里的人都不研究SQL啊,我也一窍不通~

唉~这个版块就不晓得怎么开的~浪费学习热情
漩涡的中心有一块空地,空空的。
5楼2011-06-16 11:19:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 求调剂 +27 111623 2026-04-04 31/1550 2026-04-08 08:36 by 蓝云思雨
[考研] 287求调剂 +4 Fnhc 2026-04-07 4/200 2026-04-08 08:34 by 蓝云思雨
[考研] 323求调剂 +3 林zlu 2026-04-07 4/200 2026-04-07 23:21 by lbsjt
[考研] 一志愿211,化学学硕,310分,本科重点双非,求调剂 +19 努力奋斗112 2026-04-07 20/1000 2026-04-07 23:12 by JourneyLucky
[考研] 材料专硕调剂 +9 哈哈哈吼吼吼哈 2026-04-07 10/500 2026-04-07 22:48 by 来看流星雨10
[考研] 机械调剂 +3 zzzbcb 2026-04-07 3/150 2026-04-07 22:19 by hemengdong
[考研] 307分材料专业求调剂 +9 Hll胡 2026-04-05 9/450 2026-04-07 16:41 by daiee
[考研] 一志愿上海海洋大学083200食品学硕,求调剂,接受其他专业 +9 what张 2026-04-01 11/550 2026-04-07 09:45 by momo皓
[考研] 生物与医药086000调剂一志愿西北农林320分 +3 美美女士 2026-04-03 3/150 2026-04-05 21:55 by 学员8dgXkO
[考研] 工科08-机械专硕-求调剂 +3 雷欧飞踢 2026-04-02 3/150 2026-04-05 18:49 by 蓝云思雨
[考研] 328分调剂 +6 门men 2026-04-04 6/300 2026-04-05 13:40 by imissbao
[考研] 358求调剂 +7 秋gk 2026-04-04 7/350 2026-04-05 13:29 by huangmoli
[考研] 一志愿华北电力大学(北京),材料科学与工程学硕265,求调剂 +11 yelck 2026-04-03 12/600 2026-04-04 19:52 by dongzh2009
[考研] 材料383求调剂 +5 郭阳阳阳成 2026-04-04 5/250 2026-04-04 19:06 by dongzh2009
[考研] 一志愿沪985,326分求调剂 +3 刘墨墨 2026-04-03 3/150 2026-04-04 11:16 by 悲伤的芋头
[考研] 一志愿双非085502,267分,过四级求调剂 +3 再忙也要吃饭啊 2026-04-03 3/150 2026-04-04 05:03 by gswylq
[考研] 一志愿华中农业071010,总分320求调剂 +7 困困困困坤坤 2026-04-02 7/350 2026-04-03 17:26 by Yuena_Wang
[考研] 复试调剂 +3 bvzz 2026-04-01 3/150 2026-04-03 09:47 by 蓝云思雨
[考研] 08生物与医药专硕初试346找调剂 +6 dianeeee 2026-04-01 7/350 2026-04-02 08:23 by guoweigw
[考研] 265求调剂 +11 yelck 2026-04-01 12/600 2026-04-01 19:12 by 549790059
信息提示
请填处理意见