当前位置:网站首页>阿里三面:LEFT JOIN关联表中用ON还是WHERE跟条件有什么区别
阿里三面:LEFT JOIN关联表中用ON还是WHERE跟条件有什么区别
2022-06-28 10:51:00 【Java爱好狂.】
之前有码友去阿里面试,被问到 LEFT JOIN 关联表中用 ON 还是 WHERE 跟条件有什么区别,很快就答出来了,可是追问什么原因造成这一情况的,一时没回答上来。
下面说说,想通过 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条件的区别如下:
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')第一条SQL的过程:
1、中间表
on条件:
tab1.size = tab2.size
tab1.idtab1.sizetab2.sizetab2.name
1
10
10
AAA
2
20
20
BBB
2
20
20
CCC
3
30
(null)
(null)
|
|
2、再对中间表过滤
where 条件:
tab2.name=’AAA’
tab1.idtab1.sizetab2.sizetab2.name
1
10
10
AAA
第二条SQL的过程:
1、中间表
on条件:
tab1.size = tab2.size and tab2.name=’AAA’
(条件不为真也会返回左表中的记录)
tab1.idtab1.sizetab2.sizetab2.name
1
10
10
AAA
2
20
(null)
(null)
3
30
(null)
(null)
其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。
作者:jcpp9527
blog.csdn.net/wqc19920906/article/details/79785424
边栏推荐
- Google open source dependency injection framework Guice Guide
- idea连接sql sever失败
- Katalon framework tests web (XX) custom keywords and upload pop-up operations
- What is the function of ICMP Protocol and the principle of Ping of death attack?
- How to use dataant to monitor Apache apisex
- Ffmpeg audio and video recording
- 数据库系列:有什么办法对数据库的业务表进行无缝升级
- Internet of things application case of wireless module transparent transmission technology
- Resolution: overview of decentralized hosting solution
- Sqlcmd database connection error
猜你喜欢

How to use dataant to monitor Apache apisex

How does ETF position affect spot gold price?

DataEase安装升级
![[Unity][ECS]学习笔记(二)](/img/72/d3e46a820796a48b458cd2d0a18f8f.png)
[Unity][ECS]学习笔记(二)

Several methods of using ABAP to operate Excel

linux中源码安装mysql数据库(centos)
![[unity][ecs] learning notes (I)](/img/eb/1f0ad817bbc441fd8c14d046b82dd0.png)
[unity][ecs] learning notes (I)

fastposter v2.8.4 发布 电商海报生成器

Installing MySQL database (CentOS) in Linux source code
![[NLP] this year's college entrance examination English AI score is 134. The research of Fudan Wuda alumni is interesting](/img/a8/51b95432a9c8f25d8440cfd80926ce.png)
[NLP] this year's college entrance examination English AI score is 134. The research of Fudan Wuda alumni is interesting
随机推荐
Mysql database overview and installation process
How does ETF position affect spot gold price?
满电出发加速品牌焕新,长安电动电气化产品吹响“集结号”
Guangzhou Customs supports the stable supply of food, agricultural products, traditional Chinese medicine and other civilian and biological resources to Hong Kong
Wireless communication module fixed-point transmission - point to multipoint specific transmission application
Understand 12 convolution methods (including 1x1 convolution, transpose convolution and deep separable convolution)
An idea plug-in that automatically generates unit tests, which improves the development efficiency by more than 70%!
[unity] built in rendering pipeline to URP
[Unity]内置渲染管线转URP
DataEase安装升级
sentinel
[monkey] Introduction to monkey test
使用 ABAP 操作 Excel 的几种方法
Yann LeCun新论文:构建自动智能体之路
第六天 脚本与动画系统
[Unity][ECS]学习笔记(一)
How to use K-line diagram for technical analysis
[leetcode daily question] [December 19, 2021] 997 Find the town judge
fastposter v2.8.4 发布 电商海报生成器
metersphere使用js刷新当前页面