SQL 连接 JOIN 例解。(左连接,右连接,全连接,内连接,交叉连接,自连接)

SQL 连接 JOIN 例解。(左连接,右连接,全连接,内连接,交叉连接,自连接)

最近公司在招人,同事问了几个自认为数据库可以的应聘者关于库连接的问题,回答不尽理想~
现在在这写写关于它们的作用
假设有如下表:


一个为投票主表,一个为投票者信息表~记录投票人IP及对应投票类型,左右连接实际说是我们联合查询的结果以哪个表为准~
1:如右接连 right join 或 right outer join:

我们以右边voter表为准,则左表(voteMaster)中的记录只有当其ID在右边(voter)中存在时才会显示出来,如上图,左边中ID为3.4.5.6因为这些ID右表中没有相应记录,所以没有显示!
2:因此我们自然能理解左连接 left join 或者 left outer join

可见,现在右边中ID在中存在时才会显示,当右边中没有相应数据时则用NULL代替!
3:全连接 full join 或者 full outer join,为二个表中的数据都出来,这里演示效果与上一样!
4:内连接 inner join 或者 join;它为返回字段ID同时存在于表voteMaster 和 voter中的记录

5:交叉连接(完全连接)cross join 不带 where 条件的
没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。(table1和table2交叉连接产生6*3=18条记录)

等价 select vm.id,vm.voteTitle,vt.ip from voteMaster as vm,voter as vt

6:自连接。在这里我用我前段时间一个电力项目中的例子(改造过)
如下表:

这是一个部门表,里面存放了部门及其上级部门,但都放在同一张表中,我们假设现在需要用SQL查询出各部门及其上级部门!就如何做,
当然,不用自连接也一样,可以如下:

我们达到预期目的!在这个查询中使用了一个子查询完成对上级部门名的查询,如果使用自连接,那么结构上感觉会清晰很多。

是不是也同样完成了功能呢,这里除了使用自连接外,还使用了左连接,因为省电力没有上级部门,他是老大,如果使用内连接,就会把这条记录过滤掉,因为没有和他匹配的上级部门。
自连接用的比较多的就是对权形结构的查询!类似上表!
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内连接、自连接、外连接交叉连接SQL中用于连接多张表的不同方式。它们之间的区别如下: 1. 内连接(INNER JOIN):内连接返回两个表之间匹配的行,即只返回满足连接条件的行。内连接使用JOIN关键字或逗号来指定连接条件。如果两个表中的列值匹配,则被选中并返回。内连接只返回匹配的结果。 2. 自连接(SELF JOIN):自连接是指将同一张表当做两个不同的表进行连接操作。它通常用于在一个表中比较不同行之间的数据。自连接可以通过给表起别名来实现,然后使用别名来引用不同的表实例。 3. 外连接(OUTER JOIN):外连接返回两个表之间匹配和不匹配的行。外连接分为左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)和全外连接(FULL JOIN)。左外连接返回左表中所有的行,以及与右表匹配的行;右外连接返回右表中所有的行,以及与左表匹配的行;全外连接返回两个表中所有的行。 4. 交叉连接(CROSS JOIN):交叉连接是通过将一个表的每一行与另一个表的每一行进行组合,返回所有可能的组合结果。它没有使用任何连接条件。交叉连接会产生一个结果集,其行数等于两个表的行数的乘积。 总结来说,内连接返回匹配的结果,外连接返回匹配和不匹配的结果,自连接是用于同一张表的连接操作,而交叉连接返回两个表的所有组合结果。根据具体的需求和数据关系,选择适当的连接方式来获取所需的数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值