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 的使用的更多相关文章

  1. SQL中inner join、outer join和cross join的区别

    对于SQL中inner join.outer join和cross join的区别简介:现有两张表,Table A 是左边的表.Table B 是右边的表.其各有四条记录,其中有两条记录name是相同 ...

  2. SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别

    前言: 今天主要的内容是要讲解SQL中关于Join.Inner Join.Left Join.Right Join.Full Join.On. Where区别和用法,不用我说其实前面的这些基本SQL语 ...

  3. 【转载】SQL中inner join、outer join和cross join的区别

    对于SQL中inner join.outer join和cross join的区别很多人不知道,我也是别人问起,才查找资料看了下,跟自己之前的认识差不多, 如果你使用join连表,缺陷的情况下是inn ...

  4. LINQ TO SQL 中的join(转帖)

    http://www.cnblogs.com/ASPNET2008/archive/2008/12/21/1358152.html join对于喜欢写SQL的朋友来说还是比较实用,也比较容易接受的东西 ...

  5. sql中的join

    首先准备数据 有以下数据,三张表:role(角色表).hero(英雄表).skill(技能表),我们以英雄联盟的数据做示例 一个hero对应一个role(我们这里暂定) 一个role可以对应多个her ...

  6. Access SQL中Left Join、Right Join和Inner Join的使用

    1.表结构 表A                                     表B 2.Left Join 示例:2.1 Select * From A left join B on A. ...

  7. SQL中的Join和Where的区别

    一.sql语句中left join.inner join中的on与where的区别 0.各种join操作的概念和作用 left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录. ...

  8. SQL中INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN区别

    sql中的连接查询有inner join(内连接).left join(左连接).right join(右连接).full join(全连接)四种方式,它们之间其实并没有太大区别,仅仅是查询出来的结果 ...

  9. SQL中的join操作总结(非常好)

    1.1.1 摘要 Join是关系型数据库系统的重要操作之一,SQL Server中包含的常用Join:内联接.外联接和交叉联接等.如果我们想在两个或以上的表获取其中从一个表中的行与另一个表中的行匹配的 ...

  10. SQL中的JOIN语法详解

    参考以下两篇博客: 第一个是 sql语法:inner join on, left join on, right join on详细使用方法 讲了 inner join, left join, righ ...

随机推荐

  1. sql developer 要求输入jdk地址

    困扰了好久  终于找到解决办法了. 将sql developer改为 兼容模式和管理员方式运行,选择java.exe的路径 终于可以在64位系统下顺利使用了.

  2. ios网络知识

    http://www.cocoachina.com/bbs/read.php?tid-31300.html  启蒙内容 http://blog.csdn.net/nono_love_lilith/ar ...

  3. MySQL 性能调优之查询优化

    见原文: http://www.cnblogs.com/markjiao/p/5665775.html

  4. idea-生成key的Java代码

    import java.math.BigInteger; import java.util.Date; import java.util.Random; import java.util.Scanne ...

  5. new date() 在Linux下引起的时间差问题

    java工程部署到Linux时,使用new date()获取的时间出现时间差,通过查阅资料,发现有可能是服务器时间设置问题,JVM问题,jdk问题: 1.服务器时间设置问题: 正确的时间显示 有 CS ...

  6. Python 中的虚拟环境

    检查系统是否安装了virtualenv: $ virtualenv --version 创建虚拟环境venv(名字可以随便取,一般为venv): $ virtualenv venv 使用虚拟环境ven ...

  7. 计算机网络自学之路-----IP协议(3)

    前面一期说到了IP层的IP协议跟ARP协议,因为IPV4协议自身有些不足的地方,为了弥补这些不足,又引入了一些别的协议.觉得这种弥补方式治标不治本~~ 1)ICMP网络控制报文协议 2)CIDR无类域 ...

  8. Obiee11g变量

    原文地址:http://xee123.blog.163.com/blog/static/277119942012612104438332/ Obiee 版本 11.1.1.5 库变量 库变量在同一时刻 ...

  9. linux日常运维管理

    1.查看系统负载命令 w命令:主要查看cpu负载 load average:一分钟内负载 五分钟内负载 十五分钟内负载 负载跟cpu核心数有关,查看cpu核心数: # cat /proc/cpuinf ...

  10. MySql 的常用优化

    1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽 ...