-
手写sql顺序与机读sql数据的区别
①.手写
写手Sql图
②. 机读机读Sql图 -
sql解析顺序
sql解析图 - 注意:
①. sql 解析是从from开始,先是获取笛卡尔积(笛卡尔积的数量是两个表总数的乘积),然后进行过滤
②. 若面试官问 where 和 having的区别则从以下几点进行回答:- 最大的区别就是执行顺序不一样,where要比having先执行
- where不可以对聚合函数进行过滤,但是having可以。例如:
select id,name ,count(name) as nameSum from student group by 'name' having nameSum > 3
; 这条语句与select id,name ,count(name) as nameSum from student where nameSum > 3 group by 'name'
之间区别,第一条是正确的,可以执行通过,第二条执行是失败的,为什么?答:因为having与where的执行顺序不同,从from开始先对表做了笛卡尔积,然后对count进行where条件过滤,这时笛卡尔积中没有count完成后的nameSum字段,所以会找不到字段nameSum,然后having是在group by后执行,这时count聚合函数已经执行,所以可以进行过滤。 -
select id,name,sex from student where sex = '男'
与语句select id ,name ,sex from student having sex='男'
这两句的执行效果是一样的,但是select id , name from student where sex ='男'
与select id, name from student having sex = '男'
这两条语句中,第一条是正常执行的,第二条执行报错,找不到sex这列。总结:在没有group by的前提下,使用having,如果对没有select 的字段进行过滤的话,就会找不到column,但是where不会出现这种情况。
MySQL高级第二篇(sql语句解析)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。