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[ ASresult_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 所指示的类。通过在后面追加指示符星号("*"),还可以让实例变量取值于继承层次中位于所指示类之下的所有类。