首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

Oracle别名使用有关问题

2012-09-16 
Oracle别名使用问题表结构与表数据:create table fruit(fruitname varchar2(20),product varchar2(20),pri

Oracle别名使用问题
表结构与表数据:
create table fruit(fruitname varchar2(20),product varchar2(20),price varchar2(20));
insert into fruit values('apple','china','12');
insert into fruit values('apple','japan','22');
insert into fruit values('apple','usa','33');
insert into fruit values('orange','china','10');
insert into fruit values('banana','china','31');
insert into fruit values('peach','usa','30');


问题:
1> select fruitname f from fruit where f='apple'; //无效的标识符
2> select fruitname f from fruit where fruitname='apple'; //正确
3> select fruitname,count(*) c from fruit group by fruitname having c>0; //无效的标识符
4> select fruitname,count(*) c from fruit group by fruitname having count(*)>0; //正确
5> select fruitname,count(*) c from fruit group by fruitname having count(*)>0 order by c; //正确


上述五个问题的运行结果为什么是那样,请解释下?

在from子句中为表指定了别名,表的实际名称是不是被覆盖了?


[解决办法]

SQL code
select fruitname f from fruit where f='apple';--此处在执行where条件时,列并没有参加计算呢,因此列的别名此时并不存在,会有错,这和执行顺序有关系,你可以这样写select fruitname f from fruit where fruitname='apple' order by f;--此时别名不会有错,因order by执行在最后其它类似,看下执行顺序你就清楚了,别名列在下面执行顺序中的第六步
[解决办法]
探讨

SQL code

select fruitname f from fruit where f='apple';--此处在执行where条件时,列并没有参加计算呢,因此列的别名此时并不存在,会有错,这和执行顺序有关系,你可以这样写
select fruitname f from fruit where fruitname='apple' order by f;--此时别名不会有错,因order……

[解决办法]
楼主从你的几个例子就可以看出SQL执行顺序了吧,别名必须是保证在执行后才可以被使用。
[解决办法]
1 楼的是正解。是执行顺序问题。就像一个函数,你不声明它就不认识

热点排行
Bad Request.