Mysql学习之路05-连接查询

来源:互联网 发布:centos 挂载u盘 编辑:程序博客网 时间:2024/05/29 17:34
转载于http://blog.csdn.net/pacosonswjtu/article/details/51396622
【0】README
0.1)本文旨在reviewMySQL的自然联结+外部联结(左外连接,右外连接)+内部联结 的相关知识;

【1】自然联结
1)自然联结定义:无论何时对表进行联结,应该至少有一个列出现不止一个表中(被联结的列)。标准的联结返回所有数据,甚至相同的列多次出现。自然联结排除多次出现,使每个列只返回一次;(干货——自然联结的作用就是排除多次出现,使每个列只返回一次)

看个荔枝)
自然连接怎么连接?
R表                S表A  B  C                     D  B  E1  a  3                      2  c  72  b  6                      3  d  53  c  7                      1  a  3    <span style="font-family: SimSun; background-color: rgb(255, 255, 255);">   </span>
step1)自然连接是第一步R×S结果是(
就是用R表中的每一项乘以S表中的每一项):
A   B     C      D     B       E1   a     3      2     c       71   a     3      3     d       51   a     3      1     a       32   b     6      2     c       72   b     6      3     d       52   b     6      1     a       33   c     7      2     c       73   c     7      3     d       5 3   c     7      1     a       3
step2)选择R.B=S.B的记录:
R.A    R.B     R.C       S.D     S.B    S.E1       a       3         1       a       3 3       c       7         2       c       7
step3)然后去掉相同且值也相同的B属性,最后R∞S的值为:
   A     B      C      D       E   1     a      3      1        3   3     c      7      2        7


以下部分文字描述转自:http://www.cnblogs.com/sysu-blackbear/p/4157295.html
【supplement】测试前的准备
1)假设有A,B两个表:
// 表A记录如下aID     aNum  1     a2010  2     a2011  3     a2012  4     a2012  5     a2013  // 表B记录如下:  bID     bName  1     b2010  2     b2011  3     b2012  4     b2013  8     b2014 

【2】left join (左外联结)sql语句如下: 
select*from A  left join B   on A.aID = B.bID   
对以上结果的分析(Analysis)
A1)left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.  
A2)换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID). B表记录不足的地方均为NULL;

【3】right join  (右外联结)
 
【4】内联结
sql语句如下: select*from A  innerjoin B   on A.aID = B.bID  
对以上结果的分析(Analysis):
A1)很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.  
A2)LEFT JOIN操作用于在任何的 FROM 子句中,组合来源表的记录。使用 LEFTJOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。    
A3)语法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2    
A3.1)说明:table1, table2参数用于指定要将记录组合的表的名称。  
A3.2)field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。  
A3.3)compopr参数指定关系比较运算符:"=", "<", ">", "<=", ">=" 或 "<>"。  
A3.4)如果在INNER JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误。 


Attention)left和right是外连接,Inner是内连接。(left join=left outer join,right join=right outer join)


原创粉丝点击