値式は、例えばSELECTコマンドのターゲットリストとして、 INSERT或いはUPDATE の新しいカラム値として,もしくはいくつかのコマンドの検索条件 として様々な文脈のなかで使われます。値式の結果は、テーブル式の結果 (つまりテーブルです)から区別するために時として スカラーと呼ばれます。したがって、値式は スカラー式(もしくはもっと簡単に 式)とも呼ばれます。式の構文は、 算術、論理、集合、そして他の演算を使った初期の部分からの値の計算 を許します。
値式は下記のうちのどれかです。
定数あるいはリテラル値。Section 1.1.2 を見て下さい。
カラムの参照。
演算子の呼び出しです。
式 演算子 式 (二項中置演算子) |
演算子 式 (単項接頭演算子) |
式 演算子 (単項接尾演算子) |
( 式 )括弧は副式をまとめ優先順位を変更するために使われます。
関数宣言の本体の中の、位置パラメータの参照です。
関数呼び出し
集計式
スカラー副問い合わせ。これは通常のSELECT に括弧を付けたもので、一つのカラムに付き正確に一つの 行を返します。値式の中で、一つ以上の行あるいはカラムを返す 副問い合わせを使うことは間違いです。
このリストに加えて、式として分類されるけれども一般的な構文ルール には従わないいくつかの構成要素があります。これらは一般的に 関数あるいは演算子の意味を持ち、Chapter 4の相応する部分で説明されています。例として IS NULLがあります。
Section 1.1.2ですでに定数については 説明しました。続く節では残りのオプションについて説明します。
カラムは下記のような形式で参照することができます。
相関名.カラム名 `['配列要素`]'相関名はテーブル名、FROM 句で 定義されたテーブルの別名、もしくはキーワード NEW か OLDのいずれかです。 (NEW と OLD はルールのアクション部分でしか使えませんが、 他の相関係数名はどの SQL 文でも使うことができます。) 相関係数名は、もしカラム名が現在の問い合わせで使われる全ての テーブルを通して一意である場合は省略しても構いません。もし カラムが配列型だった場合、オプション の配列要素が特定の要素を配列から 選択します。もし配列要素が提供されない場合、配列全体が 選択されます。それぞれの場合の許可される構文は PostgreSQL リファレンスマニュアル の特定のコマンドの説明を見て下さい。
位置パラメータの参照は SQL 関数のパラメータを示すために使われます。 これは典型的に SQL 関数定義ステートメントで使われます。 パラメータの形式は以下です。
$数字
例えば、関数deptの定義が以下のように されたとします。
CREATE FUNCTION dept (text) RETURNS dept AS 'select * from dept where name = $1' LANGUAGE 'sql';ここでは$1は関数が呼び出されるときに 最初の関数引数によって置き換えられます。
関数呼び出しの構文は関数名(これはSection 1.1.1の識別子の構文ルールの対象です) のあとに括弧で閉じた引数リストがあるものです。
関数 ([式
[, 式 ... ]] )
例えば、下記は 2 の平方根を計算します。
sqrt(2)
組み込み関数のリストはChapter 4にあります。 他の関数はユーザによって追加できます。
集計式は、問い合わせによって選択される 行にある集計関数のアプリケーションを表します。集計関数は、 例えば入力の合計や平均などのように、複数の入力を単一の出力値にします。 集計式の構文は下記のうちのいずれかです。
aggregate_name (expression) |
aggregate_name (ALL expression) |
aggregate_name (DISTINCT expression) |
aggregate_name ( * ) |
集計式の最初の形式は、与えられた式が非 NULL 値を生み出す全ての 入力行で、集計を呼び出します。(実際は、NULL を無視するかどうかは 集計関数しだいですが、全ての標準のものは無視します。) 二番目の形式はALLがデフォルトなので 最初のものと同じです。三番目の形式は、入力行の中で見つけられる 式の全ての別個の非 NULL 値のための集計を呼び出します。 最後の形式は NULL か非 NULL 値かに関わらず、それぞれの入力行 に対して一回ずつ集計を呼び出します。特定の入力値が指定されていないため 、これは一般的にcount()集計関数でのみ 役に立ちます。
例えば、count(*)は入力行の合計数を出します。 count(f1)はf1が非 NULL である 入力行の数を出します。count(distinct f1) はf1の別個の非 NULL 値の数を出します。
既に定義された集計関数はSection 4.12で説明されています。他の集計関数 はユーザによって追加することができます。