join left on多张表_mysql left join 左连接查询关联n多张表

left join 左连接即以左表为基准,显示坐标所有的行,右表与左表关联的数据会显示,不关联的则不显示。关键字为left join on。

**基本用法如下:

select table a left join table b on a.id = b.ta_id**

注意:

其中on后面关联的字段应该是同一字段(两表关联的外键)

由于以左表为基准,左表一条记录如果对应右表多条记录,那查出的数据中右表的数据也只显示一条,如果要都显示,可以用group_contact()将字段用逗号隔开显示在一条记录上。所以右表不管有几张,如果和左表都是一对一关系,则没问题,存在一对多关系时,需要一定的处理。

1、内连接:将两个表中存在连结关系的字段符合连接条件的记录形成记录集

SELECTA. NAME,

B. NAMEFROMAINNER JOIN B ON A.id = B.id

SELECTA. NAME,

B. NAMEFROMA,

BWHEREA.id= B.id

结果是一样的(内连接的inner关键字可省略);

2、外连接:分为左外连接和右外连接

左连接A、B表结果包括A的全部记录和符合条件的B的记录。

右联结A、B表的结果和左联结B、A的结果是一样的,也就是说:

SELECTA. NAME,

B. NAMEFROMALEFT JOIN B ON A.id = B.id

SELECTA. NAME,

B. NAMEFROMBRIGHT JOIN A ON B.id - A.id

执行后的结果是一样的。

3、全联结

4、无联结

5、三表联结查询

SELECTusername,

psw,

gname,

telFROM(

t1LEFT JOIN t2 ON t1.t1_id =t2.t1_id

)LEFT JOIN t3 ON t1.t1_id = t3.t1_id

6、终极的三表联结查询

items:商品表,item_visit_stats:商品访问表,item_trade_stats:商品销售表

/*Source Server : localhost

Source Server Version : 50505

Source Host : localhost:3306

Source Database : test

Target Server Type : MYSQL

Target Server Version : 50505

File Encoding : 65001

Date: 2018-09-14 19:00:46*/

SET FOREIGN_KEY_CHECKS=0;--------------------------------Table structure for items------------------------------

DROP TABLE IF EXISTS`items`;CREATE TABLE`items` (

`id`bigint(20) unsigned NOT NULLAUTO_INCREMENT,

`title`varchar(255) DEFAULT '',

`price`varchar(255) DEFAULT '',

`nick`varchar(255) DEFAULT '',PRIMARY KEY(`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';--------------------------------Table structure for item_trade_stats------------------------------

DROP TABLE IF EXISTS`item_trade_stats`;CREATE TABLE`item_trade_stats` (

`id`bigint(20) unsigned NOT NULLAUTO_INCREMENT,

`buyer_num`int(11) unsigned DEFAULT '0',

`item_num`int(11) unsigned DEFAULT '0',

`seller_nick`varchar(255) DEFAULT '',

`business_day`datetime DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY(`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品销售表';--------------------------------Table structure for item_visit_stats------------------------------

DROP TABLE IF EXISTS`item_visit_stats`;CREATE TABLE`item_visit_stats` (

`id`bigint(20) unsigned NOT NULLAUTO_INCREMENT,

`user_visits`varchar(255) NOT NULL,

`business_day`datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY(`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品访问表';

SELECTi.id,

i.title,SUM(ivs.user_visits) ASuv,

its.item_num* i.price ASturnoverFROM(

itemsASiRIGHT JOIN item_visit_stats AS ivs ON i.id =ivs.id

)LEFT JOIN(SELECTid,SUM(item_num) ASitem_numFROMitem_trade_statsWHEREseller_nick="XXXX"GROUP BYid

)AS its ON its.id =ivs.idWHEREi.nick="XXXX"GROUP BYi.idORDER BYuvDESC

https://blog.csdn.net/chentaocba/article/details/7697825

写的时候从外层往里写,一层一层left join,才不容易出错。

http://www.cnblogs.com/amyStart/p/5965472.html

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值