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吗?
4 回答

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

慕的地6264312
TA贡献1817条经验 获得超6个赞
其他人指出,INNER JOIN有助于人类的可读性,这是首要任务; 我同意。让我试着解释为什么连接语法更具可读性。
一个基本的SELECT查询是这样的:
SELECT stuff FROM tables WHERE conditions
SELECT子句告诉我们什么,我们正在找回; FROM子句告诉我们从哪里获取它,WHERE子句告诉我们我们得到了哪些。
JOIN是关于表的声明,它们如何绑定在一起(概念上,实际上,绑定到单个表中)。任何控制表的查询元素 - 我们从中获取东西 - 在语义上属于FROM子句(当然,这是JOIN元素所在的位置)。将join-elements放入WHERE子句会将which和where-from混合在一起; 这就是JOIN语法首选的原因。
添加回答
举报
0/150
提交
取消