SQL中,表之间的左联和右联是什么意思

首先来看张图片:

定义:

左联:首先取出A表中所有数据,然后再加上A、B表通过关联字段key查询到的数据

右联:首先取出B表中所有数据,然后再加上A、B表通过关联字段key查询到的数据

内联:查询A、B表通过关联字段key查询到的数据

非关联字段key的数据:当A表为主表时,在B表中该关联字段key为空值的数据为非关联字段

 

表关联是在SQL中非常常用的东西

join全连接:查找左表(主表)和右表(子表)都存在的数据

left join左联接:查找左表(主表)为查找全集,右表(子表)存在的关联出来,不存在的为NULL。

right join右连接:刚好和left join相反

full join全集关联:相当于把left join 和right join 综合起来,即左表(主表)和右表(子表)关联,如果能关联到的显示,如果左有右表没有,则右表显示NULL,如果右表有左表没有 则左表显示NULL

举个例子,你现在有两张表,学生表和成绩表

学生表中有两列数据:学生ID和学生姓名,成绩表中有三列数据,成绩ID、学生ID和总分数

假设学生表中有三行数据,ID为1,2,3,姓名分别为张三,李四,赵五

假设成绩表中也有三行数据:成绩ID为1,2,3,学生ID为 2,3,5,成绩为60,85,90

如果你写 select * from 学生表 a join 成绩表 b on a.学生ID=b.学生ID

会出现学生ID为2,3的两条数据

如果你写 select * from 学生表 a left join 成绩表 b on a.学生ID=b.学生ID

会出现学生ID为1,2,3的三条数据,但学生ID为1的那条数据关联到的成绩表信息全为NULL

如果你写 select * from 学生表 a  right join 成绩表 b on a.学生ID=b.学生ID

会出现学生ID为2,3,5的三条数据,但学生ID为5的那条数据关联到的学生表信息全为NULL

如果你写 select * from 学生表 a  full join 成绩表 b on a.学生ID=b.学生ID

会出现学生ID为1,2,3,5的全部数据,但学生ID为5的那条数据关联到的学生表信息全为NULL,学生ID为1的那条数据关联到的成绩表信息全为NULL

左联就是左表作为主表,左连接where只影向右表,右联与之相反。

select * from tbl1 Left Join tbl2 where tbl1.ID = tbl2.ID
左连接后的检索结果是显示tbl1的所有数据和tbl2中满足where 条件的数据。
简言之 Left Join影响到的是右边的表

 

1 .WHERE子句中使用的连接语句,在数据库语言中,被称为隐性连接。INNER JOIN……ON子句产生的连接称为显性连接。(其他JOIN参数也是显性连接)WHERE 和INNER JOIN产生的连接关系,没有本质区别,结果也一样。但是!比较新的数据库语言基本上已经抛弃了隐性连接,全部采用显性连接了。

一般要使得数据库查询语句性能好点遵循一下原则:
在做表与表的连接查询时,大表在前,小表在
不使用表别名,通过字段前缀区分不同表中的字段
查询条件中的限制条件要写在表连接条件前
尽量使用索引的字段做为查询条件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rsun04551

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值