ont-family: tahoma, arial, "Microsoft YaHei"; font-size: 14px;">table a(id, type):
id type
----------------------------------
1 1
2 1
3 2
table b(id, class):
id class
---------------------------------
1 1
2 2
sql语句1:select a.*, b.* from a left join b on a.id = b.id and a.type = 1;
sql语句2:select a.*, b.* from a left join b on a.id = b.id where a.type = 1;
sql语句3:select a.*, b.* from a left join b on a.id = b.id and b.class = 1;
sql语句1的执行结果为:
a.id a.type b.id b.class
----------------------------------------
1 1 1 1
2 1 2 2
3 2
sql语句2的执行结果为:
a.id a.type b.id b.class
----------------------------------------
1 1 1 1
2 1 2 2
sql语句3的执行结果为:
a.id a.type b.id b.class
----------------------------------------
1 1 1 1
2 1
3 2
由sql语句1可见,left join 中左表的全部记录将全部被查询显示,on 后面的条件对它不起作用,除非再后面再加上where来进行筛选,这就是sql语句2了;由sql语句3可见,on后面的条件中,右表的限制条件将会起作用。
**************************************************************************
sql语句4:select a.*, b.* from a inner join b on a.id = b.id and a.type = 1;
sql语句5:select a.*, b.* from a inner join b on a.id = b.id where a.type = 1;
sql语句6:select a.*, b.* from a, b where a.id = b.id and a.type = 1;
sql语句7:select a.*, b.* from a, b where a.type = 1 and a.id = b.id;
这四条语句的执行结果一样,如下:
a.id a.type b.id b.class
----------------------------------------
1 1 1 1
2 1 2 2
由此可见,inner join 中on后面的限制条件将全部起作用,这与where的执行结果是一样的。另外,where语句与inner join确实能得到相同的结果,只是效率不同(这个我没有测试过,不过我相信这个结论)。
但是sql语句6是否比sql语句7的效率要低一些,我没有足够的数据量来测试,不过我也相信是如此的。
解析sql语句中left_join、inner_join中的on与where的区别
2020-01-06 15:43MYSQL教程网 Mysql
以下是对在sql语句中left_join、inner_join中的on与where的区别进行了详细的分析介绍,需要的朋友可以参考下
延伸 · 阅读
- 2020-01-06在SQL中获取一个长字符串中某个字符串出现次数
- 2020-01-06深入理解SQL的四种连接-左外连接、右外连接、内
- 2020-01-06sql存储过程的使用和介绍
- 2020-01-06通过SQL绘制杨辉三角的实现方法介绍
- 2020-01-05MYSQL SET类型字段的SQL操作知识介绍
- 2020-01-05sql动态行转列的两种方法
- Mysql
mysql服务1067错误多种解决方案分享
今天我的mysql服务器突然出来了1067错误提示,无法正常启动了,我今天从网上找寻了大量的解决mysql服务1067错误的办法,有需要的朋友可以看看 ...
- Mysql
mysql -参数thread_cache_size优化方法 小结
以下是某门户网站的mysql状态实例及分析过程,绝对的第一手数据资料,很生动的体现了参数thread_cache_size优化的效果及优化该参数的必要性,希望对各位系...
- Mysql
MySQL内存使用的查看方式详解
MySQL中内存分为全局内存和线程内存两大部分(其实并不全部,只是影响比较大的 部分),下面这篇文章主要给大家介绍了关于MySQL内存使用的查看方式,...
- Mysql
详解MYSQL的备份还原(PHP实现)
本篇文章是对MYSQL的备份还原进行了详细的分析介绍,需要的朋友参考下 ...
- Mysql
mysql 表空间及索引的查看方法
mysql 表空间及索引的查看方法,需要的朋友可以参考下。 ...
- Mysql
PHP访问MySQL查询超时处理的方法
PHP连接MySQL主要是使用Mysql提供的 libmysqlclient 的客户端库,同时也延伸出来 mysql 和 mysqli 两套PHP的扩展,相对来说 mysqli 比 mysql 更好,更稳定。 ...
- Mysql
MySQL server has gone away 问题的解决方法
MySQL server has gone away 问题解决方法,需要的朋友可以参考下。 ...
- Mysql
Ubuntu中MySQL的参数文件my.cnf示例详析
这篇文章主要给大家介绍了关于Ubuntu中MySQL的参数文件my.cnf的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mysql具有一定的参考学习价...