【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中的子查询,可以避免这种构造,但它通常是最方便的替代方案。

相关推荐
JAVA不会写18 分钟前
在Mybatis plus中如何使用自定义Sql
数据库·sql
IT 小阿姨(数据库)19 分钟前
PgSQL监控死元组和自动清理状态的SQL语句执行报错ERROR: division by zero原因分析和解决方法
linux·运维·数据库·sql·postgresql·centos
ChinaRainbowSea43 分钟前
7. LangChain4j + 记忆缓存详细说明
java·数据库·redis·后端·缓存·langchain·ai编程
小马学嵌入式~2 小时前
嵌入式 SQLite 数据库开发笔记
linux·c语言·数据库·笔记·sql·学习·sqlite
Java小白程序员2 小时前
MyBatis基础到高级实践:全方位指南(中)
数据库·mybatis
Monly212 小时前
人大金仓:merge sql error, dbType null, druid-1.2.20
数据库·sql
不宕机的小马达2 小时前
【Mysql|第一篇】Mysql的安装与卸载、Navicat工具的使用
数据库·mysql
float_六七2 小时前
数据库连接池:性能优化的秘密武器
数据库·oracle·性能优化
码界奇点3 小时前
MongoDB vs MySQLNoSQL与SQL数据库的架构差异与选型指南
数据库·sql·mongodb·系统架构
IT 小阿姨(数据库)3 小时前
PgSQL中pg_stat_user_tables 和 pg_stat_user_objects参数详解
linux·运维·数据库·sql·postgresql·oracle