SQL 表连接

在sql中表连接方式有left join (左连接);rith join(右连接);inner join(内连接);full join(全连接);union all (上下拼接) union (上下去重拼接)

left join (左连接):

左连接是将左表作为底层表,然后将右侧的表连在上面。

例如:想知道学生的信息以及学生所学的科目

由于学生信息在student_info中  但是学习的科目在student_subject中,因此需要将两张表关联起来,然后查询需要的信息。

select
 a.student_id,
 a.student_name,
 a.student_age,
 a.student_sex,
 b.student_subject
from (
    select
    student_id,
    student_name,
    student_age,
    student_sex
    from student_info 
)a
left join (
    stu_id,
    student_subject
    from student_subject
)b on a.stu_id=b.stu_id

 此时a表和b表关联起来后形成一张总表,我们再在最外层选择是a表中的数据还是b表中的数据,如是a表,则写上a.字段名称;b表则写上b.字段名称。如果字段在a,b表其中一个的话可以不用指明是从哪个表里面选取的字段,直接写字段名称即可。但是如果同一个字段在两个或两个以上的表中,那么必须指明是那张表里面的字段。但为了代码规范以及快速查询是那张表里面的字段,最好是写上表名称。

right join (右连接):

 左连接是将左表作为底层表,然后将右侧的表连在上面,那么右连接则是将右侧的表作为底层表,然后将左侧的表连在上面。

那么上面左连接的代码也可以写成:

select
 a.student_id,
 a.student_name,
 a.student_age,
 a.student_sex,
 b.student_subject
from (
    stu_id,
    student_subject
    from student_subject
)b
right join(
    select
    student_id,
    student_name,
    student_age,
    student_sex
    from student_info 
)a on a.stu_id=b.stu_id

 inner join (内连接):

是将两张表里面都有的字段连接起来,如果a表有这个人但是b表没有,那么这条记录将会筛选掉,不会出现。

select
 a.student_id,
 a.student_name,
 a.student_age,
 a.student_sex,
 b.student_subject
from (
    stu_id,
    student_subject
    from student_subject
)b
inner join(
    select
    student_id,
    student_name,
    student_age,
    student_sex
    from student_info 
)a on a.stu_id=b.stu_id

这里筛选的是stu_id两表都有的,其它字段不影响。

full join(全连接):

跟inner join 相反,只要是a,b表出现过得记录,都被查询出来。不会删除任何数据。

union all (上下拼接):

join 方法是对表的左右连接操作,但是有时我们发现有缺失一些数据条数,我们想把这些数据汇合到一张表里面,那么久可以使用union all

例如:数据库里面有两张学生表,但是student_info 有一些缺失  这些缺失数据在 student_info2 中能够找到,因此可以用

select
student_id,
student_name,
student_age,
student_sex
from student_info 

union all

select
student_id,
student_name,
student_age,
student_sex
from student_info2

这样整张表的数据就全了

union (去重上下连接):

union all 虽然能够将两张表连接起来,但是有一些重复的数据,sql中的union是在原表的基础上查看第二张表中的信息是否存在原表中,如果存在那么将不连接,如果不存在,那么这条记录将连接在原表下面

select
student_id,
student_name,
student_age,
student_sex
from student_info 

union

select
student_id,
student_name,
student_age,
student_sex
from student_info2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值