SQL之连接

这里介绍的连接有:

  • 交叉连接。
  • 内连接。
  • 外连接。
  • 自连接

交叉连接:

    这应该是最简单的一种连接方式,但是就我目前经验来说使用到的地方很少。基本格式是:  

select *(或者其他的两个表内的数据) from tableA join tableB;
    完全只是在两个表之间加入了一个join的关键字,所产生的效果,恩,你可以想象一下多项式乘法,乘数每一项乘以被乘数的每一项得到一个新的结果,而放在数据库中就是A表的每一项配上B表的每项重复来一遍,大家可以找两张表试一试。


内连接:

    先来个例子放着:

   

    可以看出其中的关键字是inner joinon所带的语句,其中inner是指明了连接类型为内连接,on子句是描述连接的条件。

    内连接是值A表中的某一列(on子句中)存在某个值与B表中的某一列(on子句中)存在某个值关系成立,则结果集中包含有这个值,否则则排除这个值,这也是我们最为常用的一种连接类型。

    on子句中如果两个表的列名相同可以使用using子句代替,不过不推荐:

select e.fname,e.lname,d.name from employee e inner join department d using(dept_id);
    当你需要连接三个或更多表时:

   

    有点像子查询。


自连接(其实也是内连接):

    我们可以对表自身进行连接,这在某些情况下可以能需要,例如(employee表包含了一个指向自身的外键,即指向本表主键的列(superior_emp_id)。该列指向了雇员的主管(除非该雇员属于领导层,这种情况下该列应为null)。使用自连接,可以在列出每个雇员姓名的同时列出主管的姓名):

   


外连接:

    如果你想要包含某个表的所有行,而不考虑每行是否在另一个表中存在匹配,那么可以使用外连接。

    先介绍外连接的几种类型:

  • 左外连接
  • 右外连接
  • 三路外连接
  • 自外连接

    左外链接:

    例子:

   

    关键字left指出连接左边的表决定结果集的行数,而右边的只负责提过与之匹配的列值。

    右外连接与之相反:

   


     三路外连接:

     将一个表与其他两个表进行外连接。如:

    


     自外连接:

     跟自连接类似,可以补充上面自连接,加入主管自身:

    

     Michael Smith地位最高,没有主管这玩意的存在。这是作为左连接的情况,下面让我们看看右连接的情况:

   

    这里查询除了显示每个主管外,还有其管理的雇员集合,因此,Michael Smith作为Susan Barker和Robert Tyler的主管出现了两次,而Susan Barker显示了一次,但她不是任何人的主管(该行第一二列显示为null)。所以18个雇员在第三列跟第四列出现至少一次,其中管理雇员超过一人的会出现不止一次,所以该结果集明显大于前一个。所以,使用外连接时候确定使用左外连接还是右外连接是很重要的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值