下面给出的两个版本有什么不同??
Suppliers(sid:integer, sname:string, address:string)
Parts(pid:integer, pname:string, color:string)
Catalog(sid:integer, pid:integer, cost:real)
查找提供红色零件或绿色零件的供应商的SID:
版本1:
SELECT S.sid
FROM Suppliers S, Parts P, Catalog C
WHERE S.sid = C.sid AND P.pid = C.pid AND (P.color = 'red' OR P.color = 'green')
版本2:
SELECT C.sid
FROM Parts P, Catalog C
WHERE P.pid = C.pid AND (P.color = 'red' OR P.color = 'green')
2条答案
按热度按时间isr3a4wc1#
这取决于所选表中的数据。如果要选择
sid
从供应商表中可以使用第一个版本。或者,如果您想从目录表,您可以使用第二个版本。但是没有必要使用OR
子句。相反,你必须使用IN
条款。或仅当从两个不同的列中筛选替代条件时才应使用。xhv8bpkk2#
第二个查询效率更高,因为它不会带来
supplier
表(您不需要,因为您只需要供应商sid
,可以在parts
表)。但是我不认为它完全符合你的要求。如果供应商的目录中有多个红色或绿色零件,则该零件将在结果集中多次出现。我建议改为聚合。
请注意,此版本的查询使用标准的显式联接(使用
on
关键字)而不是隐式联接(在from
子句):几十年前的这种语法使编写、读取和维护查询变得更加困难,不应该在新代码中使用。