处理多个表时如何正确编写SELECT语句

时间:2018-04-04 16:20:19

标签: sql select oracle12c

为了演示我的要求,我将提供两个表:Product表和PC表。产品表包含以下信息:

MAKER      MODEL TYPE
----- ---------- -------
A       1232     PC
A       1233     PC
A       1276     Printer
A       1298     Laptop
A       1401     Printer
A       1408     Printer
A       1752     Laptop
B       1121     PC
B       1750     Laptop
C       1321     Laptop
D       1288     Printer
D       1433     Printer
E       1260     PC
E       1434     Printer
E       2111     PC
E       2112     PC

PC表包含以下信息:

      CODE      MODEL      SPEED        RAM         HD CD              PRICE
---------- ---------- ---------- ---------- ---------- ---------- ----------
         1       1232        500         64          5 12x               600
         2       1121        750        128         14 40x               850
         3       1233        500         64          5 12x               600
         4       1121        600        128         14 40x               850
         5       1121        600        128          8 40x               850
         6       1233        750        128         20 50x               950
         7       1232        500         32         10 12x               400
         8       1232        450         64          8 24x               350
         9       1232        450         32         10 24x               350
        10       1260        500         32         10 12x               350
        11       1233        900        128         40 40x               980
        12       1233        800        128         20 50x               970

为了执行返回所有PC模型的查询,以下哪个查询会更好:

SELECT model FROM pc;

OR

SELECT model FROM product JOIN pc USING(model);

1 个答案:

答案 0 :(得分:1)

由于您只需要PC型号,因此您所说的第一个查询可以使用。

在第二个查询中,您首先获取产品表内容,然后将它们连接到PC表中,这比第一个查询慢,并且因为您不需要Product表中的任何列,所以没有必要。

如果不添加where子句并且PC模型为1276,则可以使用下面的查询作为替代,仅返回与PC相关的行。您的第二个查询将返回A - 1276 - Printer行。

SELECT DISTINCT model FROM product JOIN pc USING(model) where product.type='PC';