阅读目录

1、首先来谈谈什么是left join

2、再来谈谈on后面使用and和where的区别

3、总结


今天的最佳表现应该作为明天的最低要求

1、首先来谈谈什么是left join

left join即左连接,比如表1左连接表2,以左表为主,表示以表1为主,关联上表2的数据,查询出来的结果显示左表的所有数据,然后右边显示的是和左表有交集的数据

比如下面有学生表(student)和教师表(teacher),将教师表的主键作为学生表的外键,此外建可为空,即有的学生可能暂时还没有分配到教师。表结构如下所示

学生表(student)

教师表(teacher)

     

现在假设需要查询出所有学生的aid、name以及教师的name,有没有分配教师的学生都需要查询出来,以便给没有分配教师的学生进行教师分配,这个SQL该怎么写呢?如下所示

SELECT s.aid,s.name, t.name teacher_name
FROM student s
LEFT JOIN teacher t ON s.teacher_aid = t.aid

这样就查询出了所有学生的信息,包括未分配教师的学生,student表作为左表,teacher作为右表,查询出student表的所有数据以及和teacher表有交集的数据,这就是左连接(left join)


2、再来谈谈on后面使用and和where的区别

假设现在student表里面的数据如下

现在有一个接口的要求是查询出目前在读(is_read  = 1)的学生的aid、name和教师的name,这个SQL该怎么写呢?如下所示

(1)、第一种情况,在on后面使用and,SQL 如下所示

SELECT s.aid,s.name, t.name teacher_name
FROM student s
LEFT JOIN teacher t ON s.teacher_aid = t.aid
AND s.is_read = 1

查询结果是这样的

很显然根据上面student的数据来看,这个SQL语句查询的结果中包含了is_read = 0的数据,而接口要求的是查询出is_read  = 1的数据,这个SQL无法查询出正确的数据。

(2)、第二种情况,在on后面使用where,SQL 如下所示

SELECT s.aid,s.name, t.name teacher_name
FROM student s
LEFT JOIN teacher t ON s.teacher_aid = t.aid
WHERE s.is_read = 1

查询结果是这样的

很显然根据上面的student表的数据来看,这个SQL查询出来的数据正是is_read = 1的数据,完全符合接口的要求,所以这个接口查询的数据是正确的。


3、总结

根据上面的例子相信有的人已经猜出了这两者的区别,我这里做个总结

在on后面使用and

  •   如果and语句是对左表进行过滤,那么无论这个过滤条件是真是假都不起作用,左表的记录会全部返回
  • 如果and是对右表进行过滤,那么左表会与过滤后的右表进行左连接,左表数据依旧全部返回

在on后面使用where

  • where是对连接后的结果集(临时表)进行过滤的,此时的left join已经不起作用,条件不为真的数据就全部过滤掉

SQL 左连接中on后面加where和加and的区别相关推荐

  1. SQL基础(八)-- sql左右连接中的on and 和 on where 的区别

    在使用left join时,on and和 where and条件的区别如下: 在使用链接时,先执行 on and,再执行  where and 1. on条件是在生成临时表时使用的条件,它不管on中 ...

  2. SQL左连接或者右连接数据变少

    SQL左连接或者右连接数据变少: 主要看这两篇文章就可以: https://blog.csdn.net/lz_peter/article/details/83185909 https://blog.c ...

  3. sql左连接、右连接、内连接有什么区别?

    sql左连接.右连接.内连接有什么区别? 总结:语法公式不同.基础表不同.结果集不同. 一.语法公式不同: 左连接: 左连接的关键字是left join,语法公式为select *from dave ...

  4. sql左连接和右连接区别是什么?

    sql左连接和右连接区别是什么? sql左连接和右连接区别是:左连接会读取左边数据表的全部数据,即使右边数据表没有对应数据:而右连接会读取右边数据表的全部数据,即使左边数据表没有对应数据. 左连接: ...

  5. SQL错误提示档案(3):SQL Server连接中的四个最常见错误

    SQL   Server连接中的四个最常见错误:         一."SQL   Server   不存在或访问被拒绝"          一般说来,有以下几种可能性:     ...

  6. SQL Server连接中的常见错误

    SQL Server连接中的常见错误: 一."SQL Server 不存在或访问被拒绝" 这个是最复杂的,错误发生的原因比较多,需要检查的方面也比较多. 一般说来,有以下几种可能性 ...

  7. SQL左连接,右连接,内连接简单例子

    SQL左连接,右连接,内连接简单例子 左连接:以左表为主 select column_a , column_b from table_a left join table_b on table_a.id ...

  8. python显示文字框_在Python 中实现图片加框和加字的方法

    第一步:安装opencv-python rpm -ivh opencn-python-2.4.5-3.el7.ppc64le.rpm 第二步:引用cv2 import cv2 第三步:读入图片,必须是 ...

  9. sql左连接排序取第一个_详解kettle工具记录集连接功能及实验测试

    概述 今天主要介绍下kettle的记录集连接功能和一些注意点. 一.什么是记录集连接 记录集连接可以实现数据集合的关联,也分为内连接,左连接,右连接,外连接. 多表的join,可以直接用sql写入[表 ...

最新文章

  1. RESTful API -备
  2. big and little endian
  3. zlog使用手册,小靠谱啊
  4. Java IO学习笔记(四)打印流
  5. oracle执行命令显示2,Oracle数据库执行脚本常用命令小结
  6. e300氛围灯哪里调节_黑色的奔驰E300有了亚光膜的加持 一出场就惊艳四座
  7. 有时我都非常讨厌自己,特别容易相信人
  8. C#连接Oracle数据库
  9. 计算机职业素养论文1500字,【职业素养论文】职业素养论文范文(共40篇)
  10. 内存的读写速度是硬盘的多少倍
  11. C++14新特性:deprecated的含义与使用?
  12. mysql临时表在哪找_MySQL 中的临时表
  13. HDU 4598 Difference
  14. 不只是C2M:淘宝特价版的“产业数字化”野望
  15. 鸢(yuan)尾花分类任务
  16. Algo-131-Beaver's Calculator
  17. 业务流程监控的几点建议
  18. 计算机操作员初级试题及答案,计算机操作员初级试题及答案.doc
  19. Win10深色模式和白天模式设置
  20. 对timedelta64的理解

热门文章

  1. 常用药 学着照顾自己和身边的人
  2. 【Lintcode】1799. Sequence Summation
  3. 如何为自己制作出一份优秀的简历
  4. scp:Mac使用方法(文件上传与下载服务器)
  5. java持久化框架_众里寻他千百度-- 轻量级持久化框架-java-火龙果软件工程
  6. 草图大师素材是如何快速导入到模型中的呢?草图溜溜来替你解答
  7. 没得选这件事是人生常态
  8. 美食小吃加盟网站源码餐饮奶茶招商加盟类网站
  9. python小技巧:一步步教你用Python实现
  10. python根据时间序列画折线图_Python cufflinks 绘制折线图,时间序列,子图:简单,很快,很酷,还会动,从此 seaborn 是路人...