以下查询都从posts
表和users
表中选择数据。第一个查询使用一个联接,第二个查询没有.我的问题是你为什么要用连接?
使用联接查询:
SELECT u.*, p.* FROM users AS u
JOIN posts AS p ON p.user_id=u.user_id
WHERE u.user_id=1
查询时没有:
SELECT u.*, p.* FROM users AS u, posts AS p
WHERE p.user_id=u.user_id
AND u.user_id=1
发布于 2016-01-17 17:59:17
第二个查询是使用一个联接。这就是逗号在users AS u, posts AS p
中的含义。这是一个隐式连接(因为您没有显式地使用JOIN
关键字,但得到了它的效果),也称为CROSS JOIN
,意思是“左表的每一行,与右表中的每一行连接”。
JOIN ... ON
语法的使用(在我看来)更加明确和可读性更强,这在很大程度上是因为将连接条件从WHERE
子句移动到直接附加到JOIN
,并且为其他具有不同语义的连接类型(LEFT JOIN
、默认和INNER JOIN
)打开了语法。
发布于 2016-01-17 18:00:49
这纯粹是一种风格的选择。服务器将对这两个语句进行相同的解释。。
在,
子句中使用逗号( FROM
)时,这是在隐式地使用CROSS JOIN
。
如果WHERE clause
中有很多条件,那么可以更清楚地区分用于连接表(tableA.ID = tableB.tableA_id
)的条件和用于筛选的条件。您可以通过在显式JOIN
旁边放置连接条件来实现这一点。
https://stackoverflow.com/questions/34841580
复制相似问题