【PostgreSQL】数据查询-选择列表

PostgreSQL数据查询-选择列表

命令中的表表达式通过可能组合表、视图、消除行、分组等来构造中间虚拟表。此表最终由选择列表进行处理。选择列表确定实际输出中间表的哪些列。

选择列表项

最简单的选择列表类型是发出表表达式生成的所有列。否则,选择列表是以逗号分隔的值表达式列表(如第 4.2 节中所定义)。例如,它可以是列名列表:*

sql 复制代码
SELECT a, b, c FROM ...

列名称 a、 b和 c是子句中引用的表列的实际名称,或者是给它们的别名。选择列表中可用的命名空间与子句中的命名空间相同,除非使用分组,在这种情况下,它与子句中的名称空间相同。

如果多个表具有同名的列,则还必须提供表名,如下所示:

sql 复制代码
SELECT tbl1.a, tbl2.a, tbl1.b FROM ...

使用多个表时,请求特定表的所有列也很有用:

sql 复制代码
SELECT tbl1.*, tbl2.a FROM ...

有关table_name表示法的更多信息。

如果在选择列表中使用任意值表达式,则从概念上讲,它会向返回的表添加新的虚拟列。对每个结果行计算一次值表达式,并用该行的值替换任何列引用。但是,选择列表中的表达式不必引用子句的表表达式中的任何列;例如FROM,它们可以是常数算术表达式。

列标签

可以为选择列表中的条目指定名称以供后续处理,例如在子句中使用或由客户端应用程序显示。例如:ORDER BY

sql 复制代码
SELECT a AS value, b + c AS sum FROM ...

如果未使用 指定输出列名,则系统将分配默认列名。对于简单的列引用,这是引用的列的名称。对于函数调用,这是函数的名称。对于复杂表达式,系统将生成一个通用名称。AS

关键字通常是可选的,但在某些情况下,如果所需的列名与 PostgreSQL 关键字匹配,则必须写出或用双引号引出列名以避免歧义。(附录 C 显示了哪些关键字需要用作列标签。例如AS,就是这样一个关键字,所以这不起作用:

sql 复制代码
SELECT a from, b + c AS sum FROM ...

但其中任何一个都这样做:

SELECT a AS from, b + c AS sum FROM ...

sql 复制代码
SELECT a "from", b + c AS sum FROM ...

为了最大程度地防止将来可能添加关键字,建议您始终写或用双引号引出输出列名称。

注意:此处输出列的命名与子句中的命名不同(。可以将同一列重命名两次,但在选择列表中分配的名称是将要传递的名称。FROM

DISTINCT

处理完选择列表后,可以选择删除重复行的结果表。关键字直接写在后面以指定以下内容:DISTINCTSELECT

sql 复制代码
SELECT DISTINCT select_list ...

(可以使用关键字代替关键字来指定保留所有行的默认行为。DISTINCT ALL

显然,如果两行至少有一个列值不同,则认为它们是不同的。在此比较中,Null 值被视为相等。

或者,任意表达式可以确定哪些行被视为不同的行:

sql 复制代码
SELECT DISTINCT ON (expression [, expression ...]) select_list ...

此处 expression 是针对所有行计算的任意值表达式。所有表达式都相等的一组行被视为重复行,并且输出中仅保留该组的第一行。请注意,集合的"第一行"是不可预测的,除非查询在足够多的列上排序,以保证到达筛选器的行的唯一顺序。(排序后进行处理。DISTINCT DISTINCT ON ORDER BY

该子句不是 SQL 标准的一部分,有时被认为是不好的样式,因为它的结果可能具有不确定性。通过明智地使用 DISTINCT 和 ON GROUP BY中的子查询,可以避免这种构造,但它通常是最方便的替代方案。

相关推荐
月落星还在1 小时前
Redis 的过期策略与键的过期时间设置
数据库·redis·bootstrap
cg50174 小时前
MySQL数据库复杂的增删改查操作
数据库·mysql
虾球xz5 小时前
游戏引擎学习第147天
数据库·学习·游戏引擎
向上的车轮6 小时前
什么是时序数据库?有哪些时序数据库?常见的运用场景有哪些?
数据库·时序数据库
岱宗夫up7 小时前
【Python】Django 中的算法应用与实现
数据库·python·opencv·django·sqlite
比花花解语7 小时前
使用数据库和缓存的时候,是如何解决数据不一致的问题的?
数据库·缓存·数据一致性
YGGP8 小时前
Redis篇:基础知识总结与基于长期主义的内容更新
数据库·redis·缓存
KINICH ahau8 小时前
数据库1-2章
数据库·oracle
我想吃烤肉肉8 小时前
leetcode-sql数据库面试题冲刺(高频SQL五十题)
数据库·sql·leetcode
夏炎正好眠9 小时前
mysql练习
数据库·mysql