考虑我们有两个表,Users和Posts.user_id是Posts表中的外键,是表中的主键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,只是左表始终在右表之前读取.这可以用于连接优化器以错误顺序放置表的那些(少数)情况.
但是,依靠这种差异并不明智.
| 归档时间: |
|
| 查看次数: |
2593 次 |
| 最近记录: |