SQL - 何时使用连接?

时间:2013-01-17 13:53:29

标签: sql

  

可能重复:
  SQL JOIN: is there a difference between USING, ON or 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

3 个答案:

答案 0 :(得分:1)

您没有定义“更好”的内容。在大多数数据库中,两者将优化到相同的底层执行计划。

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

(1)显然正在进行内部联接。

(2),子句中的from表示笛卡尔积/交叉连接。这是一项非常昂贵的操作。

(3)如果从第二个示例中的,子句中删除from,它仍然是有效的from子句。 。 。查询可能会运行但不会返回已排除的结果。

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

答案 1 :(得分:0)

两个查询都有相同的结果。

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

答案 2 :(得分:-3)

与笛卡儿产品相比,内部连接速度更快。第一个查询更好。