-------------------------------------------------------------------- 内连接 -------------------------------------------------------------------- 内连接就是两张表都只显示符合连接条件的行。
举例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表
| BookId |
BookName |
StudentId |
| 1 |
《培训》 |
3 |
| 2 |
《成功秘诀》 |
5 |
| 3 |
《红楼梦》 |
3 |
| 4 |
《西厢记》 |
2 |
| 5 |
《水浒传》 |
6 |
| 6 |
《三国演义》 |
10 |
Student表
| StudentId |
StudentName |
| 1 |
张三 |
| 2 |
李四 |
| 3 |
关羽 |
| 4 |
张飞 |
| 5 |
黄聪 |
| 6 |
李逵 |
| 7 |
赵娜 |
| 8 |
王敏 |
| NULL |
NULL |
内连接查询:
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
内连接查询结果:
| BookId |
BookName |
StudentId |
StudentName |
| 4 |
《西厢记》 |
2 |
李四 |
| 1 |
《培训》 |
3 |
关羽 |
| 3 |
《红楼梦》 |
3 |
关羽 |
| 2 |
《成功秘诀》 |
5 |
黄聪 |
----------------------------------------------------------------------- 外连接 ----------------------------------------------------------------------- 左外连接查询:
select * from [Book] as b left join [Student] as s ON b.StudentId=s.StudentId
查询结果:
| BookId |
BookName |
StudentId |
StudentId |
StudentName |
| 1 |
《培训》 |
3 |
3 |
关羽 |
| 2 |
《成功秘诀》 |
5 |
5 |
黄聪 |
| 3 |
《红楼梦》 |
3 |
3 |
关羽 |
| 4 |
《西厢记》 |
2 |
2 |
李四 |
| 5 |
《水浒传》 |
6 |
6 |
李逵 |
| 6 |
《三国演义》 |
10 |
NULL |
NULL |
?
执行过程:
即以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。