sql join on 用法
A left join B 的连接的记录数与A表的记录数同 EG2∶有两表a和b,前两字段完全相同:(id int,name varchar(10)...) (1 row(s) affected)   id     name    id     name     (3 row(s) affected)   id     name    id     name     (3 row(s) affected)   id     name    id     name     (5 row(s) affected) 先是左边表的第1条记录 1   a    1    a --------------------------------------------- ---------------------------------------------- --------------------------------------- 外联接,外联接可以是左向外联接、右向外联接或完整外部联接。 LEFT JOIN 或 LEFT OUTER JOIN。  RIGHT JOIN 或 RIGHT OUTER JOIN。  FULL JOIN 或 FULL OUTER JOIN。  交叉联接。 
A right join B 的连接的记录数与B表的记录数同 
A left join B 等价B right join A 
table A:
Field_K, Field_A
1     a
3     b
4     ctable B:
Field_K, Field_B
1     x
2     y
4     zselect a.Field_K, a.Field_A, b.Field_K, b.Field_B from a left join b on a.Field_K=b.Field_K
Field_K  Field_A  Field_K  Field_B  
---------- ---------- ---------- ---------- 
1     a     1     x    
3     b     NULL   NULL
4     c     4     z
  也就是说left join 则连接左边表中所有记录都会出现,如果根据连接条件在table2中找不到相关记录,则显示为null。right join 则显示右边表中的全部记录。inner join 则只有符合条件的记录才会出现在结果集中。
 
id     name    
----------- ---------- 
1      a     
2      b     
3      c
以下的查询语句,你知道它的运行结果吗?:
1.
select * from a left join b on a.id=b.id where a.id=1
2.
select * from a left join b on a.id=b.id and a.id=1
3.
select * from a left join b on a.id=b.id and b.id=1
4.
select * from a left join b on a.id=1
结果:
id     name    id     name    
----------- ----------- ----------- ----------- 
1      10     1      10
----------- ----------- ----------- ----------- 
1      10     1      10
2      20     NULL    NULL
3      30     NULL    NULL
----------- ----------- ----------- ----------- 
1      10     1      10
2      20     NULL    NULL
3      30     NULL    NULL
----------- ----------- ----------- ----------- 
1      10     1      10
1      10     2      20
1      10     3      30
2      20     NULL    NULL
3      30     NULL    NULL
思路:
left join , 无非是左边表为基础, 扫描右边表匹配的记录
1  a  
按条件 a.id=1, 来扫描右边表的记录
对于右边表的每条记录, 显然 a.id=1 这个条件都是成立的, 所以第1条记录匹配后的结果是:
1   a    2    b
1   a    3    c
然后再扫描第2条记录
2   b
对于条件 a.id=1, 在边表中没有与之匹配的记录, 所以右边表为NULL
因此第2条记录匹配的结果为
2   b    NULL    NULL
第3条记录与第2条记录一样, 匹配的结果是
3   c    NULL    NULL
因此最终结果是5条记录
1   a    1    a
1   a    2    b
1   a    3    c
2   b    null   null
3   c    null   null
内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括相等联接和自然联接。 
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students 和 courses 表中学生标识号相同的所有行。
在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定:
左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。
编程语言
- ThinkPad 笔记本如何调节LCD屏幕亮度
 - Dreamweaver制作网页打开特效教程
 - Win10 Mobile 10586升级后无限重启怎么办 硬重启帮您
 - Win8系统提示音频设备有问题有一个或多个音频服
 - Xbox One版Win10首个预览版9月份发布
 - 如何在textarea文本输入区内实现换行
 - Win10 Build 9901系统更新 预览版新版本下载
 - McAfee Framework存在远程格式串处理漏洞
 - Win10家庭版今日(7月30)正式在中国官方商城开卖
 - Win10 Mobile预览版更新完10536.1000后才收到10536.100
 - Win10 RS2更新了什么-Win10 RS2最终版本号1704首曝
 - Windows7如何查看回收站对应的文件夹有哪些方法
 - Win10让Charms栏回归桌面的方法教程
 - 取消Windows XP系统开机启动画面的小技巧
 - win8系统怎么下载安装USB百兆网卡?
 - XP系统下磁盘空间变少了怎么办?XP系统磁盘空间