左连接与右连接以及查询时的条件

1:表结构

   test1                           test2

id    name                  id            temp

1     bai                   1             ming

2     bai                   2             jie

3     ming                  3             bai

4     yu                    4             zhang

5     zhang                 5             wan

6     wan                   6             yi

7     yi                    8             ai

 

2:语法

select *
from
(select * from test1) ttt1
left join
(select * from test2)ttt2
on ttt1.id = ttt2.id

and ttt2.id > 2 and ttt1.id >1

 

3:结果

id   name         id     temp
1    bai         NULL   NULL
2    bai         NULL   NULL
3    ming         3     bai
4    yu           4     zhang
5    zhang        5     wan
6    wan          6     yi 
7    yi          NULL   NULL

4:说明

对于示例两表的左连接由于test1为左表,所以结果中保存了test1的所有项

而根据条件ttt1.id = ttt2.id 我们将test2中id等于test1中id的项附加到ttt1后面

由于没有test2.id中没有id=7的项,所以第7行后两列数据为空。

根据条件ttt1.id > 1 说明 test1表中只提供id>1的项供test2进行匹配操作,所以第一行后两列为空

根据条件ttt2.id > 2 说明 test2只选择id>2的项,去与test1提供的,可以进行匹配的项来匹配,所以第二行尽管test1允许被匹配,但由于test2不提供此项来匹配,所以后两列数据仍然为空。

 

5:注意事项

左连接时必须是有on条件,否则会报错。

test1相当于主表,其中所有项在结果集中都会被保存。

所有针对test1所设的条件都相当于筛选提供被匹配的项

test2相当于辅表,其中只有符合所有匹配条件的项才会被保存,否则为null

所有针对test2所设置的条件都相当于选择项来与test1提供的匹配的项来匹配。

on 是在生成临时表时用于筛选条件,而where则是在生成后进行选择,不会保存test1中所有项

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值