sql的内连接、左连接、右连接

 多表联查时,有些数据没有对应另一个表的数据,即对应为空。

內连接:仅选出两张表中互相匹配的记录,有对应为空的则筛选出去,这些数据就不会被搜索出来。内连接是两个表中都必须有连接字段的对应值的记录,数据才能检索出来。

语法:select 字段 from 表1 inner join 表2 on 条件;

select * from 表1,表2where 条件    from后面直接写两个表名,这样写等价于内连接 如果不写 where 条件,相当于笛卡尔积,即输出表1所有数据对应表2所有数据的结果。

外连接:包括左连接、右连接等。

        左连接:会保留一部分对应为空的数据,语法为select 字段 from 表1 left join 表2 on 条件,只返回左表(即表1)中不符合连接条件单符合查询条件的数据行,即所有表1的数据。

        右连接:和左连接相反,会保留一部分对应为空的数据,语法为select 字段 from 表1 right join 表2 on 条件,只返回右表(即表2)中不符合连接条件单符合查询条件的数据行,即所有表2的数据。

WHERE条件放在ON后面查询的结果是不一样的。

ON条件:是过滤两个链接表笛卡尔积形成中间表的约束条件。
WHERE条件:在有ON条件的SELECT语句中是过滤中间表的约束条件。在没有ON的单表查询中,是限制物理表或者中间查询结果返回记录的约束。在两表或多表连接中是限制连接形成最终中间表的返回结果的约束。
从这里可以看出,将WHERE条件移入ON后面是不恰当的。推荐的做法是:
ON只进行连接操作,WHERE只过滤中间表的记录。

此段转自:深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接 - New.Young - 博客园

eg:

学生表

班级表

 学生表的classid和班级表的id对应,关系为多对一  

内连接:

select * from student inner join classes on student.classid=classes.id

结果:

左连接(推荐): 

select * from student left join classes on student.classid=classes.id

结果:

可见,左表的数据是全的 

右连接:

select * from student right join classes on student.classid=classes.id

结果:

可见右表的数据是全的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值