left join 后边的on条件 小记
结论:
left join 为保证左表所有行 因此 on里的条件只对右表起作用,控制左表的条件写到这里也没用
原理:
- on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
- 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时,on
和where
条件的区别如下:
on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
假设有两张表:
表1:tab2
id size
1 10
2 20
3 30
表2:tab2
size name
10 AAA
20 BBB
20 CCC
两条SQL:
select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name=’AAA’
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条件 小记相关推荐
- join on后面 加条件 与 where后面加条件的区别
今天看到有人提问,问join on后边加and和 where后边加and有什么区别,因此来做一个案例有助于理解. 首先准备数据,test1,test2数据如下: 1.left join and和 l ...
- left join on 和where条件的放置
select * from td left join ( select case_id as sup_case_id , count(*) supervise_number from td_kc ...
- left join后边跟on...and 和where...and的区别
文章目录 1. 建表 2. on...and 3. where...and 1. 建表 testA CREATE TABLE testA (Id int ( 10 ) PRIMARY KEY,NAME ...
- java连接查询where_SQL中join连接查询时条件放在on后与where后的区别
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. 在使用left jion时,on和where条件的区别如下: 1. on条件是在生成临时表时使用的条 ...
- left join 多条件_第九篇|Spark的五种JOIN策略解析
JOIN操作是非常常见的数据处理操作,Spark作为一个统一的大数据处理引擎,提供了非常丰富的JOIN场景.本文分享将介绍Spark所提供的5种JOIN策略,希望对你有所帮助.本文主要包括以下内容: ...
- mysql join不加关联条件的含义
select * from student,course;+----+------+----------+-----+----+------+----+ |s_id|s_name|s_birth |s ...
- mysql 或hive left join不加关联条件
mysql left join不加关联条件 create table if not exists u1 (id int,name varchar(20) ) ENGINE = MyISAMDEFAUL ...
- MySql 别犯糊涂了! LEFT JOIN 的 ON 后接上筛选条件,多个条件会出事!
很多时候我们在使用 LEFT JOIN ...... ON .... 时, 除了连接两个表的字段条件外,我们往往还需要一些等值或者范围 等等类似的数据筛选条件. 那么对于初学者,往往会犯一个错误 ...
- 一文搞懂两表关联时left join 、 on 以及where条件不同写法对结果的影响--文末有结论
一文搞懂两表关联时left join 与 on 以及where条件不同写法对结果的影响–文末有结论 1.数据准备(建议使用本地mysql) a表: b表: 建表语句: Create EXTERNaL ...
最新文章
- 特斯拉超级计算机Dojo
- AI研究过于集中狭隘,我们是不是该反思了?
- 一些意想不到的小bug。
- 基础知识漫谈(1): 想到哪儿写到哪儿
- ubuntu 下通过 sh 命令运行脚本产生如下错误:[: y: unexpected operator
- 通过NetMassDownloader批量下载和使用微软.NET框架源代码
- 全国计算机等级考试题库二级C操作题100套(第33套)
- Python | 使用matplotlib.pyplot创建条形图
- 如何测定拼色染液中,各染料在不同染色时间时,染液中残留染料量及织物上吸附上染的染料量?
- 反转!Python再次卫冕2020年编程榜,Java和C回落,你怎么看?​
- selenium模拟登陆去哪儿网
- python怎么写出正弦图_如何使用python在图像上生成随机正弦条纹?
- Android 功耗( 21 )---MTK 低功耗1
- 正则化检测TR069的参数路径是否合法
- asp.net 页面跳转的方法
- 哪种存储器是非易失的_非易失性存储器
- 打代码太苦,你需要一个鼓励师
- 内窥镜胶囊(胶囊内镜)硬件方案(二)
- Linux分卷压缩zip文件命令,linux下的几种分卷压缩命令
- 手机充值 html,仿京东手机充值进度导航_html/css_WEB-ITnose
热门文章
- think.class.php下载,PHP_ThinkPHP实现将本地文件打包成zip下载,首先,将FileToZip.class文件放到T - phpStudy...
- mysql升级后不能启动不了了_MySQL在一次更新后无法启动 [2017年3月14日]
- java哈希_Java Hashtable 类
- swingbench oracle rac,使用Swingbench压力测试Oracle RAC
- 抖音提示需要转换为mp4_如何将MP4文件转换为MP3格式?万兴优转帮你轻松完成转换...
- 【ruoyi】java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoo
- thymeleaf 异常:SpelEvaluationException: EL1008E: Property or field ‘url‘ cannot be found
- SpringMVC获取Request,Response, Session对象
- wp java_Java WordPress工具库wp-client
- java 禁用迅雷_Squid使用User Agent过滤禁止迅雷