sql 中 left join 的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 中 left join 的使用相关的知识,希望对你有一定的参考价值。

left join 。是以左表为基础,查询右表的值。如果在右表中没用没有数据,则为NULL。

这里有三张表。

  线路bs_line:id,name(id主键)

  线路段bs_seg:id,l_id,name(l_id关联线路id)

  配变bs_dsub:id,seg_id,name(seg_id关联线路段id)

它们之间的关系是:  配变 -> 线路段 -> 线路。

现在的需求:

  统计出每条线路有多少台配变

sql语句:

  select bs_line.name, count(bs_dsub.name) dsub_num from bs_line
  left join bs_dsub
  on
  bs_dsub.seg_id in (select id from bs_seg where l_id = bs_line.id)
  group by bs_line.name    

  /*group by 显示线路 */

 

 

执行该语句时,速度很慢。检查了下sql语句,发现用in时,会遍历多次。于是改为 =

    select bs_line.name, count(bs_dsub.name) dsub_num from bs_line
    left join bs_dsub
    on
    bs_dsub.seg_id = (select id from bs_seg where l_id = bs_line.id)
    group by bs_line.name

 

可以正常使用了。

回顾:

  1、from bs_line left join bs_dsub :表示 以bs_line为左表,以bs_dsub为右表。

  2、bs_dsub.seg_id =(select id from bs_seg where l_id = bs_line.id) 中的 bs_line.id 指遍历的每一条线路id值,以此为条件进行查询。

  3、在sql语句里尽量不要用in,使用 ‘=‘,避免语句多次循环。

 

以上是关于sql 中 left join 的使用的主要内容,如果未能解决你的问题,请参考以下文章

关于VF中select left(right) join的准确用法

有人可以用 JOIN 和 LEFT JOIN 帮助我理解以下 SQL 代码吗? (对 SQL 来说真的很新)

多个left join结合动态sql的代码语句

多个left join结合动态sql的代码语句

如何在 SQL 中使用多个 LEFT JOIN?

sql 中 left join 的使用