环境: 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的论坛积分
问题补充:
我现在这里是想用嵌套查询,如果能有更加简单的方法,希望各位高手能贡献下。