关于数据库的内外连接、左右连接查询浅谈

数据库的连接查询

数据库的连接查询包括两大类:

外连接和内连接。

一、外连接 

  1. 左连接
    以左边表为主,左表有的记录全部检索出来,符合条件的右表的记录才会检索出来;右表不对应左表的数据不在结果集中显示;而右表没有和左表对应的数据时,结果集中右表部分以空值代替。
    代码实例如下:
     
    select * from user left join account on user.user_id=account.user_id;


    左连接的重点在于使用左连接之后,左表中的数据会全部显示出来,而右表中的数据只有符合where条件的数据才会显示,而左表没有和右表对应上的数据就会使用null来占位,因为左表数据必须全部显示出来,结果集中又必须同时显示两张表的属性,所以只能用null来代替。

  2. 右连接
    以右边表为主,右表有的记录全部检索出来,符合条件的左表的记录才会检索出来;左表不对应右表的数据不在结果集中显示;而左表没有和右表对应的数据时,结果集中左表部分以空值代替。
    右连接的实例如下:
    select * from user right join account on user.user_id=account.user_id;

    仔细观察这两张结果表,就会发现左右连接的不同之处。
    提示:观察user_name的位置(不变)
     
  3. 全连接
    返回符合条件的所有表的记录,没有与之匹配的,用null表示(结果是左连接和右连接的并集)。

二、内连接 

比较官方的定义:内连接是从结果表中删除与其他被连接表中没有匹配行的所有行,所以内连接可能会丢失信息。

比较简单的定义:内连接是左右连接结果集中删除包含null的记录,并把删除后的结果集进行合并,再进行distinct。

内连接的一个实例:

select * from user inner join account on user.user_id=account.user_id;


内连接的另一个实例:

select * from account inner join user on user.user_id=account.user_id;

 为什么会贴出来两个实例呢?

仔细观察两张结果集表,不难发现,两张表的数据顺序不一致,再看SQL语句,我们发现user表和account表的顺序不一样。

两张结果集顺序不一致的原因,我想不用我多言了吧?类比左右连接的结果集顺序。

其实这个在实际开发中并没有太大的意义,顺序不一致不影响我们去结果集中取数据,所以不必纠结谁先谁后。

三、内外连接的不同

 

  • 空值不一样:
  1. 左连接是右表部分为空;右表没有和左表对应的数据时,结果集中右表部分以空值代替。
  2. 右连接是左表部分为空;左表没有和右表对应的数据时,结果集中左表部分以空值代替。
  3. 内连接不会出现空值情况。
  • 主表不一样:
  1. 左连接是以左表为主表,去对应匹配右表,匹配不上的用空值填补占位;
  2. 右连接是以右表为主表,去对应匹配左表,匹配不上的用空值填补占位;
  3. 内连接是以关键词左边的表为主表显示数据,但左右表必须对应。

好啦,数据库内外连接的浅析就到这里啦,小编要继续去码代码啦。

拜拜~~~

 

 

user表

account表


SQL语句就不帖啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值