1.WHERE/GROUP BY/HAVING子句中只能直接使用栏位或者常量,而不能使用栏位的别名,除非这个别名来自 子查询之中,如:SELECT .... FROM (SELECT COLUMN_NAME C FROM TABLE_NAME) WHERE C > 1
2.而ORDER BY 则可以直接使用别名,如SELECT COLUMN_NAME C FROM TABLE_NAME ORDER BY C
这和SQL的执行顺序是有关的,SQL语句的执行顺序大致如下所示:
1. FROM语句
2. WHERE语句(结合条件)
3. START WITH语句
4. CONNECT BY语句
5. WHERE语句
6. GROUP BY语句
7. HAVING语句
8. MODEL语句
9. SELECT语句
10. UNION、MINUS、INTERSECT等集合演算演算
11. ORDER BY语句
我们可以看到SELECT子句是在WHERE子句执行后才执行的,当SELECT子句执行时查询列的别名才生成,所以在 WHERE子句中根本看不到列的别名,当然,自然也就无法引用列的别名了。 所以字段、表达式的别名在WHERE子 句和GROUP BY子句都是不能使用的,而在ORDER BY中不仅可以使用别名,甚至可以直接使用栏位的下标来进行 排序,如:ORDER BY ID或者ORDER BY 1
SELECT ID ID_ FROM STUDENT WHERE ID_=11--执行时报"ORA-00904: "ID_": invalid identifier" SELECT ID ID_ FROM STUDENT WHERE ID=11--正常执行 SELECT ID ID_ FROM STUDENT WHERE ID='11'--正常执行,注意:ID是NUMBER类型的数据 SELECT ID ID_ FROM STUDENT WHERE ID="11"--执行时报"ORA-00904: "11": invalid identifier",注意:ID是NUMBER类型的数据 SELECT ID,COUNT(*) C FROM STUDENT GROUP BY ID HAVING C>0--执行时报"ORA-00904: "C": invalid identifier" SELECT ID,COUNT(*) C FROM STUDENT GROUP BY ID HAVING Count(*)>0--正常执行 SELECT ID,COUNT(*)C FROM STUDENT GROUP BY ID HAVING COUNT(*)>0 ORDER BY C--正常执行 SELECT ID ID_ FROM STUDENT ORDER BY ID_--正常执行 SELECT ID ID_ FROM STUDENT ORDER BY 1--正常执行
10)别名是否区分大小写——区分大小写(注意:当不用双引号括起来的时候英文字符大小写不敏感)
SELECT XUEHAO FROM (SELECT ID XUEHAO FROM STUDENT) WHERE XUEHAO > 1--正常执行 SELECT XUEHAO FROM (SELECT ID xuehao FROM STUDENT) WHERE XUEHAO > 1--正常执行 SELECT XUEHAO FROM (SELECT ID "XUEHAO" FROM STUDENT) WHERE XUEHAO > 1--正常执行 SELECT XUEHAO FROM (SELECT ID "xuehao" FROM STUDENT) WHERE XUEHAO > 1--执行时报"ORA-00904: "XUEHAO": invalid identifier" SELECT XUEHAO FROM (SELECT ID "xuehao" FROM STUDENT) WHERE xuehao > 1--执行时报"ORA-00904: "XUEHAO": invalid identifier" SELECT XUEHAO FROM (SELECT ID "xuehao" FROM STUDENT) WHERE "xuehao" > 1--执行时报"ORA-00904: "XUEHAO": invalid identifier" SELECT "xuehao" FROM (SELECT ID "xuehao" FROM STUDENT) WHERE "xuehao" > 1--正常执行
这个小例子也可以看到SQL语句是先执行WHERE子句然后才执行SELECT子句的!
总结
到此这篇关于Oracle别名使用要点小结的文章就介绍到这了,更多相关Oracle别名使用内容请搜索