一尘不染

INNER JOIN ON与WHERE子句

mysql

为简单起见,假设所有相关字段均为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是否相同?


阅读 352

收藏
2020-05-17

共1个答案

一尘不染

INNER JOIN 是您应该使用的ANSI语法。

通常认为它更具可读性,尤其是当您连接许多表时。

OUTER JOIN只要有需要,也可以轻松地将其替换为。

WHERE语法更关系模型为主。

两个表JOINed的结果是表的笛卡尔积,将对其应用过滤器,该过滤器仅选择连接列匹配的那些行。

使用WHERE语法更容易看到这一点。

以您的示例为例,在MySQL(通常在SQL中)中,这两个查询是同义词。

另请注意,MySQL也有一个STRAIGHT_JOIN子句。

使用此子句,您可以控制JOIN顺序:在外部循环中扫描哪个表,在内部循环中扫描哪个表。

您无法使用WHERE语法在MySQL中控制此功能。

2020-05-17