结论:

left join 为保证左表所有行 因此 on里的条件只对右表起作用,控制左表的条件写到这里也没用

原理:

  1. on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
  2. where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

下面的内容为转载

前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一条,奈何发现还是有两条。

后来发现 join on and 不会过滤结果记录条数,只会根据and后的条件是否显示 B表的记录,A表的记录一定会显示。

不管and 后面的是A.id=1还是B.id=1,都显示出A表中所有的记录,并关联显示B中对应A表中id为1的记录或者B表中id为1的记录。

运行sql : select * from student s left join class c on s.classId=c.id order by s.id

运行sql : select * from student s left join class c on s.classId=c.id and s.name="张三" order by s.id

运行sql : select * from student s left join class c on s.classId=c.id and c.name="三年级三班" order by s.id

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
在使用left jion时,onwhere条件的区别如下:

  1. on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

  2. where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

假设有两张表:

表1:tab2

id    size
1   10
2   20
3   30
表2:tab2
size name
10  AAA
20  BBB
20  CCC

两条SQL:

  1. select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name=’AAA’
  2. select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name=’AAA’)

其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。 而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。

left join 后边的on条件 小记相关推荐

  1. join on后面 加条件 与 where后面加条件的区别

    今天看到有人提问,问join on后边加and和  where后边加and有什么区别,因此来做一个案例有助于理解. 首先准备数据,test1,test2数据如下: 1.left join and和 l ...

  2. left join on 和where条件的放置

    select * from td   left join ( select case_id as sup_case_id , count(*) supervise_number from  td_kc ...

  3. left join后边跟on...and 和where...and的区别

    文章目录 1. 建表 2. on...and 3. where...and 1. 建表 testA CREATE TABLE testA (Id int ( 10 ) PRIMARY KEY,NAME ...

  4. java连接查询where_SQL中join连接查询时条件放在on后与where后的区别

    数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. 在使用left jion时,on和where条件的区别如下: 1. on条件是在生成临时表时使用的条 ...

  5. left join 多条件_第九篇|Spark的五种JOIN策略解析

    JOIN操作是非常常见的数据处理操作,Spark作为一个统一的大数据处理引擎,提供了非常丰富的JOIN场景.本文分享将介绍Spark所提供的5种JOIN策略,希望对你有所帮助.本文主要包括以下内容: ...

  6. mysql join不加关联条件的含义

    select * from student,course;+----+------+----------+-----+----+------+----+ |s_id|s_name|s_birth |s ...

  7. mysql 或hive left join不加关联条件

    mysql left join不加关联条件 create table if not exists u1 (id int,name varchar(20) ) ENGINE = MyISAMDEFAUL ...

  8. MySql 别犯糊涂了! LEFT JOIN 的 ON 后接上筛选条件,多个条件会出事!

    很多时候我们在使用  LEFT JOIN   ...... ON .... 时, 除了连接两个表的字段条件外,我们往往还需要一些等值或者范围 等等类似的数据筛选条件. 那么对于初学者,往往会犯一个错误 ...

  9. 一文搞懂两表关联时left join 、 on 以及where条件不同写法对结果的影响--文末有结论

    一文搞懂两表关联时left join 与 on 以及where条件不同写法对结果的影响–文末有结论 1.数据准备(建议使用本地mysql) a表: b表: 建表语句: Create EXTERNaL ...

最新文章

  1. 特斯拉超级计算机Dojo
  2. AI研究过于集中狭隘,我们是不是该反思了?
  3. 一些意想不到的小bug。
  4. 基础知识漫谈(1): 想到哪儿写到哪儿
  5. ubuntu 下通过 sh 命令运行脚本产生如下错误:[: y: unexpected operator
  6. 通过NetMassDownloader批量下载和使用微软.NET框架源代码
  7. 全国计算机等级考试题库二级C操作题100套(第33套)
  8. Python | 使用matplotlib.pyplot创建条形图
  9. 如何测定拼色染液中,各染料在不同染色时间时,染液中残留染料量及织物上吸附上染的染料量?
  10. 反转!Python再次卫冕2020年编程榜,Java和C回落,你怎么看?​
  11. selenium模拟登陆去哪儿网
  12. python怎么写出正弦图_如何使用python在图像上生成随机正弦条纹?
  13. Android 功耗( 21 )---MTK 低功耗1
  14. 正则化检测TR069的参数路径是否合法
  15. asp.net 页面跳转的方法
  16. 哪种存储器是非易失的_非易失性存储器
  17. 打代码太苦,你需要一个鼓励师
  18. 内窥镜胶囊(胶囊内镜)硬件方案(二)
  19. Linux分卷压缩zip文件命令,linux下的几种分卷压缩命令
  20. 手机充值 html,仿京东手机充值进度导航_html/css_WEB-ITnose

热门文章

  1. think.class.php下载,PHP_ThinkPHP实现将本地文件打包成zip下载,首先,将FileToZip.class文件放到T - phpStudy...
  2. mysql升级后不能启动不了了_MySQL在一次更新后无法启动 [2017年3月14日]
  3. java哈希_Java Hashtable 类
  4. swingbench oracle rac,使用Swingbench压力测试Oracle RAC
  5. 抖音提示需要转换为mp4_如何将MP4文件转换为MP3格式?万兴优转帮你轻松完成转换...
  6. 【ruoyi】java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoo
  7. thymeleaf 异常:SpelEvaluationException: EL1008E: Property or field ‘url‘ cannot be found
  8. SpringMVC获取Request,Response, Session对象
  9. wp java_Java WordPress工具库wp-client
  10. java 禁用迅雷_Squid使用User Agent过滤禁止迅雷