最近使用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),后面的条件作为查询条件,是在连表以后,再过滤的条件,只要不满足就过滤掉,所以查询出来的结果为空。

    所以一定要知道外连接的查询原理。

最新文章

  1. Sphinx的介绍和原理探索
  2. 列表 list
  3. 八大常见内排序java实现
  4. ORA-01009: 必需的参数缺失
  5. 页面加载后的input change事件 1或2个框 ajax
  6. 特殊的反转单链表算法(C++)
  7. String类扩展
  8. Eclipse + PyDev 无法导入模块
  9. Tensorflow之MNIST解析
  10. mysql 5.7.13 安装配置方法图文教程(linux) (转)
  11. Dictionary导致CPU暴涨
  12. b2b
  13. Slave SQL_THREAD如何重放Relay log
  14. 在Centos下用alternative命令切换各个版本的jdk的方法
  15. 2017.1.9版给信息源新增:max_len、max_db字段
  16. js 实现数组深度copy
  17. C++ 判断进程是否存在
  18. [您有新的未分配科技点] 无旋treap:从单点到区间(例题 BZOJ1500&NOI2005 维护数列 )
  19. 20145313张雪纯 《Java程序设计》第1周学习总结
  20. Mysql与Sql server,Sum函数跟Count函数

热门文章

  1. vs2013安装时提示核心功能错误
  2. 程序运行的cpu时间
  3. iis6.0 建立站点
  4. LeetCode Number of 1 Bits 计算1的个数
  5. DBMS事务的四大特性
  6. js高级笔录
  7. Redis安装配置及在Python上的应用
  8. js 生成随机数解决缓存的问题
  9. Android(java)学习笔记77:Android中assets文件夹资源的访问
  10. 2018.10.24 NOIP2018模拟赛 解题报告