MySQL left join 左连接详解介绍

小浪SEO博客 专注SEO优化思维、SEO技术的实战分享类博客~

LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行,left join 左连接——以左边的数据表为基准,若右边的数据表没有对应的数据则显示空白.

  1. 表a
  2. 1aidadate
  3. 21a1
  4. 32a2
  5. 43a3
  6. 表b
  7. 1bidbdate
  8. 21b1
  9. 32b2
  10. 44b4

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

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

  1. 11a1b1
  2. 22a2b2
  3. 33a3空字符

同样的也有right join,指的是首先取出b表中所有数据,然后再加上与a、b匹配的的数据,此时的取出的是:

  1. 11a1b1
  2. 22a2b2

left join性能

1例子,代码如下:

  1. selectdistinctcount('goods_id')asnum,g.goods_id,g.goods_namefromms_goodsasgleftjoinms_order_goodsasogong.goods_id=og.goods_idgroupbygoods_id

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

2例子,代码如下:

  1. selectdistinctcount('goods_id')asnum,g.goods_id,g.goods_namefromms_goodsasg,ms_order_goodsasogwhereg.goods_id=og.goods_idgroupbygoods_id

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

实例,表结构如下:

  1. MDateStoreCodeGoodsCodeToStoreCodeGoodsAmountGoodsFlag
  2. 2005-12-1200110188823
  3. 2005-12-1300110131
  4. 2005-12-1500110112

三条记录的意思分别为:

2005-12-12从001移到888 2件

2005-12-13从001销售 3件

2005-12-15仓店001进货 2件

出报表

  1. StoreCodeGoodsCodeStockAmountInAmountOutAmountSellAmount
  2. 0011013021

注:StockAmount进货数量 InAmount移入数量 OutAmount移出数量 SellAmount销售数量,代码如下:

  1. select
  2. StoreCode,
  3. GoodsCode,
  4. StockAmount=sum(caseGoodsFlagwhen2thenGoodsAmountelse0end),
  5. InAmount=sum(caseGoodsFlagwhen4thenGoodsAmountelse0end),
  6. OutAmount=sum(caseGoodsFlagwhen3thenGoodsAmountelse0end),
  7. SellAmount=sum(caseGoodsFlagwhen1thenGoodsAmountelse0end)--phpfensi.com
  8. from
  9. groupby
  10. StoreCode,GoodsCode

例子3:

  1. --po_order_det表
  2. IDMA_IDQTY
  3. 01#21钢30
  4. 02#22钢40
  5. 03#23铝30
  6. --ST_CONVER表
  7. IDQTY
  8. 0120
  9. 0210

要求返回集 QTY = po_order_det.QTY - ST_CONVER.QTY AND po_order_det.ID=ST_CONVER.ID

  1. IDMA_IDQTY
  2. 01#21钢10
  3. 02#22钢30
  4. 03#23铝30

代码如下:

  1. selecta.order_id,a.id,a.ma_id,a.qty,isnull(b.qty,0)qtyy,isnull(a.qty-b.qty,0)qtyx
  2. frompo_order_detaleftjoinst_converb
  3. ona.id=b.idanda.filid=b.filid
  4. anda.id=b.idanda.order_id=b.order_id
  5. Wherea.filid='S'

总结,SQL 中只出现一个左连接,代码如下:

  1. selecta.*,b.*,c.*fromb,a
  2. leftjoincona.id=c.id
  3. whereb.id=a.iid

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

SQL中出现了2个或者多个左连接,代码如下:

  1. selecta.*,b.*c.*,d.*,e.*
  2. from((
  3. c,b,a
  4. )
  5. leftjoindond.id=a.id
  6. )leftjoineone.id=b.id
  7. --phpfensi.com
  8. wherec.id=b.id
  9. andb.id=a.id

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

相关广告
  • MySQL left join 左连接详解介绍 MySQL left join 左连接详解介绍 MySQL left join 左连接详解介绍
相关阅读

MySQL left join 左连接详解介绍

2019/10/10 17:33:42 | 谷歌SEO算法 | 微信公众号