数据库的内连接和外连接

这里举一个例子来介绍一下,看起来更容易理解。首先建立三个表:

表a

 

表b

 

表c

数据库的内连接主要分为以下三种:

1、等值连接:在连接条件中使用等号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

或者     

2、自然连接:在连接条件中使用等号(=)运算符比较被连接列的列值,但它会删除连接表中的重复数据列。

SELECT * FROM tab_a NATURAL JOIN tab_b

特别注意一下:

①注意自然连接的时候,必须有相同名称的属性类,查询的结果会去除相同的属性列,如上图的查询结果。

②如果两个这个两个属性列的类型不同,则查询的结果会保存为前面那个表的属性的类型。例如现在把a表的userid改成int类型的,b表的userid是varchar类型的,则查询结果如下所示:

③我试了一下,当自然连接的两个表没有共同的属性时会产生如下的结果。如下所示:

无共同属性的自然连接

不等值连接只是改变查询条件,不做重点介绍。


外连接分:左外连接、右外连接、全外连接

1、左外连接(LEFT  JOIN或LEFT OUTER JOIN )

左外连接的结果包括  LEFT OUTER子句中指定的左表的所有行。如果左表的某行在右表中没有匹配行,则在相关联的结果中右表对应行为空值。

2、右外连接(RIGHT  JOIN 或 RIGHT  OUTER  JOIN )    

右外连接是左外连接的反向连接。查询结果与左外连接正好相反。   

3、全外连接(FULL  JOIN 或 FULL OUTER JOIN)

全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上。但是MySQL目前应该不支持此种方式,我在测试的时候出现下面的情况。如果去掉on条件语句的话,是有查询结果的。

交叉连接

交叉连接又称笛卡尔连接(cartesian join)。如果表a和表b是两个集合的话,交叉连接即返回这两个集合的笛卡尔积。

最后附上一张网上找到的图,感觉对这些语句的解释很到位,可以借鉴一下。

最后说一点,本文使用的数据库为 MySQL 5.6

  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值