Mysql中多表查询内连接使用join+on和where+“=“的区别

文章讨论了在Mysql中进行多表查询时,使用INNERJOIN与WHERE子句的区别。INNERJOIN通常提供更高的执行效率,因为它基于哈希表进行连接,而WHERE+等号操作可能导致笛卡尔积并降低效率。尽管两者在某些情况下结果相同,但推荐使用JOIN来表示连接关系,将连接条件放在ON子句中,而将其他过滤条件保留在WHERE子句中,以提高SQL语句的可读性。
摘要由CSDN通过智能技术生成

对于Mysql中的多表查询内连接的方式之前一直有疑问,举这么一个经典的例子:Student、Course、SC(学生表、课程表、选课表)三张表,我们想查看学生选了什么课程,肯定需要进行是三表联查。

此时我要查看小明选了什么课,这时有两种查询方式:

用where的方式:

1、select student.name,course.name from sudent s,course c,sc where s.sid = sc.sid and c.cid = sc.cid and s.name = '小明';

用inner join的方式

2.1、select student.name,course.name from sudent s inner join course c inner join sc on (s.sid = sc.sid and c.cid = sc.cid and s.name = '小明');

2.2、select student.name,course.name from sudent s inner join course c inner join sc on (s.sid = sc.sid and c.cid = sc.cid) where s.name = '小明';

这三条SQL语句查询出来的结果是一样的,那么他们之间有什么区别呢?

首先对于1和2 两种方式:

inner join 接 on 和使用where 接 “=” 的结果是一样的,但对于执行效率来看是不一样的,join这种内连接的方式执行效率是高于直接用where+“=”的方式, 因为join是基于hashtable进行连接比较,而后者直接就是取笛卡尔集再过滤,所以后者效率低,是O(N^2),前者是O(LogN)。所以还是提倡直接使用join,因为join本身是内连接,还有外连接中的左连接,右连接,全外连接等,统一方式,然后根据不同情况选择适合的使用。

对于2.1和2.2两种写法:

一般来说,我们更提倡使用第二2.2的写法,这样可以使得sql语句的结构清晰,连接涉及到的相关条件我们就放在on()里面,而对于其他的附加过滤条件还是跟在where后面使用比较合适。

总结:

综上所述:对于多表的查询,建议使用join+on的连接方式,同时为了sql语句的清晰,将连接条件放在on()里,其他过滤条件还是放在where后。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值