这两种联合表方法之间的区别?

Mr *_*der 16 mysql sql join

考虑我们有两个表,UsersPosts.user_idPosts表中的外键,是表中的主键Users.

这两个sql查询之间有什么区别?

select user.name, post.title 
  from users as user, posts as post 
 where post.user_id = user.user_id;
Run Code Online (Sandbox Code Playgroud)

select user.name, post.title 
  from users as user join posts as post using user_id;
Run Code Online (Sandbox Code Playgroud)

Ric*_*iwi 15

除了语法之外,对于小片段,它们的工作方式完全相同.但是如果可能的话,总是使用ANSI-JOIN编写新的查询.

至于语义上,逗号表示法用于在两个表之间生成CARTESIAN产品,这意味着从表A生成包含表B中所有记录的所有记录的矩阵,因此具有4和6个记录的两个表分别产生24个记录.然后,使用WHERE子句,您可以从此笛卡尔积中选择实际需要的行.然而,MySQL并没有真正贯彻并制造这个巨大的矩阵,但从语义上讲,这就是它的含义.

JOIN语法是ANSI标准,它更清楚地定义了表的交互方式.通过将ON子句放在旁边JOIN,它清楚地表明了将两个表链接在一起的内容.

从功能上讲,它们将对您的两个查询执行相同的操作.当您开始使用其他[OUTER]JOIN类型时,会出现差异.

对MySQL而言,逗号表示确实有一个区别

STRAIGHT_JOIN类似于JOIN,只是左表始终在右表之前读取.这可以用于连接优化器以错误顺序放置表的那些(少数)情况.

但是,依靠这种差异并不明智.