sql中on和where的区别在哪

首先我们要明确:on和where后都表示查询的条件

1.on只能用于连接查询(内连接、外连接、交叉连接),在其他情况下使用on会报错

select * from stu on id=1

上面这样写就是不行的,只能用where进行条件查询。

2.在进行连接查询时会产生一张中间表也可以叫做临时表,on是在生成中间表时使用的条件;而where是在中间表生成后对中间表进行过滤使用的条件。

比如说:

表stu1
idname
1Rose
2Tom
3Amy
表stu2
idname
2xiaoming
5xiaohong
select* from stu1 left join stu2 on stu1.id = stu2.id and stu1.id = 2;
select* from stu1 left join stu2 on stu1.id = stu2.id where stu1.id = 2;

 此时运行结果是这样的。

第一个语句结果
idnameidname
1Rosenullnull
2Tom2xiaoming
3Amynullnull
第二个语句结果
idnameidname
2Tom2xiaoming

这时我们发现where之后的结果是进行条件查询的结果。

3.在进行外连接是必须使用on,不然会报错。

select *from stu1 left join stu2 on stu1.id = stu2.id

4.在进行内连接时on和where都可以使用。

select *from stu1 inner join stu2 on stu1.id = stu2.id
select *from stu1 inner join stu2 where stu1.id = stu2.id

5.on、where、having这三个都可以加条件的子句中,on是最先执行,where次之,having最后。

        在两表联接查询时用on,在一个表的时候,就只有where跟having比较了。在这单表查询统计的情况下,如果要过滤的条件没有涉及到要计算字段,那它们的结果是一样的,只是where可以使用rushmore技术,而having就不能,在速度上后者要慢。

        在多表联接查询时,on比where更早起作用。系统首先根据各个表之间的联接条件,把多个表合成一个临时表后,再由where进行过滤,然后再计算,计算完后再由having进行过滤。由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什幺时候起作用,然后再决定放在那里。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值