Apr 4

SQL语句中的AS关键字 晴

海水 , 19:38 , 技术学习 , 评论(0) , 引用(0) , 阅读(500) , Via 本站原创

    在SQL语句中我们可以使用AS关键字将一个查询返回结果集的列重命名,为什么说列,而不说字段呢?因为我们的SQL语句可以进行一些运算,那么得到的结果集就有一些可能不是原表中的字段,比如:

   select count(*) from tbl_news

   这条语句返回的是tbl_news这个表的记录总数,而不是这个表中某个字段的值。

    那么,可以看到得到的这个列名是 Expr1000 这样我们在写程序时就引用起来不方便了,即便是你硬要说这一样也可以引用啊!那在程序中看起来就不方便了,因为你为了确定这个列是什么还得去看SQL语句。另外一点就是:每种数据库对于这条语的执行结果都是不尽相同的,比如有些数据库的执行结果返回的列名直接就是:count(*)  ,这就会造成程序的通用性下降了,所以我们就需要使用AS关键字来对返回结果集中的一列重命名,我们把语句改成这样:

   select count(*) as countnum from tbl_news

    执行后可以看到统计这一列已经被重命名为countnum了,而这条SQL语句在所有的数据库系统中执行的返回结果列名都是一致的,这就解决了上面所说的问题。

    而且,我们重命名列名后还可以把这些列名用于其它的SQL子句中,比如ORDER BY 、 GROUP BY 等,如:

    select n_ncid,count(*) as countnum from tbl_news group by n_ncid order by countnum

    请不要拿这条语句在ACCESS中调试,因为ACCESS不支持,这里写这样的句子,是为了告诉大家重命名字段的用途,而字段重命名后可以用在哪些地方就是依据不同的数据库所支持不同功能 的SQL语句来定了。例如说 SQL SERVER所支持的SQL语句就比ACCESS丰富的多,而ORACLE数据库支持的某些SQL语句,SQL SERVER又不支持,正如我们在讲解SQL语句之前所说的,虽然有标准的SQL语句,但各数据库厂商不是完全遵照这个标准来做的,有的支持的多,有的支持的少,等等。

    再看字段重命名的例子,有时候当我们多个表的字段有重名时,为了防止查询结果中出现同名字段名,我们需要将字段名重命名,比如这条语句:

    select tablea.t_id as tblaid,tableb.t_id as tblbid from tablea,tableb where ....

    这样我们得到的列名就是tablaid  tablbid  也就避免混淆了。

    AS关键字不光可以重命名列名,还可以将表名重命名,比如,当我们的一些表名很长,而一条SQL语句又很复杂时,为了便于观看,我们可以对表名进行重命名,看下面这条语句:

    select ta.id,tb.*,tc.fielda,td.xxx from tbl_newsclassup as ta,tbl_newsclassthis as tb,tbl_newsclasstype as tc,tbl_newsclasslevel as td where ta.id=tb.tnct_id and tb.tt_id=tc.xx_id and ta.id=td.tncl_id order by ta.id desc tb.tnct_id desc,tc.xx_id desc,td.tncl_id desc

    大家不要看花眼了,在这个SQL语句的FROM子句中我们从 tbl_newsclassup tbl_newsclassthis tbl_newsclasstype tbl_newsclasslevel 四个表中查询数据,而我们要求返回的字段又是多个表中的不同字段,并且我们的WHERE子句也比较复杂,还有排序字段。其中在FORM子句中我们将四个表使用AS关键字重新命名为ta,tb,tc,td,这样,在SQL语句的其它任意地方都可以使用重命名后的表名来引用这个表中的字段。

    如果我们不对表重新命名的话,所需要写的SQL语句将是这样的:

    select tbl_newsclassup.id,tbl_newsclassthis.*,tbl_newsclasstype.fielda,tbl_newsclasslevel.xxx from tbl_newsclassup,tbl_newsclassthis,tbl_newsclasstype,tbl_newsclasslevel where tbl_newsclassup.id=tbl_newsclassthis.tnct_id and tbl_newsclassthis.tt_id=tbl_newsclasstype.xx_id and tbl_newsclassup.id=tbl_newsclasslevel.tncl_id order by tbl_newsclassup.id desc tbl_newsclassthis.tnct_id desc,tbl_newsclasstype.xx_id desc,tbl_newsclasslevel.tncl_id desc

    对比这两条能实现同样功能的语句,相信不用多说,大家就知道该使用哪条语句了吧?

    以上所述就是AS关键字的使用方法和好处。

    注意:对于前半段所说的AS关键字对于重命名列名后在某些数据库中不能使用的情况,大家需要查阅相关数据库所提供的手册。

Tags: ,
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]