sqlserver表连接详解

1 :inner join 内连接,满足条件时,查的出来
select * from Tab1 t1  inner join Tab2 t2 ON t1.B1=t2.id
结果为:
Id  Tname   B1  C1  Id  NJ
1	我是A	1	1	1	A
2	我是B	5	3	5	B
3	我是C	2	2	2	C
4	我是H	6	5	6	H


2: left join 左连接, 以左表为主,左表中的所有行都查出来。不匹配的,右表为null
select * from Tab1 t1 left join Tab2 t2 ON t1.B1=t2.id 
结果为:
Id  Tname   B1  C1  Id  NJ
1	我是A	1	1	1	A
2	我是B	5	3	5	B
3	我是C	2	2	2	C
4	我是H	6	5	6	H
9	我是J	11	12	NULL	NULL
10	我是G	15	18	NULL	NULL


3:right join 右链接,以右表为主,右表中的所有行都查出来,不匹配的,左表null
select * from Tab1 t1 right join Tab2 t2 ON t1.B1=t2.id 
结果为:
Id      Tname   B1     C1      Id  NJ
1	    我是A	1	   1	    1	A
3	    我是C	2	   2	    2	C
NULL	NULL	NULL	NULL	3	D
NULL	NULL	NULL	NULL	4	E
2	    我是B	5	    3	    5	B
4	    我是H	6	    5	    6	H
NULL	NULL	NULL	NULL	7	J
NULL	NULL	NULL	NULL	8	R
NULL	NULL	NULL	NULL	9	T



4: full join 全连接,两张表中行都会查出来,是并集的
select * from Tab1 t1 full join Tab2 t2 ON t1.B1=t2.id 
结果为:
Id      Tname   B1     C1      Id  NJ
1	    我是A	1	   1	   1	A
2	    我是B	5	    3	   5	B
3	    我是C	2	    2	   2	C
4	    我是H	6	    5	   6	H
9	    我是J	11	    12	  NULL	NULL
10	    我是G	15	    18	  NULL	NULL
NULL	NULL	NULL	NULL	3	D
NULL	NULL	NULL	NULL	4	E
NULL	NULL	NULL	NULL	7	J
NULL	NULL	NULL	NULL	8	R
NULL	NULL	NULL	NULL	9	T

5:多张表进行连接
select * from Tab1 t1 left join Tab2 t2 ON t1.B1=t2.id left join Tab3 t3 on t1.C1=t3.Id

6:表连接时,条件筛选ON与where的区别

ON:先把表连接匹配的结果的查出来,然后再筛选,不匹配的以null 显示
select * from Tab1 t1 left join Tab2 t2 ON t1.B1=t2.id and t1.B1=1
结果为:
ID  Tname   B1  C1  Id       NJ
1	我是A	1	1	1	     A
2	我是B	5	3	NULL	NULL
3	我是C	2	2	NULL	NULL
4	我是H	6	5	NULL	NULL

where: 先把表连接匹配的结果查出来,然后再筛选,不匹配的不显示
结果为:
ID  Tname   B1  C1  Id   NJ
1	我是A	1	1	1	A



7:sql中from 多张表,与inner join 多张表的区别?
结果是:
从结果上看一样。但是从实现上看,多个from是迪卡尔集,再筛选,效率是O(n^2),很差。
join是先做hash,再匹配,效率是O(logN),很好。所以推荐前者。


8:sql中表连接与update 的使用
第一种方法:update t1 set t1.Tname='卡西欧' from Tab1 t1,Tab2 t2 where t1.B1=t2.Id  and t2.Id=1
第二种方法: update Tab1 set Tname='浪琴'  from Tab1 inner join Tab2 ON Tab1.B1=Tab2.Id where Tab2.NJ='A'


 









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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值