数据库别名AS区别

Oracle之别名小结

MySQL表别名、字段别名注意事项

字段别名:可加 as  ,也可以不加,可以加单|双引号,也可以不加;

表别名:可加 as ,也可以不加,但是一定不能加单|双引号!

Oracle:在oracle中,数据表别名不能加as

别名的使用原则

  • 区别同名列的名称
  • 非法的表达式合法化
  • 按照你的意愿显示列的名称
  • 特殊的别名要双引
  • 直接写列的后面
  • 使用as增加可读性
  • select sal as salary , hiredate "上班日期",sal*12 total_salary from emp;
  • select sal as salary , hiredate as 日期 from emp;

今天在写一个简单的SQL语句并执行时抛出了如下图所示的一个错误提示信息!

恩,此异常信息很明显,在SQL语句中标示符的长度过长了,简短一些就应该没问题了,我查看了一下我的SQL语句发现是我的查询字段的列别名过长,实际测试的结果为列字段别名的最大长度为30个字节!

注意:我的测试数据库是ORACLE 11.2.0.4.0(如下图所示)

ok,问题搞定了,对应的更多的错误信息及解决方案,也可以从ORACLE的错误信息手册中查询比如(针对此问题):

Error: ORA-00972: identifier is too long  Cause: You tried to reference a table, cluster, view, index, synonym, tablespace, or username with a value that was longer than 30 characters.  Action: The options to resolve this Oracle error are:  Names for tables, clusters, views, indexes, synonyms, tablespaces, and usernames must be 30 characters or less. You must shorten the name to no more than 30 characters for these objects.以上内容是我分析和解决我的SQL语句中,查询时列的别名过长问题的过程,也是我分享这篇小博文的引子! 下面是我针对别名的一个小结(注意:我的测试数据库是ORACLE 11.2.0.4.0 字符集是AMERICAN_AMERICA.AL32UTF8) 一:使用别名的好处    1)简化SQL语句的书写,特别是多表关联查询且表名较长时    2)增强SQL语句的可读性,特别是当查询出来的列字段较为复杂时效果更为明显二:测试小结    1)测试时使用的简单表结构

CREATE TABLE SALES.STUDENT
(
  ID        NUMBER,
  NAME      VARCHAR2(20 BYTE),
  SEX       CHAR(1 BYTE),
  BIRTHDAY  DATE,
  HOBBY     VARCHAR2(20 CHAR)
)

2)测试使用的若干条测试数据

3)列名的最大长度为30个字节

SELECT ID ABCDEABCDEABCDEABCDEABCDEABCDE--30个英文大写字符,正常执行
FROM STUDENT

SELECT ID ABCDEABCDEABCDEABCDEABCDEABCDE1--多加另一个1就会报ORA-00972:identifier is to long
FROM STUDENT

SELECT ID 我们学校的好学生学号--10个中文汉字字符,正常执行
FROM STUDENT

SELECT ID 我们学校的好学生学号1--多加另一个1就会报ORA-00972:identifier is to long
FROM STUDENT

4)可以使用AS关键字定义列名,也可以不适用AS,列名后直接指定别名,以空格分开即可

SELECT ID AS 学号 FROM STUDENT--使用AS的情况,正常执行

SELECT ID 学号 FROM STUDENT--不使用AS也可以正常执行,而且代码更简洁,建议使用方式

5)以数字开头的别名必须使用双引号括起来

SELECT ID 123学号 FROM STUDENT--执行时报"ORA-00923: FROM keyword not found where expected"

SELECT ID "123学号"--正常执行

6)别名可以使用双引号和不使用任何引号。(注意:全是英文的单引或双引符号)

中文别名可以使用双引号和不使用任何引号的

但是使用单引符号时报错(任何列别名不能用单引号)

SELECT ID 学号 FROM STUDENT--正常执行

SELECT ID "学号" FROM STUDENT--正常执行

SELECT ID ‘学号‘ FROM STUDENT--执行时报"ORA-00923: FROM keyword not found where expected"

SELECT ID StudentId FROM STUDENT--正常执行

SELECT ID "StudentId" FROM STUDENT--正常执行

SELECT ID ‘StudentId‘ FROM STUDENT--执行时报"ORA-00923: FROM keyword not found where expected"

7)别名中使用了其他的特殊符号比如:别名中包含空格或者小括号(),则必须使用双引号括起来(注意:其他的特殊符号可能类似,这里以小括号为例做了测试,其他情况如果感兴趣可以自己动手试试)

SELECT ID AS (学号) FROM STUDENT--英文小括号且使用AS的情形,执行时报"ORA-00923: FROM keyword not found where expected"

SELECT ID (学号) FROM STUDENT--英文小括号,执行时报"ORA-00904: "ID": invalid identifier"

SELECT ID AS "(学号)" FROM STUDENT--正常执行

SELECT ID AS(学号)FROM STUDENT--中文小括号且使用AS的情形,执行时报"ORA-00923: FROM keyword not found where expected"

