为简单起见,假设所有相关字段都是 NOT NULL
。
你可以做:
SELECT
table1.this, table2.that, table2.somethingelse
FROM
table1, table2
WHERE
table1.foreignkey = table2.primarykey
AND (some other conditions)
要不然:
SELECT
table1.this, table2.that, table2.somethingelse
FROM
table1 INNER JOIN table2
ON table1.foreignkey = table2.primarykey
WHERE
(some other conditions)
这两个在
MySQL
中是否以相同的方式工作? 最佳答案
INNER JOIN
是您应该使用的 ANSI 语法。
它通常被认为更具可读性,尤其是当您加入大量表时。
只要有需要,它也可以很容易地替换为 OUTER JOIN
。WHERE
语法更面向关系模型。
两个表 JOIN
ed 的结果是应用过滤器的表的笛卡尔积,该过滤器仅选择连接列匹配的那些行。
使用 WHERE
语法更容易看到这一点。
至于您的示例,在 MySQL 中(以及通常在 SQL 中),这两个查询是同义词。
另外,请注意 MySQL 也有一个 STRAIGHT_JOIN
子句。
使用这个子句,可以控制JOIN
的顺序:外循环扫描哪个表,内循环扫描哪个表。
您无法使用 WHERE
语法在 MySQL 中控制它。
关于sql - INNER JOIN ON vs WHERE 子句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1018822/