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,使用 ‘=‘,避免语句多次循环。

 
时间: 2024-08-07 21:19:55

sql 中 left join 的使用的相关文章

LINQ TO SQL 中的join(转帖)

http://www.cnblogs.com/ASPNET2008/archive/2008/12/21/1358152.html join对于喜欢写SQL的朋友来说还是比较实用,也比较容易接受的东西.在LINQ TO SQL中,写多表查询,同样可以写join,只是它有它自己的语法要求而已,语义都是一样的,下面我来讲下LINQ TO SQL中的join最基本的形式:都是最简单的,当然还有其它方面的内容,如:怎样加上过滤条件,如何分组,如何排序等等,为了单纯说join的用法,这里就简化下. Cod

30秒懂SQL中的join

30秒懂SQL中的join 注:本文仅仅是本人在网上看到的比较好的文章,为了以后复习方便,就文章 完全复制下来.原文地址如下:http://www.habadog.com/ 预先生成两张测试表,并插入一下测试数据: create table t1(id int, name char(10), primary key (id)); create table t2(id int, score int, primary key (id)); insert into t1 values(1, “lucy

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语法各位攻城狮基本上都用过.但是往往我们可能用的比较多的也就是左右连接和内连接了,而且对于许多初学者而言不知道什么时候该用哪种语法进行查询,并且对于左右,或者内连接查询的时候关于ON 和Where 的作用也是模糊不清的,说不出其中的一个大概的差别,因此接下来请容我把它们好好描述一遍. 数据库(MS S

SQL中的JOIN语法详解

参考以下两篇博客: 第一个是 sql语法:inner join on, left join on, right join on详细使用方法 讲了 inner join, left join, right join的意义和用法. 第二个是 SQL中的left outer join,inner join,right outer join用法详解 讲了关系运算背后的数学原理,以及提到了更多类型的连接操作: inner join- 笛卡尔乘积再选取, left outer join, right out

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

1.表结构 表A                                     表B 2.Left Join 示例:2.1 Select * From A left join B on A.aid = B.bid; left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的. 换句话说,左表A的记录将会全部表示出来,而右表B只会显示符合搜索条件的记录(例子中为: A.aid = B.bid),B表记录不足的地方均为NULL. A表所有记录

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

1.1.1 摘要 Join是关系型数据库系统的重要操作之一,SQL Server中包含的常用Join:内联接.外联接和交叉联接等.如果我们想在两个或以上的表获取其中从一个表中的行与另一个表中的行匹配的数据,这时我们应该考虑使用Join,因为Join具体联接表或函数进行查询的特性 本文将通过具体例子介绍SQL中的各种常用Join的特性和使用场合: 目录 Inner join Outer join Cross join Cross apply Cross apply 和 Inner join的区别

Spark SQL中Dataframe join操作含null值的列

当在Spark SQL中对两个Dataframe使用join时,当作为连接的字段的值含有null值.由于null表示的含义是未知,既不知道有没有,在SQL中null值与任何其他值的比较(即使是null)永远不会为真.故在进行连接操作时null == null不为True,所以结果中不会出现该条记录,即左侧表格的这条记录对应右侧的值均为null.示例如下: table_a: date serverId lvSection 2018-03-04 1 10 2018-03-05 null 9 2018

SQL中 left join 的底层原理

介绍 left join的实现效果就是保留左表的全部信息,将右表往左表上拼接,如果拼不上则为NULL. 除了left join以外,还有inner join.outer join.right join等,文章不介绍其他连接的具体效果,主要讲解join的底层原理是如何实现的?具体效果是怎样呈现的? 只有懂得了底层原理,才能更好的写出性能优越的SQL脚本,提高SQL的执行速度. join主要有3种方式,具体为: Nested Loop -- 嵌套循环,细分为以下3种连接方式: Simple Nest

SQL中 Left Join 与 Right Join 与 Inner Join 与 Full Join的区别

首先看看Left Join 与Right Join 与 Inner Join 与 Full Join对表进行操作后得到的结果. 在数据库中新建两张表,并插入要测试的数据. 新建表: [sql] USE [Test] GO /****** 对象:  Table [dbo].[EMP]   ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[EMP]( [ENAME] [nchar](10) COL