on、where、having的区别
2017-11-04 22:34
197 查看
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
在使用left join时,on和where条件的区别如下:
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
假设有两张表tab1和tab2:
然后我们分别执行下面两条SQL:
ON和WHERE的区别主要有下:
1) 返回结果:在左外(右外)连接中,ON会返回左表(右表)中的所有记录;而WHERE中,此时相当于inner join,只会返回满足条件的记录(因为是从临时表中筛选,会过滤掉不满足条件的)。
2) 速度:因为ON限制条件发生时间较早,临时表的数据集要小,因此ON的性能要优于WHERE。
然后再看看having:
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
在使用left join时,on和where条件的区别如下:
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
假设有两张表tab1和tab2:
然后我们分别执行下面两条SQL:
1、select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name=’AAA’ 2、select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name=’AAA’)
ON和WHERE的区别主要有下:
1) 返回结果:在左外(右外)连接中,ON会返回左表(右表)中的所有记录;而WHERE中,此时相当于inner join,只会返回满足条件的记录(因为是从临时表中筛选,会过滤掉不满足条件的)。
2) 速度:因为ON限制条件发生时间较早,临时表的数据集要小,因此ON的性能要优于WHERE。
然后再看看having:
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
相关文章推荐
- ON、WHERE、HAVING的区别
- 笔试中常问到的数据库问题,sql中on、where、having的区别
- SQL中on条件与where条件的区别 (having)
- on、where、having的区别(转载)
- on、where、having的区别
- join、on、where、having的使用区别
- on、where、having的区别
- on、where、having的区别(转载)
- ON、WHERE、HAVING的区别
- where、having和on的区别
- sql中on where having的区别
- on、where、having的区别
- ON、WHERE、HAVING的区别
- Oracle On 、Where、Having 区别
- on、where、having的区别
- sql语句 on, where, having的区别
- left join on and 与 left join on where的区别
- where,having与 group by连用的区别
- mysql中的where和having子句的区别
- SQL语句Left join 中On和Where的用法区别