ERP_By_WeiDong 2010-03-24 13:52
浏览 298
已采纳

sql:寻找错误

环境: mysql 5.1.45

题目:

  已知关系模式: S (SNO,SNAME) 学生关系。SNO 为学号,SNAME 为姓名

  C (CNO,CNAME,CTEACHER) 课程关系。CNO 为课程号,CNAME 为课程名,CTEACHER 为任课教师

  SC(SNO,CNO,SCGRADE) 选课关系。SCGRADE 为成绩

问题:

  找出没有选修过“李明”老师讲授课程的所有学生姓名

 

 

create database school;

use school

create table s(
  sno int not null auto_increment,
  sname varchar(20) not null,
  primary key(sno)
);

create table c(
  cno int not null auto_increment,
  cname varchar(20) not null,
  cteacher varchar(20) not null,
  primary key(cno)
);

create table sc(
  sno int not null,
  cno int not null,
  scgrade int not null,
  primary key(sno, cno)
);

alter table sc add constraint fk_s
foreign key(sno) references s(sno);

alter table sc add constraint fk_c
foreign key(cno) references c(cno);

 再向三张表中插入相应的数据,如下:

 

insert into s(sname) values('魏东');
insert into s(sname) values('陈标');
insert into s(sname) values('张健');
insert into s(sname) values('丁翔');
insert into s(sname) values('徐章健');
insert into s(sname) values('陈燕翔');
insert into s(sname) values('单洪奇');

insert into c(cname, cteacher) values('大学英语', '邱俊敏');
insert into c(cname, cteacher) values('高等数学', '孙天川');
insert into c(cname, cteacher) values('线性代数', '孙敏');
insert into c(cname, cteacher) values('SQL基础', '肖浩');
insert into c(cname, cteacher) values('算法设计', '李明');

insert into sc(sno, cno, scgrade) values(1, 1, 100);
insert into sc(sno, cno, scgrade) values(1, 5, 98);
insert into sc(sno, cno, scgrade) values(2, 2, 60);
insert into sc(sno, cno, scgrade) values(3, 3, 48);
insert into sc(sno, cno, scgrade) values(3, 5, 68);
insert into sc(sno, cno, scgrade) values(4, 1, 100);
insert into sc(sno, cno, scgrade) values(4, 4, 50);
insert into sc(sno, cno, scgrade) values(5, 3, 89);
insert into sc(sno, cno, scgrade) values(5, 5, 68);
insert into sc(sno, cno, scgrade) values(6, 5, 100);
insert into sc(sno, cno, scgrade) values(7, 5, 80);

 

再做题目,进行查询:

 

 

select sname
from s
where sno in(
  select sno 
  from sc
  where cno not in(
    select cno
    from c
    where cteacher = '李明'
  )
);

查询结果是这样的:

  +--------+
| sname  |
+--------+
| 魏东   |
| 陈标   |
| 张健   |
| 丁翔   |
| 徐章健 |
+--------+

我这样做,为什么还是不能筛选出来人啊?

而且其中学生:魏东、张健、徐章健都是选了李明老师的课程了的啊?

 

哪位能告诉我这个是为什么?

正确的做法是怎么样的啊?

 

还有,对不起了,我现在还没有javaeye的论坛积分

 

问题补充:

  我现在这里是想用嵌套查询,如果能有更加简单的方法,希望各位高手能贡献下。

  • 写回答

3条回答 默认 最新

  • WdWheyr 2010-03-24 15:32
    关注

    [code="java"]谢谢,你的这个是对的,结果是我想要的,不过跟我讲解下以后做这种嵌套查询的时候要注意什么问题么?还有思路应该怎么整理出来? [/code]
    首先你要把表关系搞明白。
    其次要真正的明白你想要的结果
    不过在工作中用级联查询确实不太多

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 找辅导 初学者 想实现一个项目 没有方向
  • ¥15 关于渗漏场的电场分布模拟
  • ¥24 matlab怎么修改仿真初始时间
  • ¥15 两分段线性回归模型分析阈值效应
  • ¥15 前端和后端代码都没报错,但是点登录没反应的?
  • ¥100 需要远程解决QSQLITE问题!
  • ¥15 利用光场表达式画出初始光场强度分布图像等几个问题在这两个图片里
  • ¥15 gozero求手把手教学,400一天
  • ¥15 泥浆冲清水的泥浆分布
  • ¥15 LASSO回归分析筛选关键基因,适合多大样本量?