oracle试题

来源:百度知道 编辑:UC知道 时间:2024/05/25 18:30:25
编程
参见如下表结构
出版社:
出版社代码 char(2),
出版社名称 varchar2(32)
图书:
图书编号 char(8),
图书名称 varchar2(128),
出版社代码 char(2),
作者代号 char(4),
图书简介 varchar2(128)
作者:
作者代号 char(4),
作者名称 varchar2(10),
性别 char(1),
年龄 number(3),
文学方向 varchar2(64)
获奖名单: 获奖日期 date,
获奖人员 char(4)
编写SQL语句,找出“作者”库中没有出现在“获奖名单”库中所有作者的所有出书的信息和相关出版社的SQL语句(提示:使用not in、not exists以及外关联三种方法,并说明哪种方法最优。

select
图书.图书编号,
图书.图书名称,
出版社.出版社名称,
作者.作者名称,
图书.图书简介
from
图书,出版社,作者
where
图书.出版社代码=出版社.出版社代码
and 图书.作者代号=出版社.作者代号
and 图书.作者代号
exists
( select 作者代号 from 作者 where 作者名称
not exists
(select 获奖人员 from 获奖名单)
)

select 出版社代码,出版社名称,图书编号,图书名称,作者代号,图书简介
from 出版社 c,图书 b,作者 e
where c.出版社代码=b.出版社代码 and b.作者代号<>e.作者代号;

select 出版社代码,出版社名称,图书编号,图书名称,作者代号,图书简介
from 出版社 c,图书 b
where c.出版社代码=b.出版社代码 and b.作者代号 not in (select 作者代号 from 作者);

select 出版社代码,出版社名称,图书编号,图书名称,作者代号,图书简介
from 出版社 c,图书 b
where c.出版社代码=b.出版社代码 and not exists(select 'x' from 作者 c
where b.作者代号=c.作者代号);

用not exists最快,第一种有两个连接 慢
第二种第三种有一个连接快,而not in要全都比较一下慢,