-
手写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语句解析)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...