INNER JOIN ON vs WHERE子句

INNER JOIN ON vs WHERE子句

为简单起见,假设所有相关字段都是NOT NULL

你可以做:

SELECT
    table1.this, table2.that, table2.somethingelseFROM
    table1, table2WHERE
    table1.foreignkey = table2.primarykey    AND (some other conditions)

要不然:

SELECT
    table1.this, table2.that, table2.somethingelseFROM
    table1 INNER JOIN table2    ON table1.foreignkey = table2.primarykeyWHERE
    (some other conditions)

这两个是以同样的方式工作MySQL吗?


斯蒂芬大帝
浏览 1809回答 4
4回答

哔哔one

INNER JOIN 是您应该使用的ANSI语法。它通常被认为更具可读性,尤其是当您加入大量表时。OUTER JOIN只要有需要,它也可以很容易地替换。该WHERE语法更关系模型为主。两个表格的结果JOIN是应用过滤器的表的笛卡尔积,其仅选择具有匹配的连接列的那些行。使用WHERE语法更容易看到这一点。至于你的例子,在MySQL(以及一般的SQL)中,这两个查询是同义词。另请注意,MySQL也有一个STRAIGHT_JOIN子句。使用此子句,您可以控制JOIN顺序:在外循环中扫描哪个表以及在内循环中扫描哪个表。你无法使用WHERE语法在MySQL中控制它。

慕的地6264312

其他人指出,INNER JOIN有助于人类的可读性,这是首要任务; 我同意。让我试着解释为什么连接语法更具可读性。一个基本的SELECT查询是这样的:SELECT stuff FROM tables WHERE conditionsSELECT子句告诉我们什么,我们正在找回; FROM子句告诉我们从哪里获取它,WHERE子句告诉我们我们得到了哪些。JOIN是关于表的声明,它们如何绑定在一起(概念上,实际上,绑定到单个表中)。任何控制表的查询元素 - 我们从中获取东西 - 在语义上属于FROM子句(当然,这是JOIN元素所在的位置)。将join-elements放入WHERE子句会将which和where-from混合在一起; 这就是JOIN语法首选的原因。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL