MySQL-mysql中inner join 与使用 where 进行联表查询有什么区别?

MySQL-mysql中inner join 与使用 where 进行联表查询有什么区别?

泛泛之交 发布于 2017-09-11 字数 161 浏览 1185 回复 2

以下两天sql语句有什么差别:

select * from a inner join b on a.id = b.id
select * from a,b where a.id = b.id

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

灵芸 2017-11-13 2 楼

INNER JOIN和,(逗号)在无联合条件下是语义相同的:两者都可以对指定的表计算出笛卡儿乘积(也就是说,第一个表中的每一行被联合到第二个表中的每一行)。请参考mysql手册
http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#select
mysql 13.2.7.1. JOIN语法

想挽留 2017-10-28 1 楼

mysql 经过优化器优化后执行以上两条你给出的sql没有任何区别别。

select * from test,s where test.id = s.id; 经过mysql优化器优化后的sql如下:

select `test`.`test`.`id` AS `id`,`test`.`test`.`aid` AS `aid`,`test`.`test`.`date` AS `dat
e`,`test`.`test`.`count` AS `count`,`test`.`s`.`id` AS `id`,`test`.`s`.`cdate` AS `cdate` from `test
`.`test` join `test`.`s` where (`test`.`test`.`id` = `test`.`s`.`id`)

select * from test inner join s on test.id = s.id; 经过mysql优化器优化后的sql如下:

 select `test`.`test`.`id` AS `id`,`test`.`test`.`aid` AS `aid`,`test`.`test`.`date` AS `dat
e`,`test`.`test`.`count` AS `count`,`test`.`s`.`id` AS `id`,`test`.`s`.`cdate` AS `cdate` from `test
`.`test` join `test`.`s` where (`test`.`test`.`id` = `test`.`s`.`id`)

从这点可以看出没有任何区别,但是从写法上使用join 显然更接近优化后的sql;