对关于sql语句执行顺序的一个sql题的思考。

#7.查询公司中入职超过10000天的员工姓名、入职时间
SELECT last_name ,DATEDIFF(SYSDATE(),hire_date) worked_days,hire_date
FROM employees 
WHERE worked_days>10000;                

这个代码块的执行结果是否有错?

答案是:

        错误代码: 1054
        Unknown column 'worked_days' in 'where clause'

翻译一下就是说,在执行where语句时,还没有worked_days 这个变量

将之前的sql语句执行顺序拿出来

因为运行顺序不同,运行顺序:

from--where--group by--having--order by--limit--select,where为聚合前的普通筛选,having是聚合后筛选

这里说的 select 执行顺序是在最后,可是当我把上面的sql语句的where 改成 having 以后

执行代码和结果如下:

SELECT last_name ,DATEDIFF(SYSDATE(),hire_date) worked_days,hire_date
FROM employees 

HAVING worked_days>10000;

结果:

对关于sql语句执行顺序的一个sql题的思考。_第1张图片

发现没有,当where改成having以后,执行结果查询出来的结果是正确的!

所以我认为,在sql的执行顺序中应该在加一个

因为运行顺序不同,运行顺序:

from--where--group by--select 中的一些运算函数比如datediff--having--order by--limit--select,where为聚合前的普通筛选,having是聚合后筛选

你可能感兴趣的:(SQL,sql,数据库,database)