为简单起见,假设所有相关字段都是 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 JOINWHERE 语法更面向关系模型。
两个表 JOIN ed 的结果是应用过滤器的表的笛卡尔积,该过滤器仅选择连接列匹配的那些行。
使用 WHERE 语法更容易看到这一点。
至于您的示例,在 MySQL 中(以及通常在 SQL 中),这两个查询是同义词。
另外,请注意 MySQL 也有一个 STRAIGHT_JOIN 子句。
使用这个子句,可以控制JOIN的顺序:外循环扫描哪个表,内循环扫描哪个表。
您无法使用 WHERE 语法在 MySQL 中控制它。

关于sql - INNER JOIN ON vs WHERE 子句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1018822/

10-16 02:07