sql 表的别名到底要怎么定义
经常会需要多次用到同一个表,是否只要定义一次别名就够了?子句里面还是主句里面?自己看别人的语句,明明定义过,但是还是有的地方一定要重新写一遍,不能用别名。这跟语句的执行顺...
经常会需要多次用到同一个表,是否只要定义一次别名就够了?子句里面还是主句里面?自己看别人的语句,明明定义过,但是还是有的地方一定要重新写一遍,不能用别名。这跟语句的执行顺序有关系吗?求高手指点。比如下面语句中的A表,定义之后,还是有两个地方要重新写。为什么?
SELECT D.城市,D.城市1,SUM(D.销售数量) AS 销售总量
FROM
(SELECT C.*,B.城市1
FROM [手机销售$] C,
(SELECT
城市,
( SELECT COUNT(*)+1
FROM
( SELECT 城市,SUM(销售数量) AS 数量汇总
FROM [手机销售$]
GROUP BY 城市)
WHERE 数量汇总>A.数量汇总) AS T,
LEFT(" ",4-LEN(T)) & T & "-" & 城市 AS 城市1
FROM
(SELECT 城市,SUM(销售数量) AS 数量汇总
FROM [手机销售$]
GROUP BY 城市) A )B
WHERE C.城市=B.城市) D
GROUP BY D.城市,D.城市1
ORDER BY D.城市1 展开
SELECT D.城市,D.城市1,SUM(D.销售数量) AS 销售总量
FROM
(SELECT C.*,B.城市1
FROM [手机销售$] C,
(SELECT
城市,
( SELECT COUNT(*)+1
FROM
( SELECT 城市,SUM(销售数量) AS 数量汇总
FROM [手机销售$]
GROUP BY 城市)
WHERE 数量汇总>A.数量汇总) AS T,
LEFT(" ",4-LEN(T)) & T & "-" & 城市 AS 城市1
FROM
(SELECT 城市,SUM(销售数量) AS 数量汇总
FROM [手机销售$]
GROUP BY 城市) A )B
WHERE C.城市=B.城市) D
GROUP BY D.城市,D.城市1
ORDER BY D.城市1 展开
1个回答
展开全部
表名、列明后面接as xx,xx就是表/列的别名,as可省略
别名通常有两个作用,1是缩短对象的长度,方便书写,使名称语句简洁
2是区别同名对象,如自连接查询,同一个表要连接查询自身,那么一定要用别名来区分表名及列名
还有一点需要注意的是,如遇到引用派生表的情况,也一定要加表别名,如你的where 数量汇总这句前面的from(select)内部的select语句即是派生表,在查询分析器看来,这只是一个没有命名的数据集合,所以要想用from引用它需要给它加一个表别名来标识这个集合是个可用表
别名通常有两个作用,1是缩短对象的长度,方便书写,使名称语句简洁
2是区别同名对象,如自连接查询,同一个表要连接查询自身,那么一定要用别名来区分表名及列名
还有一点需要注意的是,如遇到引用派生表的情况,也一定要加表别名,如你的where 数量汇总这句前面的from(select)内部的select语句即是派生表,在查询分析器看来,这只是一个没有命名的数据集合,所以要想用from引用它需要给它加一个表别名来标识这个集合是个可用表
追问
为什么9-11行的语句不能用A代替,倒数4-6行定义了A作为别名的
追答
首先,倒数4-6行是个派生表,肯定要加别名,我上面提到过了
然后9-11行这里不能引用派生表A,貌似派生表不能被引用多次,
如果想要多次引用需要用公用表表达式,可以将派生表临时封装成视图引用
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |