首页 > 代码库 > 内连接和外连接

内连接和外连接

--------------------------------------------------------------------
内连接
--------------------------------------------------------------------
内连接就是两张表都只显示符合连接条件的行。
举例1:
假设有两个Excel报表:出货表和产品表
出货表:
日期 客户 产品编码 数量
2003-10-20 永华公司 1001 10
2003-10-21 风貌公司 1002 20
产品表:
产品编码 产品名称 生产厂家
1001 PC机 创成公司
1002 打印机 风华公司
内连接条件为:出货表.产品编码=产品表.产品编码
内连接的结果集为:
日期 客户 产品编号 数量 产品名称 生产厂家
2003-10-20 永华公司 1001 10 PC机 创成公司
2003-10-21 风貌公司 1002 20 打印机 风华公司

举例2:
Book表
BookIdBookNameStudentId
1《培训》3
2《成功秘诀》5
3《红楼梦》3
4《西厢记》2
5《水浒传》6
6《三国演义》10

Student表
StudentIdStudentName
1张三
2李四
3关羽
4张飞
5黄聪
6李逵
7赵娜
8王敏
NULLNULL

内连接查询:

select from [Book] as b,[Student] as s where b.StudentId=s.StudentId

 等价于如下(也可以不要关键字inner,此为系统默认)

select from [Book] as b inner join [Student] as s ON b.StudentId=s.StudentId


内连接查询结果:
BookIdBookNameStudentIdStudentName
4《西厢记》2李四
1《培训》3关羽
3《红楼梦》3关羽
2《成功秘诀》5黄聪
5《水浒传》6李逵


-----------------------------------------------------------------------
外连接
-----------------------------------------------------------------------
左外连接查询:

select from [Book] as b left join [Student] as s ON b.StudentId=s.StudentId


查询结果:

BookIdBookNameStudentIdStudentIdStudentName
1《培训》33关羽
2《成功秘诀》55黄聪
3《红楼梦》33关羽
4《西厢记》22李四
5《水浒传》66李逵
6《三国演义》10NULLNULL

执行过程:

即以from [Book] left join [Student]Book表为基准,即以Book(b)b.StudentId为基准。遍历Student(s)中与之匹配的b.StudentId。若b.StudentId含有s.StudentId匹配项,则进行拼接,然后遍历Student表的下一条s.StudentId,当查询完毕则进入下一条b.StudentId。若b.StudentId没有相应s.StudentId匹配项时,则显示左表的项,拼接右表的项显示为NULL