美文网首页
sqlyog中on where having的区别

sqlyog中on where having的区别

作者: Gloria艳 | 来源:发表于2018-10-26 17:46 被阅读0次

一、 SQL查询在计算机执行的先后顺序

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


数据库执行逻辑图

二、适用条件

having 带有函数计算的条件查询,也就是聚合函数的条件查询;
on 两个及两个以上表关联的时候, 连接条件必须写在on后面
where 起过滤的作用,一个表时where是直接进行条件筛选(除计算字段外);多表关联时where是对关联后的临时表进行条件筛选。


where和on的区别

(关系图)

三、join关联中 on 和 where 的区别

1. join关联时内连接和外连接的区别
on

left join:左外连接,以左表为主,右边表匹配不上的,直接以null(空)显示;
right join:右外连接,以右表为主,左边表匹配不上的,直接以null(空)显示;
full join:全部关联起来;
inner join:只关联两个表共同的部分。inner join一般默认就是join;
cross join:就是两个表相乘,运算量很大,查询速度比较慢。

2. on 和where 的区别

在使用left join时,on和where条件的区别如下:
1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。/(实际上左连接中如果and语句是对左表进行过滤的,那么不管真假都不起任何作用。如果是对右表过滤的,那么左表所有记录都返回,右表筛选以后再与左表连接返回)/
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉,on后的条件用来生成左右表关联的临时表,where后的条件对临时表中的记录进行过滤。
在使用inner join时,不管是对左表还是右表进行筛选,on and和on where都会对生成的临时表进行过滤。
总结:
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
对于left join,不管on后面跟什么条件,左表的数据全部查出来,因此要想过滤需把条件放到where后面。

补充:在on的情况下and、or 与on同时对前面的集合起作用,而存在where的时候,先对集合进行on条件的抽取,再根据where的条件进行抽取。
说下原因:
(1)、ON后面的筛选条件主要是针对的是关联表【而对于主表筛选条件不适用】。
(2)、对于主表的筛选条件应放在where后面,不应该放在ON后面
(3)、对于关联表要区分对待。如果是要条件查询后才连接应该把查询件
放置于ON后。如果是想再连接完毕后才筛选就应把条件放置于where后面
(4)、对于关联其实可以先做子查询再做join

相关文章

  • sqlyog中on where having的区别

    一、 SQL查询在计算机执行的先后顺序 on、where、having这三个都可以加条件的子句中,on是最先执行,...

  • SQL中where与having的使用

    SQL中where与having的使用 where和having的区别 聚合函数和group by where 和...

  • Mysql中having和where的区别

    having子句与where都是设定条件筛选的语句,有相似之处也有区别。 having与where的区别:havi...

  • where、having的区别

    where是对查询前,将不符合条件的去掉。在分组之前过滤数据,所以后边不能跟聚合函数。 having是筛选满足条件...

  • MySQL之Where和Having的区别

    MySQL之Where和Having的区别 对于使用where和having,相信很多人都有过困扰,今天就来讲一下...

  • SQL On & Having & Where区别

    结论:On > Where > 聚合函数 > Having On 用于表关联(left join,right jo...

  • Oracle On 、Where、Having 区别

    ON 、WHERE、HAVING都能通过限制条件筛选数据,但他们的使用及其不同。下面我们来分析三者之间的区别。 1...

  • where 和 having区别

    1. 前言 在 MySQL 中使用 select 查询语句的时候,一般都会加上 where 语句或者 limit ...

  • 常用SQL相关

    1. where和having的区别? where和having都可以使用的场景:当筛选条件在要查询的字段中都有的...

  • sql中where和having的区别

    “Where” 是一个约束声明,使用Where来约束来之数据库的数据,Where是在结果返回之前起作用的,且Whe...

网友评论

      本文标题:sqlyog中on where having的区别

      本文链接:https://www.haomeiwen.com/subject/mslltqtx.html