新手,看百度有点晕了,关于左连接和右连接有一些困惑呀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连接,该怎么写呢?
先道谢一下   谢谢

解决方案 »

  1.   

    第一个问题 左连接和右连接当然不一样了
    假设前边有十条数据 后边有0条 左连接后是十条 右连接后就是空的
    其实说白了 左连接就是在右边找满足条件的接到左边 数量和左边一样 右连接正好相反第二个问题,你的b与a连接了,a。id=b。id,那么,不管c和谁连接都一样了吧 c。id=a。id和c。id=b。id没有区别
    e和f的连接不想和a连接,那么数据怎么展示?
      

  2.   

    --左连接
    以左边表为主表,不管右方的副表中有没有对应主表的数据,主表的所有数据都要显示
    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
    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
    --所以第二个问题也有答案了~
      

  3.   

    左连接:a left join b
    则输出a与b有关联的信息+a中与b中无关联的信息右连接:a rigth join b
    则输出b与a有关联的信息+b中与a中无关联的信息
    总结:那个方向连接就向那个方向的表看齐。这样看是否对你理解有帮助,其他的按原理类推即可。
      

  4.   

    你第一条全为左连接,第二条有right join d on d.id = c.id右连接,结果当然不一样
      

  5.   

    我上一个回复有个地方说错了 就是c.id=a.id是和a连接,c.id=b.id是和b连接,不一样
    具体的2楼已经说清楚了