ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 《sql cookbook》一书附录B回答关于否定的问题 问题1另一种解答

《sql cookbook》一书附录B回答关于否定的问题 问题1另一种解答

原创 Linux操作系统 作者:heloonghan 时间:2012-08-09 16:47:01 0 删除 编辑

《sql cookbook》一书附录B回答关于否定的问题

问题1  找到没有选择CS112课程的学生

本书解答1:

select s.*
  from student s
  left join take t
       on (s.sno = t.sno)
 group by s.sno,s.sname,s.age
having max(case when t.cno = 'CS112'
                then 1 else 0 end) = 0

本书解答2:

select *
  from student
 where sno not in (select sno
                     from take
                    where cno = 'CS112')

对于上面两种解答详见《sql cookbook》一书

我的解答:

select s.*
  from student s
  left join take t
       on (s.sno = t.sno and t.cno = 'CS112')
 where t.sno is null

参考资料: 《sql hacks》hack 10. convert subqueries to joins   将子查询转换为JOIN

附《sql cookbook》一书附录B 建表语句及数据

create table student
(sno int,
 sname varchar(10),
 age int
);

create table courses
(cno varchar(5),
 title varchar(10),
 credits int
);

create table professor
(lname varchar(10),
 dept varchar(10),
 salary int,
 age int
);

create table take
(sno int,
 cno varchar(5)
);

create table teach
(lname varchar(10),
 cno varchar(5)
);

insert into student values (1,'AARON',20);
insert into student values (2,'CHUCK',21);
insert into student values (3,'DOUG',20);
insert into student values (4,'MAGGIE',19);
insert into student values (5,'STEVE',22);
insert into student values (6,'JING',18);
insert into student values (7,'BRIAN',21);
insert into student values (8,'KAY',20);
insert into student values (9,'GILLIAN',20);
insert into student values (10,'CHAD',21);

insert into courses values ('CS112','PHYSICS',4);
insert into courses values ('CS113','CALCULUS',4);
insert into courses values ('CS114','HISTORY',4);

insert into professor values ('CH0I','SCIENCE',400,45);
insert into professor values ('GUNN','HISTORY',300,60);
insert into professor values ('MAYER','MATH',400,55);
insert into professor values ('POMEL','SCIENCE',500,65);
insert into professor values ('FEUER','MATH',400,40);

insert into take values (1,'CS112');
insert into take values (1,'CS113');
insert into take values (1,'CS114');
insert into take values (2,'CS112');
insert into take values (3,'CS112');
insert into take values (3,'CS114');
insert into take values (4,'CS112');
insert into take values (4,'CS113');
insert into take values (5,'CS113');
insert into take values (6,'CS113');
insert into take values (6,'CS114');

insert into teach values ('CHOI','CS112');
insert into teach values ('CHOI','CS113');
insert into teach values ('CHOI','CS114');
insert into teach values ('POMEL','CS113');
insert into teach values ('MAYER','CS112');
insert into teach values ('MAYER','CS114');

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/27480945/viewspace-740539/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2012-08-09

  • 博文量
    6
  • 访问量
    37513