SQL中一共有多少种连接呢
今天咱们来一起捋一捋
咱别讲得太复杂
还是主要追求基础和思路
所以实例中咱都
只连接两个表
每个表中只有两列
三个表以上或多列的连接方法照实例类推
为了不乱先唠叨几句:
SQL的连接主要分为三大类1.内连接
2.外连接
3.交叉连接
开始表演:
手中有如下两个工作表
现在要通过各种方法连接两个工作表
sheet1表中有'书名'和'作者'两列
sheet2表中有'书名'和'人物'两列
1.内连接(inner join)
内连接一般称做等价连接
她负责连接出sheet1和sheet2表中书名相同的行
一般有两种写法:select * from [sheet1$] as a,[sheet2$] as b where a.书名=b.书名select * from [sheet1$] a inner join [sheet2$] as b on a.书名=b.书名
以上两种写法达到的效果是等同的如果在非Excel(其他数据库系统)中使用
请去掉表名两侧的中括号及美元符号
select * from sheet1 as a,sheet2 as b where a.书名=b.书名select * from sheet1 a inner join sheet2 as b on a.书名=b.书名
熟悉不熟悉
嗯,如果我的同事能看到这篇文章
那么我悄悄地告诉您
平时咱们用的所有拼接数据库表都是用的这种
来,老大,给拼个库,嘻嘻~~~
2.外连接
2.1 左连接(left outer join)
可简写为left join
她负责连接出sheet1中的所有行,并以sheet1表为基准(显示所有行),连接sheet2表书名相同的行,匹配不上的用空值代替
语句为:select * from [sheet1$] a left join [sheet2$] as b on a.书名=b.书名
如果在非Excel(其他数据库系统)中使用
请去掉表名两侧的中括号及美元符号
select * from sheet1 a left join sheet2 as b on a.书名=b.书名
2.2 右连接(right outer join)
可简写为right join
与2.1的左连接正好相反
她负责连接出sheet2中的所有行,并以sheet2表为基准(显示所有行),连接sheet1表书名相同的行,匹配不上的用空值代替
语句为:
select * from [sheet1$] a right join [sheet2$] as b on a.书名=b.书名
如果在非Excel(其他数据库系统)中使用
请去掉表名两侧的中括号及美元符号
select * from sheet1 a right join sheet2 as b on a.书名=b.书名
2.3 全连接(full outer join)
可简写为full join
她负责连接出sheet1和sheet2表中的所有行,任何表中书名无法匹配的行,用空值代替
需要说明的是
这个连接在Excel中不受支持
在其他数据库系统(如Foxpro、Mysql、sqlserver、Oracle)是没有问题的select * from sheet1 a full join sheet2 as b on a.书名=b.书名
但是,我们有变通的方法来达到全连接的效果
就是用左连接 右连接 联合查询的方法
语句为:select * from [sheet1$] a left join [sheet2$] as b on a.书名=b.书名
union
select * from [sheet1$] a right join [sheet2$] as b on a.书名=b.书名
3.交叉连接(cross join)
这个连接方式Excel也不支持,其他数据库系统中可以使用
交叉连接也称为笛卡尔积连接
她连接的是sheet1表中的每一行与sheet2表中的所有行的组合
她会返回一个非常庞大的查询
目前我还未发现这种连接方式会用作什么地方非Excel(其他数据库系统)中使用的语句为:
select * from [sheet1$] a cross join [sheet2$] as b order by a.书名
如果您喜欢这篇图文