1

可能重复:
SQL JOIN:USING、ON 或 WHERE 之间有区别吗?

哪个查询更好?

1.

  SELECT awardCateg.ID,
    awardCateg.DESCRIPTION,
    awardCateg.FREQUENCY_ID,
    freq.ID,
    freq.DESCRIPTION
   FROM AWARD_CATEGORY awardCateg
   INNER JOIN FREQUENCY freq ON awardCateg.FREQUENCY_ID=freq.ID

2.

  SELECT awardCateg.ID,
    awardCateg.DESCRIPTION,
    awardCateg.FREQUENCY_ID,
    freq.ID,
    freq.DESCRIPTION
   FROM AWARD_CATEGORY awardCateg,
        FREQUENCY freq
   WHERE awardCateg.FREQUENCY_ID=freq.ID

AWARD_CATEGORY:
ID  FREQUENCY_ID    DESCRIPTION
6   1   Spark of the month
7   2   Best Mentor of the quarter
9   3   Best Associate 
10  3   Leadership Award

FREQUENCY:
ID  DESCRIPTION
1   Monthly
2   Quarterly
3   Annual

Expected result:
ID  DESCRIPTION     FREQUENCY_ID    ID  DESCRIPTION
6   Oscar of the month            1 1   Monthly
7   Catalyst of the quarter 2   2   Quarterly
9   Best of the Best              3 3   Annual
10  Leadership Award              3 3   Annual
4

3 回答 3

1

你没有定义什么是“更好”。在大多数数据库中,两者都会优化到相同的底层执行计划。

但是,出于各种可读性原因,第一个版本更好:

(1) 很明显,内部连接正在发生。

(2) ,in afrom子句暗示笛卡尔积/交叉连接。这是一个非常昂贵的操作。

(3) 如果你在第二个例子中,from子句中删除了,它仍然是一个有效的from子句。. . 查询可能会运行但不会返回预期结果。

(4) 第二种语法不提供支持外连接的标准语法。

于 2013-01-17T15:15:09.733 回答
0

这两个查询具有相同的结果。

第一个是ANSI SQL-92语法,INNER JOIN而第二个是旧的。第二个查询产生笛卡尔积,但提供了一个相等的条件,这就是为什么它给出与查询 1 相同的结果。

于 2013-01-17T13:56:34.270 回答
-3

与笛卡尔积相比,内连接会更快。第一个查询更好。

于 2013-01-17T13:59:08.017 回答