大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > MSSQL技巧 > 关于sql和mysql对于别名不能调用的一些讲解

关于sql和mysql对于别名不能调用的一些讲解(2)

关键词:别名调用sqlmysql  阅读(1358) 赞(53)

[摘要]在写sql的时候,由于有部分语句别名不能调用,是由于别名机制不同引起的。今天总结了一下,sql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。


下面以一个实例来说明别名不能用的根本原因:

例子 一

SQL代码
select m.mname as username,
avg(s.score) as rscore,
(case
when avg(s.score) < 60 then
'差'
when avg(s.score) >= 60 and avg(s.score) <= 80 then
'良'
when avg(s.score) > 80 and avg(s.score) <= 100 then
'优'
else
'不合法'
end)
from score s, student m
where s.mid = m.mid
group by m.mname
order by rscore desc;

假如把case 里面avg(s.score)改成别名rscore 在sql下运行就报错了

例子二

SQL代码
select count( *) as c from score group by mid having count(*)>2;

假如把having 里面的count( *)换成别名c,这句在sql里面就变成错误的了,在 mysql下是正确的,百思不得其解,给朋友指点了一下,终于理解通了,下面是说明:
GroupBy和Having,Where,Orderby语句的执行顺序:
最后要说明一下的GroupBy,Having,Where,Orderby几个语句的执行顺序。一个SQL语句往往会产生多个临时视图,那么这些关键字的执行顺序就非常重要了,因为你必须了解这个关键字是在对应视图形成前的字段进行操作还是对形成的临时视图进行操作,这个问题在使用了别名的视图尤其重要。以上列举的关键字是按照如下顺序进行执行的:Where,GroupBy,Having,Orderby。首先where将最原始记录中不满足条件的记录删除,然后通过GroupBy关键字后面指定的分组条件将筛选得到的视图进行分组,接着系统根据Having关键字后面指定的筛选条件,将分组视图后不满足条件的记录筛选掉,然后按照OrderBy语句对视图进行排序,这样最终的结果就产生了。在这四个关键字中,只有在OrderBy语句中才可以使用最终视图的列名,如:

SQL代码
SELECT FruitName,ProductPlace,Price,ID AS IDE,Discount FROMT_TEST_FRUITINFO WHERE ORDER BY IDE

这里只有在ORDERBY语句中才可以使用IDE,其他条件语句中假如需要引用列名则只能使用ID,而不能使用IDE。
«上一页12下一页»


相关评论