SELECT ID(学号)FROM STUDENT--中文小括号,执行时报"ORA-00904: "ID": invalid identifier"

SELECT ID "(学号)" FROM STUDENT--正常执行

SELECT ID 学 号--执行时报"ORA-00923: FROM keyword not found where expected"FROM STUDENT

SELECT ID "学 号"--正常执行FROM STUDENT

SELECT ID XUE HAO--执行时报"ORA-00923: FROM keyword not found where expected"FROM STUDENT

SELECT ID "XUE HAO"--正常执行FROM STUDENT

8)是否可以保留别名中的空格——可以,但必须使用双引号括起来,如果指定的别名带有双引号,则子句中使用别名的时候必须带双引号,保持一致

SELECT ID "学 号" FROM STUDENT ORDER BY "学 号" DESC--正常执行

9)使用别名时因SQL语句各子句的执行顺序引起的问题

ORACLE中的SQL语句,

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 在WHERE子句中引用列别名的问题

SQL> select sal,comm from emp
     2  where sal<2000;  

       SAL       COMM
    --------- ----------
       800
      1600        300
      1250        500
      1250       1400
      1500          0
      1100
       950
      1300  

8 rows selected.  

SQL> select sal as salary,comm as commission from emp
     2  where salary<2000;
     where salary<2000
             *
ERROR at line 2:
ORA-00904: "SALARY": invalid identifier  

SQL> select * from
  2  (
  3   select sal as salary,comm as commission from emp
  4  ) x
  5  where salary<2000;  

     SALARY     COMMISSION
   ---------- ----------
       800
      1600        300
      1250        500
      1250       1400
      1500          0
      1100
       950
      1300  

8 rows selected.

将取别名的查询作为内联视图,便可以在外部查询中引用其中的别名列。为什么要这么做呢?WHERE子句是在SELECT之前进行处理的,这样,在处理求解“问题”查询的WHERE子句之前,SALARY和COMMISSION并不存在,要到WHERE子句处理完成之后,别名才生效。然而,FROM子句是在WHERE之前处理的。将原查询放在FROM子句中,那么,在最外层的WHERE子句之前,以及最外层的WHERE子句“看到”别名之前,就已经生成了查询结果。

oracle 连接运算符,连接字符串,||双竖线,在列别名上使用双引号,使用带有特殊字符的列别名        

在列别名上使用双引号
输入并执行查询:
1.SELECT ename AS "Name", sal*12+5000 AS "年度工资(加年终奖)" FROM emp;  

1.SELECT ename AS "Name", sal*12+5000 AS "年度工资(加年终奖)" FROM emp;  

显示结果为:
1.Name       年度工资(加年终奖)
2.        --------------- ----------------------------
3.        SMITH                 14600
4.        ALLEN                 24200  

1.Name       年度工资(加年终奖)
2.        --------------- ----------------------------
3.        SMITH                 14600
4.        ALLEN                 24200  

说明:其中别名“Name”有大小写的区别,别名“年度工资(加年终奖) ”中出现括号,属于特殊符号,所以都需要使用双引号将别名引起。
连接运算符
sql语句可以使用包含数值运算的计算列,显示结果也是数值型的。我们也可以使用字符型的计算列,方法是在查询中使用连接运算。连接运算符是双竖线“||”。通过连接运算可以将两个字符串连接在一起。
在查询中使用连接运算。
输入并执行查询: 

1.SELECT  ename||job AS "雇员和职务表" FROM emp;  

1.SELECT  ename||job AS "雇员和职务表" FROM emp;  

输出结果为: 

1.雇员和职务表
2.        -------------------
3.        SMITHCLERK
4.        ALLENSALESMAN  

1.雇员和职务表
2.        -------------------
3.        SMITHCLERK
4.        ALLENSALESMAN  

说明:在本例中,雇员名称和职务列被连接成为一个列显示。
在查询中可以使用字符和日期的常量,表示固定的字符串或固定日期。字符和日期的常量需要用单引号引起。下一个训练是作为上一个训练的改进。
在查询中使用字符串常量。
输入并执行查询: 

1.SELECT  ename|| ‘ IS ‘||job AS "雇员和职务表" FROM emp;  

1.SELECT  ename|| ‘ IS ‘||job AS "雇员和职务表" FROM emp;  

输出结果为: 

1.雇员和职务表
2.    -----------------------
3.    SMITH IS CLERK
4.    ALLEN IS SALESMAN  

1.雇员和职务表
2.    -----------------------
3.    SMITH IS CLERK
4.    ALLEN IS SALESMAN  

说明:本练习中将雇员名称、字符串常量“ IS ”和雇员职务3个部分连接在一起。

数据库别名AS区别

时间: 2024-10-05 05:05:02

数据库别名AS区别的相关文章

什么是数据仓库,与数据库有什么区别

