mysql 外连接的时候,条件在on后面和条件在where后面的区别
2024-08-25 20:58:24
最近使用mysql的时候碰到一个问题:当一个表外联另一个表的时候,将一些查询条件放在on后面和放在where后面不太一样:
学生分数表stuscore:
当查询语句如下(查询语句1):
SELECT a.name,a.subject,a.score,a.stuid ,b.name,b.subject,b.score,b.stuid
FROM stuscore a
LEFT JOIN stuscore b ON a.subject=b.subject WHERE a.score >100
查询结果如下:查询结果为空;
当查询语句如下时(查询语句2):
SELECT a.name,a.subject,a.score,a.stuid ,b.name,b.subject,b.score,b.stuid
FROM stuscore a
LEFT JOIN stuscore b ON a.subject=b.subject AND a.score >100
查询的结果如下:
:
我发现查询结果不为空,但是后面的字段都为空。
总结原因:当条件放在on后面的时候(如查询语句2),后面的条件作为连接条件,如果不满足,则显示左的一条数据,由标的查询字段都用null填充;
当条件放在where后面的时候(如查询语句1),后面的条件作为查询条件,是在连表以后,再过滤的条件,只要不满足就过滤掉,所以查询出来的结果为空。
所以一定要知道外连接的查询原理。
最新文章
- Sphinx的介绍和原理探索
- 列表 list
- 八大常见内排序java实现
- ORA-01009: 必需的参数缺失
- 页面加载后的input change事件 1或2个框 ajax
- 特殊的反转单链表算法(C++)
- String类扩展
- Eclipse + PyDev 无法导入模块
- Tensorflow之MNIST解析
- mysql 5.7.13 安装配置方法图文教程(linux) (转)
- Dictionary导致CPU暴涨
- b2b
- Slave SQL_THREAD如何重放Relay log
- 在Centos下用alternative命令切换各个版本的jdk的方法
- 2017.1.9版给信息源新增:max_len、max_db字段
- js 实现数组深度copy
- C++ 判断进程是否存在
- [您有新的未分配科技点] 无旋treap:从单点到区间(例题 BZOJ1500&;NOI2005 维护数列 )
- 20145313张雪纯 《Java程序设计》第1周学习总结
- Mysql与Sql server,Sum函数跟Count函数