Skip to main content

VALUES (SQL)

フィールド内で使用するデータ値を指定する INSERT/UPDATE 節です。

構文

(field1{,fieldn})
     VALUES (value1{,valuen})

概要

VALUES 節は INSERT 文、UPDATE 文、または INSERT OR UPDATE 文で使用され、フィールドに挿入するデータ値を指定します。通常は、以下のとおりです。

  • INSERT クエリは、以下の構文を使用します。

    INSERT INTO tablename (fieldname1,fieldname2,...)
         VALUES (value1,value2,...)
    
  • UPDATE クエリは、以下の構文を使用します。

    UPDATE tablename (fieldname1,fieldname2,...)
         VALUES (value1,value2,...)
    

VALUES 節の要素は、テーブル名の後で指定されているフィールドに連続して対応します。VALUES 節で 1 つの値だけが指定されている場合は、要素を括弧で囲む必要はありません。

以下の例は、単独の行を "Employee" テーブルに追加する INSERT 文を示しています。

INSERT INTO Employee (Name,SocSec,Telephone)
VALUES("Boswell",333448888,"546-7989")
INSERT INTO Employee (Name,SocSec,Telephone)
VALUES ('Boswell',333448888,'546-7989')

INSERT クエリと UPDATE クエリは、テーブル名の後にフィールド名のリストを明示的に指定せずに、VALUES 節を使用できます。テーブル名の後でフィールド名のリストを省略するには、クエリが次の 2 つの基準を満たしている必要があります。

  • VALUES 節で指定されている値の数は、テーブル内のフィールドの数と同じです (ID フィールドは除く)。

  • VALUES 節の値は、列 2 から始まるフィールドの内部列番号の順序でリストされます。列 1 は常にシステムによって作成された ID フィールド用として使用されるので、VALUES 節では指定されません。

例えば、以下にクエリがあります。

INSERT INTO Sample.Person VALUES (5,'John')

以下に別のクエリがあります。

INSERT INTO Sample.Person (Age,Name) VALUES (5,'John')

テーブル "Sample.Person" が 2 つのユーザ定義のフィールドを持っている場合、上と下のクエリは等しくなります。

この例では、値 5 が下位番号の列フィールドに割り当てられており、値 "John" がもう 1 つのフィールドに割り当てられています。

VALUES 節は、以下の埋め込み SQL の例のように配列の要素を指定できます。

   &sql( UPDATE Person(Tel)
        VALUES :per('tel',)
        WHERE ID = :id )

また、UPDATE クエリは、指定されていない最後の部分文字列を持つ配列を参照できます。したがって、INSERT は配列要素の有無を使用して、値と既定値を新規に作成された行に割り当てます。UPDATE は配列要素の存在を使用して、対応するフィールドが更新されることを示します。例えば、以下のような 6 列のテーブルに対する配列があるとします。

emp("profile",2)="Smith"
emp("profile",3)=2
emp("profile",3,1)="1441 Main St."
emp("profile",3,2)="Cableton, IL 60433"
emp("profile",5)=NULL
emp("profile",7)=25
emp("profile","next")="F"

列 1 は常に ID フィールド用のもので、ユーザ定義ではありません。挿入された "Employee" 行は列 2 の "Name" を "Smith" に設定し、列 3 の "Address" が 2 行の値を持つように設定し、列 4 の "Department" はここでは指定されていないので既定値に設定し、そして列 5 の "Location" は NULL に設定します。"Location" の既定値は、対応する配列要素が NULL 値で定義されているので、使用されません。配列要素 "7" と "next" は、"Employee" テーブルの列番号に対応しないので、クエリによって無視されます。ここでは、この配列を使用する UPDATE 文を示しています。

  &sql(UPDATE Employee
       VALUES :emp('profile',)
       WHERE Employee = 379)

上記の定義と配列値により、この文は RowID = 379 である "Employee" 行の "Name" フィールド、"Address" フィールド、"Location" フィールドを更新します。

ただし、添え字を完全に省略すると SQLCODE -54 エラーが発生します。VALUES の後に (最後の添え字が省略された) 配列識別子が必要です。

例えば以下のように、複数の行を対象にした UPDATE クエリを持つ配列参照を使用することもできます。

  &sql(UPDATE Employee
       VALUES :emp('profile',)
       WHERE Type = 'PART-TIME')

VALUES 節変数は、ドット構文を使用できません。したがって、以下の埋め込み SQL の例では正常に動作します。

   SET sname = state.Name
   &sql(INSERT INTO StateTbl VALUES :sname)

以下は不適切です。

     &sql(INSERT INTO State VALUES :state.Name)

NULL と空白文字列値は異なります。詳細は "NULL" を参照してください。後方互換性では、古い既存データ内にあるすべての空白文字列 ('') 値は NULL 値と見なされます。新規データでは、空白文字列は $CHAR(0) としてデータ内に保存されます。SQL では、NULL は 'NULL' と記述されます。以下はその例です。

INSERT INTO Sample.Person
(SSN,Name,Home_City) VALUES ('123-45-6789','Doe,John',NULL)

SQL では、空白文字列は '' (2 つの一重引用符) と記述されます。以下はその例です。

INSERT INTO Sample.Person
(SSN,Name,Home_City) VALUES ('123-45-6789','Doe,John','')

ID フィールドに NULL 値は挿入できません。

引数

field

フィールド名、またはコンマで区切られたフィールド名のリスト。

value

値、あるいはコンマで区切られた値のリスト。各値は対応するフィールドに割り当てられています。

以下の例は、"Doe,John" のレコードを Sample.Person テーブルに挿入します。次に、このレコードを選択して、このレコードを削除します。2 番目の SELECT で削除を確認します。

INSERT INTO Sample.Person (Name,SSN,Home_City) VALUES ("Doe,John","123-45-6789","Metropolis")
SELECT Name,SSN,Home_City FROM Sample.Person WHERE Name ="Doe,John"
DELETE FROM Sample.Person WHERE Name="Doe,John"
SELECT Name,SSN FROM Sample.Person WHERE Name='Doe,John'

関連項目

FeedbackOpens in a new tab