内连接查询与内连接.on和where子句查询之间的区别?

时间:2014-10-12 16:57:02

标签: mysql join

假设我有两个表学生,模式为

的记录
  

学生(身份证,姓名)
  记录(摆脱,sid,主题,标记)

我要打印(姓名,主题,标记)。

所以我可以用两种方式编写内连接

> select a.name,b.subject,b.marks from students a, records b where a.id = b.sid;
or
> select a.name,b.subject,b.marks from students a inner join records b on a.id = b.sid;

显然,他们都返回相同的结果并花费相同的时间。所以我不确定他们内部是否相同,或者是否存在其中任何一种优于另一种的情况?

2 个答案:

答案 0 :(得分:1)

它们是相同的并且以相同的方式执行。做一个

EXPLAIN EXTENDED SELECT ...

查询并启用警告。然后mySQL会在优化器拥有它之后给你一个包含查询的警告。两个查询都应该有相同的警告。

答案 1 :(得分:1)

两者都错了。我认为这是一个错误,第一个where应该是from

> select a.name,b.subject,b.marks from students a, records b where a.id = b.sid;
or
> select a.name,b.subject,b.marks from students a inner join records b on a.id = b.sid;

如果我们忽略这个错误并检查上面的查询 - 这两个语句在功能上是等价的,但是隐式连接(第一种形式)已经被弃用了很长时间。因此,建议使用显式连接(第二种形式)。它们的另一个好处是增加了代码的可读性 - 连接条件与join整齐排列,where子句可以自由处理查询的逻辑。