mysql statment join


原文链接: mysql statment join

关键字: on 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的"临时表",然后再将这张临时表返回给用户。

多表级联查询(left join)

实例如下: 

SELECT a.id AS ID,a.customer_key AS '推广员id',a.amount AS '金额', d.cooperation_code AS '合作点', e.total_amount AS '总收入',IF(e.amount='0' || e.amount is null,'已提现','未提现') AS '余额状态' FROM
rf_settlement_stat AS a
LEFT JOIN rf_promoter AS b ON a.customer_key = b.promoter_id
LEFT JOIN rf_balance AS e ON a.customer_key = e.customer_key
LEFT JOIN ql_cooperation_staff AS c ON c.jd_account = b.pin
LEFT JOIN ql_cooperation AS d ON d.cooperation_code = c.cooperation_code
WHERE a.tax_status='fini'
ORDER BY a.id ASC;

实例中级联了五个数据库表的查询,返回的数据中不管on条件是否满足,都是返回rf_settlement_stat表中的数据,最后通过where后的条件进行过滤后返回给用户;

其中查询的数据可通过if做条件判断转换展示数据;

 
级联查询的的链接方法:

join、inner join:返回的是级联表均满足on条件的记录;

left join、left outer join:返回的是满足左级联表的所有数据,和满足条件的右级联表的数据(如果右级联表为空则填充值为null);

right join、right outer join:和以上的条件查询相反,返回的是所有满足右级联表中的所有数据,和满足条件的左级联表数据(如果左级联表没有对应满足的则填充值为null);

on and和on where的区别用法:

1、left join查询返回所有左边数据,并返回满足ON后面条件的右表的数据,如果没有则右表数据返回null(on后面的条件包括and条件),此时on对左表没有作用只对右表过滤,如果右边不满足则返回null;where可对左表和右表进行过滤;

2、right join 同left join,主要其中是以右表为主;
3、inner join是返回左表和右表都要满足ON后面条件的记录;

`