2 qq 28872199 qq_28872199 于 2016.09.12 16:44 提问

为什么我这个用left join ,join, right join效果相同?

查出来的结果没有一丁掉变化,去百度看了很多还是不明白,求大神解答图片说明

10个回答

qw0907
qw0907   2016.09.12 17:04

这与 你两个表中的资料有关。
你删除 某个表中的一笔资料,另一个表不动,
你就可以看到 不同了。

wyg_blog
wyg_blog   2016.09.12 17:10

是不是两个表的内容都是匹配的,所以左右连接查出来结果都一样。
试试让一个表少一行数据。

zhaihonghonghzh
zhaihonghonghzh   2016.09.12 17:10

你把数据修改下 让它们有些不能匹配对 最好的验证方法是 把一些字段的值置空

qq_23126581
qq_23126581   Rxr 2016.09.12 17:20

我不知道这样说,对不对啊,不对请见谅,我也是新手,比如有两张表,a表,和b表,a表50条数据,b表有100数据,两个表匹配到的是50条数据,用left join
是以a表为主,你查询的时候以a表信息为主,显示50条数据,还有50条 数据都是null。

huxin008
huxin008   2016.09.12 17:51

left 就是以左表为主,匹配到的到的就匹配。匹配不到的右边会显示null,左表是全部的,右边不一定,right join刚好想反

jerry10_yang
jerry10_yang   2016.09.12 19:23

这是因为你的两个表中的元素完全一一对应,比如说表A{1,2,3} 表B{a,b,c} (1与a,2与b,3与c是对应关系),那么不管是left join还是right join 得到的结果的肯定是一样的

kings_zj
kings_zj   2016.09.13 15:44

left join 和 right join 是左连接和右连接。用oracle支持的语法就是 xxx(+)=yyy 或者 xxx=yyy(+) 就很明显看出来了。左连接是指查询到总记录数以左表总记录为准(只多不少),右表的数据根据条件和左表匹配,有的话就匹在一起,没有的话就null在那里。右连接反之。
比如:
A表 Id name
1 A11
2 A222

B表 Id name
1 B1111
1 B2222
3 B3333
A表Id左连接B表Id,查出来就是
A1 A11 B1 B1111
A1 A11 B2 B2222
A2 A22 null null

右连接反之
A1 A11 B1 B111
A1 A11 B1 B222
null null B3 B3333

cookidog
cookidog   2016.09.13 20:39

inner join是交集,full join是并集,left join 是左表为基础,right join 是右表为基础

meng20166
meng20166   Rxr 2016.09.14 14:51

这个查询结果是相同的,只是查询顺序不同,left join的话左表是主表,right join 右表是主标,join是并集。sql纯在这些方法是为了提高查询效率,一般数据量大的当主表效率会更高,数据量少的话是看不出来的,如果数据库里有上百万条数据你就会看到同样都是sql,查询结果相同,但效率可以提高好几倍,所以sql不能只看结果,过程也是很重要的

beyon2008
beyon2008   2016.10.19 09:27

如果left join ,join, right join结果相同,只能说明一点,通过on条件关联上了完全的记录

Csdn user default icon
上传中...
上传图片
插入图片