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 中的子查询,那么可以避免使用这个构造,但是通常它是
更方便的候选方法。
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值