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 裡指明的表的範圍。我們同樣還可以用後跟星號("*")限定符的方法要求實例變數的範圍包括在繼承級中低於指定表的所有表。


上一頁 首頁 下一頁
運算符號 開頭 數據型態