什么是数据仓库,与数据库有什么区别 数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented).集成的(Integrate).相对稳定的(Non-Volatile).反映历史变化(Time Variant)的数据集合,用于支持管理决策. (1) 面向主题:指数据仓库中的数据是按照一定的主题域进行组织. (2) 集成:指对原有分散的数据库数据经过系统加工, 整理得到的消除源数据中的不一致性. (3) 相对稳定:指一旦某个数据进入数据仓库以后只需要定期的加载.刷新.

SQL Server数据库和MySQL数据库有什么区别?

SQL Server数据库和MySQL数据库有什么区别呢?详细很多初入IT行业的朋友对于SQL Server数据库和MySQL数据库经常搞混,认为这两种数据库是同一种,其实不然,今天我们来分析一下这两种数据库的不同之处:SQL Server数据库和MySQL数据库有什么区别    1,优点分析:MYSQL短小精悍,容易上手,操作简单,免费供用的.相对其它数据库有特色又实用的语法多一些.SQL怎么也算是大型数据库,稳定,能做一般大系统的数据仓库,运行速度明显比MYSQL快N多(海量数据下这个优势显

MySQL、MongoDB、Redis 数据库之间的区别与使用(本章迭代更新)

MySQL.MongoDB.Redis 数据库之间的区别与使用 MySQL.MongoDB.Redis 数据库之间的区别与使用(本章迭代更新) update:2019年2月20日 15:21:19(本章迭代更新) 一.数据库之间的区别 MySQL MySQL概述 关系型数据库.无论数据还是索引都存放在硬盘中.到要使用的时候才交换到内存中.能够处理远超过内存总量的数据. 在不同的引擎上有不同 的存储方式. 查询语句是使用传统的 SQL 语句,拥有较为成熟的体系,成熟度很高. 开源数据库的份额在不断

Oracle、MySQL和Sqlserver的事务管理、分页和别名的区别

1.在mysql中事务默认是自动提交的,只有设置autocommit为0的时候,才用自己commit(commit--rollback回滚) 2.但是在oracle中必须自己commit;不然就只能结束这次事务之后才会提交 3.在sql server中go命名在我的理解和commit命令相同,就是为了完成一个事务提交的 4.对于分页,mysql使用limit.sql server使用top.oracle使用ROWNUM等伪列 5.oracle中的varchar2和varchar相比,具备了向后兼

MyISAM与Innodb数据库引擎的区别

1. 存储结构 2. 存储空间 3. 可移植性.备份及恢复 4. 事务支持 5. 自增长 6. 表锁差异 7. 全文索引 8. 表主键 9. 表的具体行数 10. CURD操作 11. 外键 MySQL存储引擎中的MyISAM和InnoDB区别详解

数据库与数据仓库区别

数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented).集成的(Integrate).相对稳定的(Non-Volatile).反映历史变化(Time Variant)的数据集合,用于支持管理决策. (1) 面向主题:指数据仓库中的数据是按照一定的主题域进行组织. (2)集成:指对原有分散的数据库数据经过系统加工, 整理得到的消除源数据中的不一致性. (3)相对稳定:指一旦某个数据进入数据仓库以后只需要定期的加载.刷新. (4)反映历史变化:指通过这些信息,对

【SQL】行转列过滤,使用别名和不使用别名的区别用法。

需求为: 仿太平洋网站筛选. 多选类型的字段应采用‘并且’:单选和录入类型的字段应采用‘或者’ 比如有如下选项: 参数头 参数体 操作系统(多选) win7 win8 运行内存(单选) 2G 4G 商品库存在有3个商品,分别为: lenovoB111,操作系统:win7.win8,运行内存:2G lenovoB222,操作系统:win7.win8,运行内存:4G lenovoB333:操作系统:win10,运行内存4G 那这个时候,我吧上面的选项win7.win8.2G.4G全部勾选后,点击商品

图解Nosql(hbase)与传统数据库的区别

图解Nosql(hbase)与传统数据库的区别http://www.aboutyun.com/thread-7804-1-1.html(出处: about云开发) 问题导读:1.nosql数据库能否删除列2.nosql数据库如何删除一条记录3.nosql数据库列族和lieder区别是什么?4.nosql操作与传统数据库的操作区别在什么地方? 对于大多数做技术的人员,都知道我们传统数据库是什么样子的,那么如下图所示,我们操作的对象是行.也就是增删改查,都是以为对象. 1.传统数据库增加删除介绍 图

Hbase总结(一)-hbase命令,hbase安装,与Hive的区别,与传统数据库的区别,Hbase数据模型

Hbase总结(一)-hbase命令 下面我们看看HBase Shell的一些基本操作命令,我列出了几个常用的HBase Shell命令,如下: 名称 命令表达式 创建表 create '表名称', '列名称1','列名称2','列名称N' 添加记录 put '表名称', '行名称', '列名称:', '值' 查看记录 get '表名称', '行名称' 查看表中的记录总数 count  '表名称' 删除记录 delete  '表名' ,'行名称' , '列名称' 删除一张表 先要屏蔽该表,才能对