这两个SQL语句有何不同?

时间:2011-03-30 03:30:39

标签: mysql sql

1:

$query = mysql_query("
SELECT table_one.row 
FROM table_one 
INNER JOIN table_two 
ON table_two.row = $id");

2:

$query = mysql_query("
SELECT table_one.row 
FROM table_one, table_two 
WHERE table_two.row = $id");

这些只是两种写同样的方式吗?

3 个答案:

答案 0 :(得分:2)

他们都取得了相同的结果,但采用了不同的方法。虽然你滥用ON条款。

我会建议这样的事情:

$query = mysql_query("
SELECT table_one.row 
FROM table_one 
INNER JOIN table_two 
ON table_one.id = table_two.id
WHERE table_two.row = $id");

从mysql网站引用:

  

与ON一起使用的conditional_expr是可以在WHERE子句中使用的表单的任何条件表达式。通常,您应该将ON子句用于指定如何连接表的条件,并使用WHERE子句来限制结果集中所需的行。

答案 1 :(得分:0)

是的,查询在语义上是相同的。

虽然两者都生产笛卡儿产品。

答案 2 :(得分:0)

第一个查询使用较新的ANSI-92语法,而第二个查询使用较旧的ANSI-89语法。两者都应该产生相同的结果。

此外,请阅读这篇文章:Why isn't SQL ANSI-92 standard better adopted over ANSI-89?

就个人而言,我希望大多数人都同意,我更喜欢使用“JOIN”语法的ANSI-92。正如在引用的帖子中提到的,它允许您将JOIN约束与WHERE或过滤器约束分开,从而提高可读性。