↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 7.0
历史版本PostgreSQL 7.0 已于 2005 年 5 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

2.7. 表达式

SQL92 允许用表达式 变换表中的数据。表达式可以包含操作符 (详见 操作符) 和函数(函数 有更多信息)。

一个表达式是下列之一:

( a_expr )
常量
属性
a_expr binary_operator a_expr
a_expr right_unary_operator
left_unary_operator a_expr
参数
函数表达式
聚合表达式

我们已经讨论过常量和属性。三种操作符表达式分别表示二元(中缀)、 右一元(后缀)和左一元(前缀)操作符。下面的小节讨论剩下的选项。

2.7.1. 参数

参数用来表示 SQL 函数中的一个参数。这典型地用在 SQL 函数定义语句中。参数的形式是:

$number
     

例如,考虑一个函数 dept 的定义:

CREATE FUNCTION dept (name)
        RETURNS dept
        AS 'select * from 
            dept where name=$1'
        LANGUAGE 'sql';
     

2.7.2. 函数表达式

函数表达式是一个合法 SQL 函数的名称,后跟放在 圆括号内的参数列表:

function (a_expr [, a_expr ... ] )
     

例如,下面计算一个雇员薪水的平方根:

sqrt(emp.salary)
     

2.7.3. 聚合表达式

一个聚合表达式表示将聚合函数应用于查询选中的各行。 聚合函数将多个输入归约为单个输出值,例如输入的和或平均值。 聚合表达式的语法可以是以下形式之一:

aggregate_name (expression)
aggregate_name (ALL expression)
aggregate_name (DISTINCT expression)
aggregate_name ( * )

其中 aggregate_name 是先前定义的聚合,而 expression 是任何本身不包含聚合表达式的表达式。

第一种形式的聚合表达式为所有使给定表达式产生非空值的输入行调用聚合。 第二种形式和第一种相同,因为 ALL 是默认选项。第三种形式为输入行中 表达式的所有非空可区分值调用聚合。最后一种形式为每一个输入行调用一次聚合 而不管值是空还是非空;因为没有指定特定的输入值,它通常只对 count() 聚合有用。

例如,count(*) 得到输入行的总数;count(f1) 得到输入行中 f1 为非空的数量; count(distinct f1) 得到 f1 的非空可区分值的数量。

2.7.4. 目标列表

一个目标列表是放在圆括号内、以逗号分隔的一个或多个 元素的列表,每个元素必须是下列形式:

a_expr [ AS result_attname ]
     

其中 result_attname 是要创建的属性的名称(在更新语句的情况下则是已存在的属性名)。如果 result_attname 不存在,那么 a_expr 必须只包含一个属性名,该属性名被假定是结果字段的名称。在 Postgres 中,只有当 a_expr 是一个属性时才使用默认命名。

2.7.5. 限定条件

一个限定条件由任意数量的子句构成,子句之间用逻辑 操作符连接:

NOT
AND
OR

子句是一个在一组实例上求值为 boolean 的 a_expr。

2.7.6. From 列表

from 列表是以逗号分隔的from 表达式 列表。每个"from 表达式"的形式是:

[ class_reference ] instance_variable
        {, [ class_ref ] instance_variable... }
     

其中 class_reference 的形式是

class_name [ * ]
     

"from 表达式"定义一个或多个实例变量,它们取值于 class_reference 所指示的类。通过在后面追加 指示符星号("*"),还可以让实例变量取值于继承层次中位于所指示类之下的 所有类。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。