如何解决ORACLE中表一得列名的别名为另一表中的某一字段的值

如何解决ORACLE中表一得列名的别名为另一表中的某一字段的值,第1张

列的别名也可以不用as,如:selecttaxxxfromtablet

在oracle数据库中,数据表别名是不能加as的,例如:

selectaappnamefromappinfoa;--正确

selectaappnamefromappinfoasa;--错误

注释:这可能是为了防止和oracle数据库中的存储过程中的关键字as冲突的问题。

当select的表达式很长时,我们经常会用as子句为该表达式指定别名,然而却发现无法在Where条件中直接使用该别名作为判断条件

例如下面的SQL语句:

select id, (c1 + c2) as s from t1 where s > 100

运行会报错: “列名 s 无效”

当然,写成

select id, (c1 + c2) as s from t1 where (c1 + c2) > 100

就可以。

SQL语句中,为什么where子句不能使用列别名,而order by却可以?

在ORACLE中,select 语句的执行顺序是:

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语句

在SQLServer中,select语句的执行顺序是:

(1)FROM JOIN ON

(2)WHERE 

(3)GROUP BY

(4)HAVING

(5)SELECT DISTINCT TOP() 

(6)ORDER BY

由select语句的执行顺序,我们可以发现在where子句执行的时候,取别名的语句还没执行,即该别名不存在,自然就不能使用了,而order by的时候别名就已经命名好了。

我们还可以知道:如果在from子句中指定了表别名,那么它所在的select 语句中其他子句都必须使用表别名来代替原始的表名,因为from子句是select语句中最先被执行的。

直接把语句用括号括起来,然后as别名即可。

如:

select a from

(select   from emp where deptno=10) as a,

(select  from emp where sal>2000) as b

where aempno=bempno;

语句中a和b就是别名,但注意查询中字段一定要加上别名的前缀,避免语句报错。

MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:

1、数据库名与表名是严格区分大小写的;

2、表的别名是严格区分大小写的;

3、列名与列的别名在所有的情况下均是忽略大小写的;

4、变量名也是严格区分大小写的;

MySQL在Windows下都不区分大小写。

所以在不同 *** 作系统中为了能使程序和数据库都能正常运行,最好的办法是在设计的时候都转为小写,但是如果在设计的时候已经规范化大小写了,那么在Windows环境下只要对数据库的配置做下改动就行了,具体 *** 作如下:

在MySQL的配置文件中myini [mysqld]

中增加一行

lower_case_table_names = 1

参数解释:

0:区分大小写

1:不区分大小写在 MySQL

中,数据库和表对就于那些目录下的目录和文件。因而, *** 作系统的敏感性决定数据库和表命名的大小写敏感。这就意味着数据库和表名在

Windows 中是大小写不敏感的,而在大多数类型的 Unix

系统中是大小写敏感的。

奇怪的是列名与列的别名在所有的情况下均是忽略大小写的,而表的别名又是区分大小写的。

要避免这个问题,你最好在定义数据库命名规则的时候就全部采用小写字母加下划线的组合,而不使用任何的大写字母。

或者也可以强制以 -O lower_case_table_names=1 参数启动

mysqld(如果使用 --defaults-file=\mycnf

参数来读取指定的配置文件启动 mysqld

的话,你需要在配置文件的 [mysqld] 区段下增加一行

lower_case_table_names=1)。这样MySQL

将在创建与查找时将所有的表名自动转换为小写字符(这个选项缺省地在

Windows 中为 1 ,在 Unix 中为 0。从 MySQL 402

开始,这个选项同样适用于数据库名)。

平均值。

它是是列别名,在SQL中就是意味着根据提供的不同的数值,通过函数方式取得平均值,非常的快速便捷。

不起别名的话avg(sal)这个东西不会显示字段名的,在子查询中别名作用很大,就是给这个东西起了个好认的名字。通常会根据所提供的函数,可以快速便捷的得到平均值。

sqlserver查询的执行顺序是:

(1)FROM <left_table> <join_type> JOIN <right_table> ON <on_predicate>

(2)WHERE <where_predicate>

(3)GROUP BY <group_by_specification>

(4)HAVING <having_predicate>

(5)SELECT DISTINCT TOP(<top_specification>) <select_list>

(6)ORDER BY <order_by_list>

所以在where执行的时候,别名还不存在,而order by的时候已经存在

以上就是关于如何解决ORACLE中表一得列名的别名为另一表中的某一字段的值全部的内容,包括:如何解决ORACLE中表一得列名的别名为另一表中的某一字段的值、SQL语句中,子句不能使用列别名问题、数据库的查询语句的别名怎么起啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9775621.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存