7.17.1 表値構成子の指定形式および規則
表値構成子には,導出表を構成する行(行値構成子の集合)を指定します。
- 〈この項の構成〉
(1) 指定形式
表値構成子::=VALUES 行値構成子〔,行値構成子〕…
(2) 指定形式の説明
- 行値構成子:
-
行値構成子には,1つ以上の行値構成子要素を指定します。各行値構成子要素の値が,導出表の1行の各列の値になります。行値構成子については,「7.18 行値構成子」を参照してください。
表値構成子の指定例を次に示します。
(例)
表値構成子中の行値構成子の行値構成子要素には,次のどれかを指定できます。
-
値指定
値指定については,「7.22 値指定」を参照してください。
-
スカラ関数CAST
スカラ関数CASTについては,「8.13.3 CAST」を参照してください。
スカラ関数CASTを指定する場合,次の指定規則があります。
-
変換対象データには,NULLまたは?パラメタだけを指定できます。
-
-
スカラ関数CONVERT
スカラ関数CONVERTについては,「8.13.5 CONVERT」を参照してください。
スカラ関数CONVERTを指定する場合,次の指定規則があります。
-
変換対象データには,NULLまたは?パラメタだけを指定できます。
-
書式指定は指定できません。
-
-
(3) 規則
-
各行値構成子の行値構成子要素の数は同じにしてください。
正しい指定例:VALUES (11,12,13),(21,22,23),(31,32,33)
誤った指定例:VALUES (11,12,13),(21,22),(31,32,33,34)
-
各行値構成子のi番目の行値構成子要素のデータ型は,それぞれ比較できるデータ型にしてください。比較できるデータ型については,「6.2.2 変換,代入,比較できるデータ型」の「(1) 比較できるデータ型」を参照してください。
正しい指定例:VALUES (11,12,13),(21.1,22.2,23.3),(1.0E+1,1.0E+2,1.0E+3)
誤った指定例:VALUES (11,12,13),('AB','CD',23)
なお,次に示すデータは比較できません。
-
日付データと日付を表す既定の入力表現
-
時刻データと時刻を表す既定の入力表現
-
時刻印データと時刻印を表す既定の入力表現
-
-
表値構成子によって導出されるi番目の列の結果のデータ型とデータ長は,各行値構成子のi番目の行値構成子要素のデータ型によって決まります。詳細については,「7.21.2 値式の結果のデータ型」を参照してください。
-
表値構成子中には行値構成子を,最大30,000個指定できます。
-
1SQL文中に指定できる表値構成子と問合せ指定の合計数は,最大1,024個です。
-
表値構成子中の行値構成子の行値構成子要素には,?パラメタを単独で指定できません。
(4) 例題
- 例題1
-
表値構成子を指定したSELECT文を実行します。
SELECT "C1","C2","C3" FROM (VALUES (11,12,13), (21,22,23) ) AS "V1"("C1","C2","C3")
下線部分が表値構成子の指定です。
実行結果の例
- 例題2
-
販売履歴表(SALESLIST)と,表値構成子によって導出された顧客表(USERSLIST)から,商品コード(PUR-CODE)がP001の商品を購入したことがある顧客の一覧(顧客ID,名前)を,重複を除いて検索します。
SELECT DISTINCT "USERSLIST"."USERID","NAME" FROM "SALESLIST" INNER JOIN (VALUES('U001','Maria'),('U002','Nancy')) AS "USERSLIST"("USERID","NAME") ON "USERSLIST"."USERID"="SALESLIST"."USERID" WHERE "SALESLIST"."PUR-CODE"='P001'
下線部分が表値構成子の指定です。
- 例題3
-
顧客表(USERSLIST)に複数のデータを挿入します。
INSERT INTO "USERSLIST"("USERID","AGE") SELECT * FROM (VALUES('USER001',10),('USER002',20))
下線部分が表値構成子の指定です。