Kingbase-查询-选择列表

3 选择列表
如前面的章节说明的那样,在 SELECT 命令里的表表达式构造了一个中间的虚拟表,方法可能有组合表、视
图、消除行、分组等等。这个表最后被选择列表传递下去处理。选择列表判断中间表的哪个列是实际输出。
3.1 选择列表项
最简单的选择列表类型是 * ,它发出表表达式生成的所有列。否则,一个选择列表是一个逗号分隔的值表达
式的列表(和在 值表达式 里定义的一样)。例如,它可能是一个列名的列表:
SELECT a, b, c FROM ...
列名字 a b c 要么是在 FROM 子句里引用的表中列的实际名字,要么是像 表和列别名 里解释的那样的
别名。在选择列表里可用的名字空间和在 WHERE 子句里的一样,除非你使用了分组,这时候它和 HAVING
子句一样。
如果超过一个表有同样的列名,那么还必须给出表名字,如:
SELECT tbl1 . a, tbl2 . a, tbl1 . b FROM ...
在使用多个表时,要求一个特定表的所有列也是有用的:
SELECT tbl1 .* , tbl2 . a FROM ...
更多有关 “table_name“ .* 记号的内容请参考 在查询中使用组合类型
如果将任意值表达式用于选择列表,那么它在概念上向返回的表中增加了一个新的虚拟列。值表达式为结
果的每一行进行一次计算,对任何列引用替换行的值。不过选择列表中的这个表达式并非一定要引用来自
FROM 子句中表表达式里面的列,例如它也可以是任意常量算术表达式。
3.2 列标签
选择列表中的项可以被赋予名字,用于进一步的处理。例如为了在一个 ORDER BY 子句中使用或者为了客
户端应用显示。例如:
SELECT a AS value, b + c AS sum FROM ...
如果没有使用 AS 指定输出列名,那么系统会分配一个缺省的列名。对于简单的列引用,它是被引用列的名
字。对于函数调用,它是函数的名字。对于复杂表达式,系统会生成一个通用的名字。
只有在新列无法匹配任何 KingbaseES 关键词(见 SQL 关键词)时, AS 关键词是可选的。为了避免一个关键
字的意外匹配,可以使用双引号来修饰列名。例如, VALUE 是一个关键字,所以下面的语句不会工作:
SELECT a value, b + c AS sum FROM ...
但是这个可以:
SELECT a "value" , b + c AS sum FROM ...
为了防止未来可能的关键词增加,推荐总是写 AS 或者用双引号修饰输出列名。
Note: 输出列的命名和在 FROM 子句里的命名是不一样的(参阅 表和列别名 )。它实际上允许你对同一个列
命名两次,但是在选择列表中分配的名字是要传递下去的名字。
3.3 DISTINCT
在处理完选择列表之后,结果表可以可选的删除重复行。可以直接在 SELECT 后面写上 DISTINCT 关键字
来指定:
SELECT DISTINCT select_list ...
(如果不用 DISTINCT 你可以用 ALL 关键词来指定获得的所有行的缺省行为)。
显然,如果两行里至少有一个列有不同的值,那么我们认为它是可区分的。空值在这种比较中被认为是相同
的。
另外,还可以用任意表达式来判断什么行可以被认为是可区分的:
SELECT DISTINCT ON (expression [, expression ... ]) select_list ...
这里 “expression“ 是任意值表达式,它为所有行计算。如果一个行集合里所有表达式的值是一样的,那么我们
认为它们是重复的并且因此只有第一行保留在输出中。请注意这里的一个集合的“第一行”是不可预料的,
除非你在足够多的列上对该查询排了序,保证到达 DISTINCT 过滤器的行的顺序是唯一的( DISTINCT ON
处理是发生在 ORDER BY 排序后面的)。
DISTINCT ON 子句不是 SQL 标准的一部分,有时候有人认为它是一个糟糕的风格,因为它的结果是不可判
定的。如果有选择的使用 GROUP BY 和在 FROM 中的子查询,那么可以避免使用这个构造,但是通常它是
更方便的候选方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值