PostgreSQL | ||
---|---|---|
上一页 | 第二章. SQL 语法 | 下一页 |
一个表达式是下表中的一种:
( a_expr ) |
常量 |
字段 |
a_expr binary_operator a_expr |
a_expr right_unary_operator |
left_unary_operator a_expr |
参数 |
函数表达 |
聚集表达 |
我们已经讨论了常量和字段。三种操作符表达式分别表示双目(中缀),右目(后缀)和左目(前缀)操作符。下面章节讨论剩下的选项。
$number例如,假设一个函数 dept 的定义如下
CREATE FUNCTION dept (name) RETURNS dept AS 'select * from dept where name=$1' LANGUAGE '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 |
一个子句是一个对一套实例计算生成一个 boolean 的 a_expr。
[ class_reference ] instance_variable {, [ class_ref ] instance_variable... }这里 class_reference 是下面形式
class_name [ * ]"from 表达式"定义一个或多个实例变量以圈定 class_reference 里指明的表的范围。我们同样还可以用后跟星号("*")限定符的方法要求实例变量的范围包括在继承级中低于指定表的所有表。
上一页 | 首页 | 下一页 |
操作符 | 开头 | 数据类型 |