PostgreSQL
上一页 第二章. SQL 语法 下一页

表达式

SQL92 允许用 表达式 在表达式里转换数据。表达式可以包含操作符(参阅 操作符 获取更多信息)和函数(函数 节有更多信息)。

一个表达式是下表中的一种:
 
( a_expr )
常量
字段
a_expr binary_operator a_expr
a_expr right_unary_operator
left_unary_operator a_expr
参数
函数表达
聚集表达

我们已经讨论了常量和字段。三种操作符表达式分别表示双目(中缀),右目(后缀)和左目(前缀)操作符。下面章节讨论剩下的选项。

参数

一个参数用于表示一个 SQL 函数里面的一个参数。它的典型应用是在 SQL 函数定义语句里。参数的形式如下:
$number
例如,假设一个函数 dept 的定义如下
CREATE FUNCTION dept (name)
        RETURNS dept
        AS 'select * from 
            dept where name=$1'
        LANGUAGE 'sql';

函数表达式

一个函数表达式是一个合法 SQL 函数的名称,后面跟着它的用圆括号包围的参数列表:
function (a_expr [, a_expr ... ] )
例如,下面的语句计算一个雇员的薪水的平方根:
sqrt(emp.salary)

聚集表达式

一个聚集表达式提供给应用对由一个查询选出来的多个行的聚集功能。一个聚集函数把多个输入缩减为单个输出值,比如对输入的求和或平均。一个聚集表达式的语法是下面形式之一:
 
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 的不重复的总行数。

目标列表

一个目标列表是一个或多个插入括号的用逗号分隔的元素列表,每个都必须有下面形式:
a_expr [ AS result_attname ]
这里 result_attname 是要创建的字段名(或者在更新语句里的一个已经存在的字段名。)如果 result_attname 不存在,那么 a_expr 必须只包含一个字段名,这时它被假定为结果域的名称。在Postgres 里,只有 a_expr 是一个字段时才使用缺省命名。

资格条件

一个资格条件包含任何数目的由下面逻辑操作符连结的子句:
 
NOT
AND
OR

一个子句是一个对一套实例计算生成一个 booleana_expr

From 列表

from 列表是一个逗号分隔的 from 表达式 的列表。每个"from 表达式"是下面形式:
[ class_reference ] instance_variable
        {, [ class_ref ] instance_variable... }
这里 class_reference 是下面形式
class_name [ * ]
"from 表达式"定义一个或多个实例变量以圈定 class_reference 里指明的表的范围。我们同样还可以用后跟星号("*")限定符的方法要求实例变量的范围包括在继承级中低于指定表的所有表。

上一页 首页 下一页
操作符 开头 数据类型