您的位置:首页 > 数据库 > MySQL

mysql中的自然联结、内联结、外联结

2017-12-15 10:44 169 查看


1.自然联结

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

文字没描述完了,可能有的同学还不是很理解其中的意思,下面上例子吧,更直观:
例如有表R和表S,表的内容如下:
R表                	       S表
A  B  C                      D  B  E
1  a  3                      2  c  7
2  b  6                      3  d  5
3  c  7                      1  a  3
现在R和S要进行自然联结
自然联结步骤
1.就是用R表中的每一项乘以S表中的每一项,得到的结果如下
A   B     C      D     B       E
1   a     3      2     c       7
1   a     3      3     d       5
1   a     3      1     a       3
2   b     6      2     c       7
2   b     6      3     d       5
2   b     6      1     a       3
3   c     7      2     c       7
3   c     7      3     d       5
3   c     7      1     a       3
2.过滤出R.B=S.B的行,结果如下
R.A    R.B     R.C       S.D     S.B    S.E
1       a       3         1       a       3
3       c       7         2       c       7
3.最后去除一个相同的列,即R.B和S.B其中一个,最后自然联结的结果为
A     B      C      D       E
1     a      3      1        3
3     c      7      2        7


2.内联结

表数据:例如有一下两个表,表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


1)左外联结

sql语句:select*from A  left join B   on A.aID = B.bID,这里我们把表A成为左表,表B为右表,
左外联结是以左表为基础的,即left join是以左表为基础的,在这个例子中,左表(表A)的记录全部会显示出来,而表B只显示符合过滤条件的那部分行

 2)右外联结

sql语句:select*from A  right join B   on A.aID = B.bID,这里我们把表A成为左表,表B为右表,
右外联结是以右表为基础的,即right join是以右表为基础的,在这个例子中,右表(表B)的记录全部会显示出来,而表A只显示符合过滤条件的那部分行

3.内联结

内联结最简单,两个表进行内联结,匹配符合过滤条件的行就可以了
例如:select * from A inner join B where A.a = B.a
把表A和表B中的列A相等的所有行都显示出来
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: