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'
sqlserver表连接详解
于 2020-09-30 15:39:50 首次发布