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子句中为表指定了别名,表的实际名称是不是被覆盖了?

0

2个回答

Oracle中的sql语句,
1.where/group by/having子句中只能直接使用栏位或者常量,而不能使用栏位的别名,除非这个别名来自子查询之中,如:select .... from (select col1 ccc from table) where ccc > 1
2.而order by 则可以直接使用别名,如select col1 ccc from table order by ccc

这和sql 的执行顺序是有关的,where中的部分先执行 -> 如果有group by,接着执行group by -> select中的函数计算、别名指定再运行-> 最后order by
因此,字段、表达式的别名在where子句和group by子句都是不能使用的,而在order by中不仅可以使用别名,甚至可以直接使用栏位的下标来进行排序,如:order by 1 desc,2 asc

0
liuyinhuan0409
liuyinhuan0409 还是没能解答楼主的疑问么
接近 7 年之前 回复

select fruitname f from fruit where f='apple';
f是返回值上的欄位名稱,如果你想用表的別名
select fruitname f from fruit f where f.fruitname='apple';

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Oracle 数据库-别名的使用
初学数据库,发现了别名使用的一些小问题,在网上没有搜到相应的内容,与大家分享一下一起探讨。select empno, ename, sal from emp where sal = 1250;语句很简单,单表条件查询,现在没有使用别名。下面加上别名:select empno, ename, sal 工资 from emp where sal = 1250;给sal这个列,起别名为工资,而我在wher
Oracle 字段别名使用注意点
在我们使用sql语句使用别名的时候,如果别名中包括如括号,运算符和引号之类的值的时候,操作数据的时候会出现错误,如 select 1 as ABC(AB) from dual;--这样会报错。select 1 as ABC-RH from dual;--这样会报错。修改为如下的话,就可以解决:select 1 as "ABC(AB)" from dual;--这样的不会报错。此...
oracle列别名使用
给列取一个其他名字,方便自己认识n select t.empno, t.ename from scott.emp t; select t.empno, t.ename as 名字 from scott.emp t; n 列名上显示名字两个字 n n给临时结果取名字n select t.deptno, count(*) from scott.emp t group by t.deptn
oracle查询使用别名那点事儿
oracle查询使用别名注意事项n n 完整使用别名,例如: select uname as “别名” from user;n 省略as,例如: select uname “别名” from user;n 省略as和”“: select uname uname 别名 from user;n n区别:第一种和第二种没有区别; 第三种若是别名中有空格或者别名为数字或者关键字时,语句出错。总结:
oracle 列别名用法注意点
是否可以以数字开头——可以以数字开头但必须使用双引号括起来nnSELECT ID 123学号--执行时报"ORA-00923: FROM keyword not found where expected" FROM STUDENTnnSELECT ID "123学号"--正常执行nn nn对于中文别名双引号、单引号、不使用引号的区别(注意:全是英文的单引或双引符号)——使用单引符号时报错nnSEL...
Oracle中列别名及条件范围的使用
列别名需要加双引号的情况:nn1.列别名中需要严格区分大小写nn2.列别名中存在空格nn3.列别名中存在特殊字符:例如:&、$等特殊字符nn    注意:若特殊字符出现在中间,可以不加双引号nn以下示例均采用表PERSON(PID,PNAME,PSEX,PSTATE,PMONEY)nn示例:  nnSELECT A.PID,A.PNAME "GOOD NAME",A.PSEX,A.PSTA...
oracle查询语句中给表和列起别名
和mysql有点区别:简而言之就是oracle使用别名时,如果对表用别名,去掉as这个关键字举例:oracle:SELECT   ms.user_id_ AS user_id_,ms.group_id_ AS gorup_id_  FROM act_id_user u ,act_id_group g ,act_id_membership ms WHERE ms.user_id_=u.id_ AND...
Oracle使用别名进行WHERE条件判断
举例:查询公司所有部门的工资排名第二人的信息nnnSELECT ENAME,DEPTNO,SAL,n RANK() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC) "RANK"nFROM EMPLOYEEnWHERE "RANK"="2";nn运行以上代码会发生  "RANK",标识符找不到,这是为什么呢?因为在Sql语句运行中执行顺序是nn ...
关于ORACLE数据库表的别名
我们在使用数据库的时候,很多情况下,我们要用到表的别名,根据表的别名操作表,使用表的别名有什么优点呢???rn1、使用别名可以简化查询;rn2、使用表名前缀可以提高执行效率;rn3、如果使用了表的别名,则不能在使用表的真名;
关于Oracle语句中case when起别名
SELECT t.status,CASE t.statusn       WHEN '失败' THEN '捕获失败'n      n       ELSE '捕获成功' END "legendValue",n         n         a.business_name as "xAxisValue",sum(nvl(t.file_cou,0)) as "dataValue",a.
Oracle子查询的返回结果当做表,主查询使用列别名查询的问题
  今天是实习的第二天,碰到一个问题。nn  在设计场景时,添加了type_salary逻辑字段(员工工资大于本部门平均工资时显示为A,否则显示为B)。nn  nnnSELECT avgs.department_id,n avgs.avg_saln FROM (SELECT emp3.department_id "department_id",n AVG(...
Oracle中decode函数以及group by中不能跟as别名分组
       公司的项目从mysql换到了Oracle,在sql语句中有这样一个if(isnull(字段),' ',字段) ,if在Oracle中存储过程中可以用到,单独拿出来并没这样的函数,运用在Oracle中改成了decode函数(如果字段值是空的话,则置为空,否则正常显示,),decode(字段,null,' ',字段),或则改成case when then这种形式。nn      Orac...
关于Oracle数据库起别名
-- 给字段起别名得用双引号 使用或者不适用as关键字都可以。  不管别名是英文还是中文。rn   -- 给表起别名 不能使用as关键字 使用或者不使用双引号都可以。
oracle中给表和列起别名
1.oracle中给表起别名 n有时候在一个select中会有多个表,而且表的名字挺长,如果要做关联表的时候,你需要用表名.字段名的方式做链接,这样比较不方便,此时我们可以给这张表起一个别名,此时就可以使用该别名代替表名来使用,比如下面这个例子SELECT xxmc,sname as xsxm,sex,phone,address jzdz nFROM student snLEFT JOIN xxjb
为什么别名不能在group by中用?
因为SQL的执行顺序为:rn先where 再group 再having 再select 后order.rnsql语句解析的顺序的问题。先where条件过滤出需要的纪录,再对筛选出来的记录分组group加having。接下来就是选取字段的过滤select最后order排序。所以别名只有在select和order by内才可以只用。
Oracle 等中的 group by与where 子句不能使用别名的原因与解决办法
下面的语句执行的话会报错:ORA-00904: "CALLT": 标示符无效nnnselect case when ta.call_time = 0 then 0n when ta.call_time <= 6 and ta.call_time > 0 then 1n when ta.call_time <= 60 and ta.call_time > 6 th...
嵌套查询 别名使用
SQLZOO 练习题 nname continent area population gdp nAfghanistan Asia 652230 25500100 20343000000 nAlbania Europe 28748 2831741 12960000000 nAlgeria Africa 2381741 37100000 1886810000
Oracle数据库存在相同列名但别名不同的问题
在某项目中存在了一种情况 n n nnnnnselect * nfrom user_tab_cols nwhere Table_Name='成型指令基準マスタCT' norder by column_name ;
Oracle数据库中的别名需要双引号,不然会报空指针错误
查询的时候,如果用别名,不加双引号,会导致查出的表头默认是大写的!对查询没什么影响,但是如果需要获取查询的字段值的时候,一定注意条件要用大写!!!不然会报空指针错误!...
oracle 查询出结果用中文列别名与特殊列别名
1.特殊列名n前段时间在写一个接口时遇到了点特殊的麻烦。n由于接口内容要求返回json结果。这个简单无非查询一张表,查出接口想要的字段值,于是分分钟写出来了,但是在仔细看接口需求文档时发现,接口要求的结果每个字段名都带有前缀“.”。n例如:n{n "xx.a":"1",n "xx.b":"2",n "xx.c":
oracle 连接运算符,连接字符串,||双竖线,在列别名上使用双引号,使用带有特殊字符的列别名...
[color=red]在列别名上使用双引号[/color]rn 输入并执行查询:rn [code="sql"]SELECT ename AS "Name", sal*12+5000 AS "年度工资(加年终奖)" FROM emp;[/code]rn 显示结果为:rn [code="sql"]Name 年度工资(加年终奖)rn --------------- --------...
MySql,delete数据时别名和表关联的正确使用方法
正解:nDELETE a1, a2 FROM t1 AS a1 INNER JOIN t2 AS a2nWHERE a1.id=a2.id;nnDELETE FROM a1, a2 USING t1 AS a1 INNER JOIN t2 AS a2nWHERE a1.id=a2.id;n我们常犯得错误nDELETE t1 AS a1, t2 AS a2 FROM t1 INNER JOIN
oracle表、约束、空间、别名等
-- 建表n/*ncreate table userinfo(n id number(6),n name varchar2(3),n sex number(1),n age number(3),n birthday date,n address varchar2(50),n email varchar2(30),n phone number(11)n);nn*/nn--drop table use...
通过子查询和列别名 算出 sum(count (xx) ) 的间接效果
select pk_month, sum(total_on_job_cadre) total_on_job_cadre from (SELECTn    pk_month,n    company,ncount( CODE ) total_on_job_cadrenFROMn    FACT_ZZRYHMCnWHEREn  POST_TYPE IN ( '管理', '专业技术')-- and pk...
oracle给列取别名、给表取别名
当前SC表数据:nSNO    CNO    SCOREnns001    c001    78.90ns002    c001    80.90ns003    c001    81.90ns004    c001    60.90ns001    c002    82.90ns002    c002    72.90ns003    c002    81.90ns001
Oracle-18-select语句初步&SQL中用算术表达式&别名的使用&连接运算符%distinct&where子句
一、一般SELECT语句的格式如下:rn1.查询指定表的所有列rnselect * from rn表名 [where 条件] [group byrn分组列名] [having 聚合函数] [order byrn排序列名 ASC| DESC]rn在表名地方,可以写多个表rn rn2.查询指定表的部分列:rnselect {[distinct]列名,列名,…}fromrn表名 [where 条件] [
SQL删除使用别名问题
MySQL 执行delete操作时若想使用别名,别名必须在delete之后出现一次ndelete alias> from table> alias> where alias>.field>...比如:nDELETE brrnFROMn base_role_resource brr n LEFT JOIN base_role br n ON br.id = brr.role_id nW
sql语句中where、group by、having、order by 是否可以使用别名
1、在mysql中,group by中可以使用别名;where中不能使用别名;order by中可以使用别名。rnrnrn2、在oracle中:rn1)where/group by/having子句中只能直接使用栏位或者常量,而不能使用栏位的别名,除非这个别名来自子查询之中,如:select .... from (select col1 ccc from table) where ccc > 1 
oracle、mysql、hive中的字段别名是否可以在where、group by、having、order by中直接使用
Mysql 版本5.7.20where中不能直接使用字段的别名,group by、having、order by可以直接使用Oracle 版本12c where、group by、having中不能直接使用字段的别名,order by可以直接使用Hive 版本1.3.0where、group by、having中不能直接使用字段的别名,order by可以直接使用...
Oracle 数据库 中表的取别名
今天看见有人在问如何给Oracle 在中的表取别名rn正好总结:rn 在给表取别名的时候,要看你使用的Oracle 数据库的版本的问题rn 如果是9i 版本的之前则只能用 下面一种的方式:rn create table mu as (rn select * from xiaomu rn ...
Oracle中给查询的返回列起别名
在Oracle中给返回的列起别名有三种方法:①在需要返回的列名后面直接加上别名SELECT TS# 编号,NAME 表空间名 FROM V$TABLESPACE;②在需要返回的列名后面加AS 别名。执行效果与①中相同。SELECT TS# AS 编号,NAME AS 表空间名 FROM V$TABLESPACE;但是在上面①②中的方法中,若起的别名是英文的则Oracle不管大小写会全部默认为大写字...
oracle可以在"关键字"的形式引用关键字作为字段名与查询语句的别名。
1. oracle可以在"关键字"的形式引用关键字作为字段名与查询语句的别名。如果不是特殊情况最好不要使用,以免引起代码编写过程中的错误。rn2. 加了""的关键字必须大写。(补充)rnrnselect name as areaname from bas where aa like '37%' and "LEVEL" ='3' order  by code
Oracle学习2:别名&字符串拼接
Oracle学习2:别名&字符串拼接
sql语句查询中要注意as后面别名不要与关键词有冲突
今天在跑一个老的项目的时候发现一条查询语句报错select count(id) as count from member 然后把这个语句在一些数据库管理工具中查询,都可以得到正确的结果。为什么在项目中提示错误呢?因为as count 这里的问题,count本身是关键字,而as count的写法,让解析器误认为关键字写的不完整,所以就报错了。所以,as后面的别名,一定要与关键字区别开。如果写sele...
带有特殊符号的别名(如:/ , - 等)
文章目录1、方法:使用双引号 " "2、举例rn1、方法:使用双引号 " "rn注意: 快捷键为:Shift + " (英文输入法) !=> 不是按两下 ’rn2、举例rn-- SELECT 1 ''a'' FROM dual; -- 报错rnSELECT 1 "路程 / 时间" FROM dual; -- OKrnSELECT 1 &am
oracle删除可以用别名
身份证号正则,oracle删除可以用别名可以用别名,只是你写法写错了。nDELETE t1 FROM test AS t1 WHERE .....身份证号正则表达式:nisIDCard1=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[
MySql数据库Hibernate不能使用别名问题解决
oracle数据库换成了mysql数据库, 结果字段名称使用别名的话提示找不到原字段名, 整理之后解决方案如下:rn1, 在连接的url里加上参数, 修改如下:jdbc.url=jdbc:mysql://localhost:3306/jwerp?characterEncoding=utf-8&[color=red]useOldAliasMetadataBehavior=true[/color]rn...
hibernate 别名的坑:加别名与不加别名解析不一致
hibernate的HQL涉及表连接的查询得使用别名 ,有加别名和美家别名所生成sql是不一样的。nnnnnnnn加别名解析结果:nnHibernate: select subwaymoni0_.ID as ID, subwaymoni0_.SUBWAY_MONITOR_PROJECT_ID as SUBWAY2_440_, subwaymoni0_.SUBWAY_MONITOR_ITEM_ID ...
为什么group by后面不能使用列的别名
同事工作中遇到一个问题:nnselect   count(billingdate),to_char(billingdate,'YYYYmm') monthnnfrom tu_tradennwhere to_char(billingdate,'YYYY') ='2017'and reportstat = 30nngroup by month; nn-----执行报错,can't resolve mo...
子查询作为数据源时是否需要表别名
在sqlserver2008中,把子查询做为数据源时,如果没有表别名,将会提示错误,如下:rnrnrnrn             如果添加了表别名,如加了个“a”,则正确查询:rnrnrnrn                 而在Oracle中,不添加表别名也不会出错,如下:
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 区块链问题 ios视频开发问题