可能重复:
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
答案 0 :(得分:1)
您没有定义“更好”的内容。在大多数数据库中,两者将优化到相同的底层执行计划。
但是,出于各种可读原因,第一个版本更好:
(1)显然正在进行内部联接。
(2),
子句中的from
表示笛卡尔积/交叉连接。这是一项非常昂贵的操作。
(3)如果从第二个示例中的,
子句中删除from
,它仍然是有效的from
子句。 。 。查询可能会运行但不会返回已排除的结果。
(4)第二种语法不提供支持外连接的标准语法。
答案 1 :(得分:0)
两个查询都有相同的结果。
第一个是ANSI SQL-92
的{{1}}语法,而第二个是旧的INNER JOIN
语法。第二个查询生成笛卡尔积,但提供了相等的条件,这就是为什么它给出与查询1相同的结果。
答案 2 :(得分:-3)