不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
SQL--JOIN之完全用法
编辑:dnawo 日期:2007-03-12
SQL中大概有这么几种JOIN:cross join、inner join、left outer join(left join)、right outer join(right join)和full outer join(full join)。
首先都是基于cross join(笛卡尔乘积),然后是inner join,在笛卡尔乘积的结果集中去掉不符合连接条件的行。
left outer join 是在inner join的结果集上加上左表中没被选上的行,行的右表部分每个字段都用NUll填充。
right outer join 是在inner join的结果集上加上右表中没被选上的行,行的左表部分全用NULL填充。
full outer join 是left outer join和right outer join的并集。
注:笛卡尔(Descartes)乘积又叫直积。设A、B是任意两个集合,在集合A中任意趣一个元素x,在集合B中任意取一个元素y,组成一个有序对(x,y),把这样的有序对作为新的元素,他们的全体组成的集合称为集合A和集合B的直积,记为A×B,即A×B={(x,y)|x∈A且y∈B}。
假设有如下两个表:
Table1:
id name total
----- ----- -----
1 aaa 10
2 bbb 20
Table2:
id name total
----- ----- -----
1 aaa 30
2 ccc 10
下边我们来看看各种JOIN的结果:
1.cross join
Select Table1.name,Table1.total,Table2.name,Table2.total From Table1 cross join Table2
结果集:
name total name total
----- ----- ----- -----
aaa 40 aaa 30
bbb 20 aaa 30
aaa 40 ccc 10
bbb 20 ccc 10
2.inner join
Select Table1.name,Table1.total,Table2.name,Table2.total From Table1 inner join Table2 on Table1.name=Table2.name
结果集:
name total name total
----- ----- ----- -----
aaa 40 aaa 30
扩展:full join为全集,取inner join的补集
Select Table1.name,Table1.total,Table2.name,Table2.total From Table1 full join Table2 on Table1.name=Table2.name Where Table1.name is null or Table2.name is null
结果集:
name total name total
----- ----- ----- -----
NULL NULL ccc 10
bbb 20 NULL NULL
3.full join
Select Table1.name,Table1.total,Table2.name,Table2.total From Table1 full join Table2 on Table1.name=Table2.name
结果集:
name total name total
----- ----- ----- -----
aaa 40 aaa 30
NULL NULL ccc 10
bbb 20 NULL NULL
4.left join
Select Table1.name,Table1.total,Table2.name,Table2.total From Table1 left join Table2 on Table1.name=Table2.name
结果集:
name total name total
----- ----- ----- -----
aaa 40 aaa 30
bbb 20 NULL NULL
扩展:left join为全集,取inner join的补集
Select Table1.name,Table1.total,Table2.name,Table2.total From Table1 left join Table2 on Table1.name=Table2.name Where Table2.name is null
结果集:
name total name total
----- ----- ----- -----
bbb 20 NULL NULL
5.right join
Select Table1.name,Table1.total,Table2.name,Table2.total From Table1 right join Table2 on Table1.name=Table2.name
结果集:
name total name total
----- ----- ----- -----
aaa 40 aaa 30
NULL NULL ccc 10
扩展:right join为全集,取inner join的补集
Select Table1.name,Table1.total,Table2.name,Table2.total From Table1 right join Table2 on Table1.name=Table2.name Where Table1.name is null
结果集:
name total name total
----- ----- ----- -----
NULL NULL ccc 10
2008-09-11补:三表联合查询
Select TOP 1 A.SoftName,A.SoftImage,B.DownFileName,C.DownloadPath FROM (NC_SoftList A INNER JOIN NC_DownAddress B On A.SoftId=B.SoftId) INNER JOIN NC_DownServer C ON B.DownId=C.RootId Where C.depth=1 AND A.SoftId=2
注:在ACCESS中上边括号必需的,而在SQL Server中可有可无!
首先都是基于cross join(笛卡尔乘积),然后是inner join,在笛卡尔乘积的结果集中去掉不符合连接条件的行。
left outer join 是在inner join的结果集上加上左表中没被选上的行,行的右表部分每个字段都用NUll填充。
right outer join 是在inner join的结果集上加上右表中没被选上的行,行的左表部分全用NULL填充。
full outer join 是left outer join和right outer join的并集。
注:笛卡尔(Descartes)乘积又叫直积。设A、B是任意两个集合,在集合A中任意趣一个元素x,在集合B中任意取一个元素y,组成一个有序对(x,y),把这样的有序对作为新的元素,他们的全体组成的集合称为集合A和集合B的直积,记为A×B,即A×B={(x,y)|x∈A且y∈B}。
假设有如下两个表:
Table1:
id name total
----- ----- -----
1 aaa 10
2 bbb 20
Table2:
id name total
----- ----- -----
1 aaa 30
2 ccc 10
下边我们来看看各种JOIN的结果:
1.cross join
Select Table1.name,Table1.total,Table2.name,Table2.total From Table1 cross join Table2
结果集:
name total name total
----- ----- ----- -----
aaa 40 aaa 30
bbb 20 aaa 30
aaa 40 ccc 10
bbb 20 ccc 10
2.inner join
Select Table1.name,Table1.total,Table2.name,Table2.total From Table1 inner join Table2 on Table1.name=Table2.name
结果集:
name total name total
----- ----- ----- -----
aaa 40 aaa 30
扩展:full join为全集,取inner join的补集
Select Table1.name,Table1.total,Table2.name,Table2.total From Table1 full join Table2 on Table1.name=Table2.name Where Table1.name is null or Table2.name is null
结果集:
name total name total
----- ----- ----- -----
NULL NULL ccc 10
bbb 20 NULL NULL
3.full join
Select Table1.name,Table1.total,Table2.name,Table2.total From Table1 full join Table2 on Table1.name=Table2.name
结果集:
name total name total
----- ----- ----- -----
aaa 40 aaa 30
NULL NULL ccc 10
bbb 20 NULL NULL
4.left join
Select Table1.name,Table1.total,Table2.name,Table2.total From Table1 left join Table2 on Table1.name=Table2.name
结果集:
name total name total
----- ----- ----- -----
aaa 40 aaa 30
bbb 20 NULL NULL
扩展:left join为全集,取inner join的补集
Select Table1.name,Table1.total,Table2.name,Table2.total From Table1 left join Table2 on Table1.name=Table2.name Where Table2.name is null
结果集:
name total name total
----- ----- ----- -----
bbb 20 NULL NULL
5.right join
Select Table1.name,Table1.total,Table2.name,Table2.total From Table1 right join Table2 on Table1.name=Table2.name
结果集:
name total name total
----- ----- ----- -----
aaa 40 aaa 30
NULL NULL ccc 10
扩展:right join为全集,取inner join的补集
Select Table1.name,Table1.total,Table2.name,Table2.total From Table1 right join Table2 on Table1.name=Table2.name Where Table1.name is null
结果集:
name total name total
----- ----- ----- -----
NULL NULL ccc 10
2008-09-11补:三表联合查询
Select TOP 1 A.SoftName,A.SoftImage,B.DownFileName,C.DownloadPath FROM (NC_SoftList A INNER JOIN NC_DownAddress B On A.SoftId=B.SoftId) INNER JOIN NC_DownServer C ON B.DownId=C.RootId Where C.depth=1 AND A.SoftId=2
注:在ACCESS中上边括号必需的,而在SQL Server中可有可无!
评论: 1 | 引用: 0 | 查看次数: 6940
发表评论
请登录后再发表评论!