sql 语句 多表查询 left right on where

1.总结

A INNER JOIN B ON……:内联操作,将符合ON条件的A表和B表结果均搜索出来,然后合并为一个结果集。
A LEFT JOIN B ON……:左联操作,左联顾名思义是,将符合ON条件的B表结果搜索出来,
然后左联到A表上,然后将合并后的A表输出。

A RIGHT JOIN B ON……:右联操作,右联顾名思义是,将符合ON条件的A表结果搜索出来,
然后右联到B表上,然后将合并后的B表输出。

2.例子

这个博客,的例子不错
不错的例子

下面的小例子,引用的”Sql语句用left join 解决多表关联问题(关联套关联,例子和源码)

表1:—————————— 【人事表】
表名:【Man】
字段: Man_Id,Man_Name,Zw_Id
1 貂蝉 2
2 曹操 1

表2:—————————— 【职务表】
表名:【Zw】
字段: Zw_Id,Zw_Name
1 校长
2 班主任

表3:—————————— 【工资表】
表名:【GZ】
字段: Man_Id,Money,Sex_Id
1 2500 1
2 4000 2

表3:—————————— 【性别表】
表名:【xb】
字段: Sex_Id,Sex_Name
1 女
2 男

需要的——————————- 【查询结果】:

 Man_Id,Man_Name,sex_name,Zw_Name,Money
   1      貂蝉     女      班主任   2500
   2      曹操     男       校长    4000

方法一(推荐):

[sql] view plain copy

select a.man_id,man_name,d.sex_name,zw_name,c.money  
 from man as a   
      left join zw as b on a.zw_id=b.zw_id   
      left join gz as c on a.man_id=c.man_id   
      left join xb as d on c.sex_id=d.sex_id  

方法二:

[sql] view plain copy

select Man_Id,Man_Name,sex_name,Zw_Name,Money from  
(  
       select  a.Man_Id,Man_Name,b.Zw_Id,Zw_Name,Money,Sex_Id  from  [Man] a   
               left join  [Zw] b on a.Zw_Id=b.Zw_Id  
               left join  [Gz] c on a.Man_Id=c.Man_Id  
)t  
left join xb m on m.Sex_Id=t.Sex_Id  

方法三:

[sql] view plain copy

select man.man_id,man.man_name,xb.sex_name,zw_name,gz.money  
 from man   
      left join zw on man.zw_id=zw.zw_id   
      left join gz on man.man_id=gz.man_id   
      left join xb on gz.sex_id=xb.sex_id     

3. on where 位置很重要

select * from

td
left join (
select case_id as sup_case_id , count(*) supervise_number from
td_kcdc_case_sup_info
group by case_id
) sup
on
sup.sup_case_id = td.case_id
where 1=1 /不能去掉, 否则认为and 后的条件为 联合查询时的条件, 不能起过滤作用,由于left join因此td表中记录将全部查出来/

and td.con = ‘xxxx’

总结:

  1. 对于left join,不管on后面跟什么条件,左表的数据全部查出来,因此要想过滤需把条件放到where后面

  2. 对于inner join,满足on后面的条件表的数据才能查出,可以起到过滤作用。也可以把条件放到where后面。

参考:
JOIN关联表中ON,WHERE后面跟条件的区别

http://wenku.baidu.com/view/fa341ad4c1c708a1284a4450.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不对法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值