百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> MySQL left join 左连接详解介绍
分享文章到:

MySQL left join 左连接详解介绍

发布时间:01/15 来源: 浏览: 关键词:
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。left join 左连接——以左边的数据表为基准,若右边的数据表没有对应的数据则显示空白

表a


1 aid adate  

2 1 a1  

3 2 a2  

4 3 a3
表b


1 bid bdate  

2 1 b1  

3 2 b2  

4 4 b4


1

 代码如下
select * from a left join b on a.aid = b.bid

首先取出a表中所有数据,然后再加上与a、b匹配的的数据。

此时的取出的是:


1 1 a1 b1  

2 2 a2 b2  

3 3 a3 空字符
同样的也有right join

指的是首先取出b表中所有数据,然后再加上与a、b匹配的的数据。

此时的取出的是:


1 1 a1 b1  

2 2 a2 b2  

left join性能


1例子

 代码如下

select  distinct count('goods_id') as num , g.goods_id,g.goods_name from ms_goods as g left  join ms_order_goods as og on g.goods_id = og.goods_id group by goods_id

显示行 0 - 29 (1,475 总计, 查询花费 0.0167 秒)

2例子

 代码如下

select  distinct count('goods_id') as num , g.goods_id,g.goods_name from ms_goods as g , ms_order_goods as og where g.goods_id = og.goods_id group by goods_id

显示行 0 - 29 (257 总计, 查询花费 0.0088 秒)

实例


表结构如下:

MDate      StoreCode  GoodsCode  ToStoreCode  GoodsAmount  GoodsFlag
2005-12-12   001             101                  888                         2            3
2005-12-13   001             101                     3                          1
2005-12-15   001             101                     1                          2

三条记录的意思分别为:
2005-12-12从001移到888  2件        
2005-12-13从001销售     3件
2005-12-15仓店001进货   2件

出报表
StoreCode  GoodsCode  StockAmount   InAmount     OutAmount    SellAmount
001              101                       3                  0                      2             1
注:StockAmount进货数量   InAmount移入数量     OutAmount移出数量    SellAmount销售数量

 代码如下

select
    StoreCode,
    GoodsCode,
    StockAmount = sum(case GoodsFlag when 2 then GoodsAmount else 0 end),
    InAmount    = sum(case GoodsFlag when 4 then GoodsAmount else 0 end),
    OutAmount   = sum(case GoodsFlag when 3 then GoodsAmount else 0 end),
    SellAmount  = sum(case GoodsFlag when 1 then GoodsAmount else 0 end)
from
    表
group by
    StoreCode,GoodsCode

例子3
po_order_det 表
ID   MA_ID     QTY
01   #21钢     30 
02   #22钢     40
03   #23铝     30

ST_CONVER 表
ID  QTY
01  20
02  10
要求返回集 QTY = po_order_det.QTY - ST_CONVER.QTY AND po_order_det.ID=ST_CONVER.ID

ID     MA_ID   QTY
01     #21钢   10
02     #22钢   30
03     #23铝    30

 代码如下

select a.order_id,a.id,a.ma_id,a.qty,isnull(b.qty,0) qtyy, isnull(a.qty  - b.qty ,0) qtyx
from po_order_det a left join st_conver b
on a.id=b.id and a.filid=b.filid
and a.id=b.id and a.order_id=b.order_id
Where  a.filid='S'

总结

SQL 中只出现一个左连接:

 代码如下

 select a.*, b.*, c.* from b, a

left join c on a.id = c.id

where b.id = a.iid

 注意 表a 要和最近的一个关联的leftjoin挨着。

 SQL中出现了2个或者多个左连接:

 

 代码如下

select a.*, b.* c.*, d.*, e.*

from ((

   c, b, a

)

   left join d on d.id = a.id

)  left join e  on e.id = b.id

 

where c.id = b.id

and b.id = a.id

 

leftjoin总和最近的一个表挨着,同时需要用借助于括号

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有1人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板