新手,看百度有点晕了,关于左连接和右连接有一些困惑呀from a
left join b on a.id = b.id
left join c on b.id = c.id
left join d on c.id = d.id与from a
left join b on a.id = b.id
left join c on b.id = c.id
right join d on d.id = c.id问题1:
这2个好像是一样的吧,但是我在执行的时候却不一样,前者能查出结果,后者则全部为空,为什么呢?问题2:
比如说前者“left join c on b.id = c.id”指的是a与c连接,要满足b.id = c.id,还是指b与c连接,要满足b.id = c.id的左连接;如果是a与c连接的话,那么就必须都要和a连接了吗,假如还有有一个e和f的左连接,不希望和a连接,该怎么写呢?
先道谢一下 谢谢
left join b on a.id = b.id
left join c on b.id = c.id
left join d on c.id = d.id与from a
left join b on a.id = b.id
left join c on b.id = c.id
right join d on d.id = c.id问题1:
这2个好像是一样的吧,但是我在执行的时候却不一样,前者能查出结果,后者则全部为空,为什么呢?问题2:
比如说前者“left join c on b.id = c.id”指的是a与c连接,要满足b.id = c.id,还是指b与c连接,要满足b.id = c.id的左连接;如果是a与c连接的话,那么就必须都要和a连接了吗,假如还有有一个e和f的左连接,不希望和a连接,该怎么写呢?
先道谢一下 谢谢
假设前边有十条数据 后边有0条 左连接后是十条 右连接后就是空的
其实说白了 左连接就是在右边找满足条件的接到左边 数量和左边一样 右连接正好相反第二个问题,你的b与a连接了,a。id=b。id,那么,不管c和谁连接都一样了吧 c。id=a。id和c。id=b。id没有区别
e和f的连接不想和a连接,那么数据怎么展示?
以左边表为主表,不管右方的副表中有没有对应主表的数据,主表的所有数据都要显示
select * from A;
--------------------
1
2
3select * from B;
--------------------
1 name1
2 name2select * from A left join B on A.id = B.id;
--------------------------------------------
1 name1
2 name2
3 null--右连接和左连接相反,就不举例子了。所以你的第一个问题也就有答案了!
--多个表左连接
from a
left join b on a.id = b.id
left join c on b.id = c.id
left join d on c.id = d.id--上面的意思是说a表和b表左连接,连接条件a.id = b.id
--然后用b表和c表左连接,连接条件...
--其他同理~
--上面左连接的主表分别是a,b,c
--也可以理解为:a和b连接后得到一个结果集,这个结果集中含有a表和b表的字段,
--然后用这个结果集和c表左连接,连接条件为结果集中的b.id = c.id
--所以第二个问题也有答案了~
则输出a与b有关联的信息+a中与b中无关联的信息右连接:a rigth join b
则输出b与a有关联的信息+b中与a中无关联的信息
总结:那个方向连接就向那个方向的表看齐。这样看是否对你理解有帮助,其他的按原理类推即可。
具体的2楼已经说清楚了