Firebird SQL リファレンス:INSERT/UPDATE/DELETE
INSERT
指定したテーブルに、新しいいくつかの行を追加します。
SQL,DSQLおよびisqlから使用出来ます。
この文書は、公開されているIB6のSQLレファレンスを基とし、1.5.1までの
各リリースノートにおける追加内容に関して反映・統合されています。
構文
INSERT [TRANSACTION transaction] INTO <object> [(col [, col …])] {VALUES (<val> [, <val> …]) | <select_expr>};
<object> = tablename | viewname
<val> = {:variable | <constant> | <expr> | <function> | udf ([<val> [, <val> …]]) | NULL | USER | RDB$DB_KEY | ? } [COLLATE collation]
<constant> = num | 'string' | charsetname 'string'
<function> = CAST (<val> AS <datatype>) | UPPER (<val>) | GEN_ID (generator, <val>)
引数 | 説明 |
expr | 1つの値が得られるSQL式 |
select_expr | 挿入する列数と同じ数の列データが得られる、0行以上の取得結果が得られるSELECT文 |
詳細の説明
指定したテーブルまたビューに、新しいいくつかの行を追加します。列に入力する
値のソースとしては、定数(含む文字列)以外にも、式、UDF、任意のSELECT文による
クエリ結果などが指定可能です。
埋め込みSQL等の場合には、変数名も使用できます。
- プレースホルダ(例:"?")は、SQL及びisqlでは使用できません。
- DSQLとisqlでは、valに変数(:variable)は使用できません。
- BLOBの列に COLLATE を指定することは出来ません。
- DSQLの場合は行終端文字のセミコロンを指定してはなりません。 isql及びC/C++の埋め込みSQLでは行の終わりを示すために終端文字は必要です。
- 節の詳細の説明です。
引数 説明 TRANSACTION transaction 指定した名前のトランザクション下でINSERTが実行されます。
DSQL,isqlでは使用できません。INTO object データをインサートする、有効なテーブルまたはビューを指定します。 col 値をインサートする、有効なテーブルまたはビューのの列名を指定します。 VALUES (val [, val …]) テーブルまたはビューにインサートするデータのリスト。並び順はターゲットの列と同じ順番である必要がある select_expr ターゲットの列に挿入するデータを得るためのクエリ
INSERTは、1つ以上の新しい行データをテーブルまたはビューに追加します。 INSERTは、GRANTおよびREVOKE文により制御されるデーターベースに対する特権の 一つです。
(省略可能な)ターゲットとなる列のリストが示された場合、指定された値はリスト での列指定順に指定されているものとみなされます。指定がない列には、自動的に デフォルト値またはnullが設定されます。
ターゲットとなる列のリストが示されない(省略された)場合には、VALUE節には すべての列分の設定する値を記述しなければなりません。
1つの行をインサートする場合、通常はVALUESに値を指定して行います。
複数行のデータを一度にインサートする場合、別のテーブルからデータを取り出す select_expr指定を使います。ここで選択される列は、インサートするターゲット となる列の指定と一致しなければなりません。
重要 同じテーブルからインサートすることも可能ですが、無限ループに陥る 可能性があるので、お勧めしません。
TRANSACTION節は、多重トランザクションSQLアプリケーションにおいて、どの トランザクションがINSERTを実行するかを制御するためにあります。これはDSQLや isqlでは使用できません。
用例
- 単純な行の追加
INSERT INTO EMPLOYEE_PROJECT (EMP_NO, PROJ_ID) VALUES (100, 'Simple');
- 埋め込みSQLの例:割当てられた2つの変数の内容の行を追加します。
EXEC SQL INSERT INTO EMPLOYEE_PROJECT (EMP_NO, PROJ_ID) VALUES (:emp_no, :proj_id);
- isqlの例:SELECTにより指定された行の挿入
INSERT INTO PROJECTS SELECT * FROM NEW_PROJECTS WHERE NEW_PROJECTS.START_DATE > '6-JUN-1994';
参照
GRANT , REVOKE , SET TRANSACTION , UPDATE
UPDATE
テーブル、ビュー、アクティブなカーソルに対して、行のすべてまたは一部の
列データ値を変更します。
SQL,DSQLおよびisqlから使用出来ます。
この文書は、公開されているIB6のSQLレファレンスを基とし、1.5.1までの
各リリースノートにおける追加内容に関して反映・統合されています。
構文
SQL での構文:
UPDATE [TRANSACTION transaction] {table | view} SET col = <val> [, col = <val> …] [WHERE <search_condition> | WHERE CURRENT OF cursor];
DSQL,isql での構文:
UPDATE {table | view} SET col = <val> [, col = <val> …] [WHERE <search_condition>]
<val> = { col [<array_dim>] | :variable | <constant> | <expr> | <function> | udf ([<val> [, <val> …]]) | NULL | USER | ? } [COLLATE collation]
<array_dim> = [[x:]y [, [x:]y …]]
<constant> = num | 'string' | charsetname 'string'
<function> = CAST (<val> AS <datatype>) | UPPER (<val>) | GEN_ID (generator, <val>)
<expr> = 1つの値を返すSQL式
<search_condition> = CREATE TABLE を参照してください
詳細の説明
指定したテーブル、ビュー、アクティブなカーソルに対して、行のすべてまたは
一部の列値を更新します。値のソースとしては、定数(含む文字列)以外にも、式、
UDF、SQL式よるクエリ結果などが指定可能です。
埋め込みSQL等の場合には、変数名も使用できます。
- プレースホルダ(例:"?")は、SQL及びisqlでは使用できません。
- DSQLとisqlでは、valに変数(:variable)は使用できません。
- BLOBの列に COLLATE を指定することは出来ません。
- DSQLの場合は行終端文字のセミコロンを指定してはなりません。 isql及びC/C++の埋め込みSQLでは行の終わりを示すために終端文字は必要です。
- 節の詳細の説明です。
引数 説明 TRANSACTION transaction 指定した名前のトランザクション下でUPDATEが実行されます。
DSQL,isqlでは使用できません。table|view 更新対象の名前がテーブルかビューかを指定します。 SET col = val 指定列のに設定する値を指定します。 WHERE search_condition 検索更新時に指定します。更新対象になる行を検索する条件を指定します。 WHERE CURRENT OF cursor 位置指定更新時に指定します。更新対象になる行を特定するカーソルを指定します。 ? プレースホルダ。DSQLおよびisqlでは使用できません
UPDATEは、テーブルまたはビューの1つ以上の行データ更新します。 UPDATEは、GRANTおよびREVOKE文により制御されるデーターベースに対する特権の 一つです。
WHERE を使用することにより、指定条件に合致した行のみを変更することが出来 ます。ただし、これは配列の一部要素に対しては使用できません。
重要 WHERE節が省略された場合、すべての列に対して指定した更新が行われ ます。
WHERE CURRENT OF節によるカーソルによる位置指定更新の場合、1回の実行で1行 の更新が行われます。
※ BLOB列を更新する場合、UPDATEはすべてのBLOBを新しい値に置き換えます。
用例
- すべての行の指定列を変更します。
UPDATE CITIES SET POPULATION = POPULATION * 1.03;
- 指定された条件の行を変更します。
UPDATE TESTTABLES SET STATUS = 20, FLAG=0 WHERE FLAG = 1;
- 埋め込みSQLの例:WHEREでの条件指定の例ですが、条件値と設定値を変数で与えて
います。
EXEC SQL UPDATE PROJECT SET PROJ_DESC = :blob_id WHERE PROJ_ID = :proj_id;
参照
DELETE , GRANT , INSERT , REVOKE , SELECT
DELETE
テーブル、アクティブなカーソルの行を削除します。
SQL,DSQLおよびisqlから使用出来ます。
この文書は、公開されているIB6のSQLレファレンスを基とし、1.5.1までの
各リリースノートにおける追加内容に関して反映・統合されています。
構文
SQLおよびDSQLでの構文:
※DSQLの場合、セミコロンは不要です。
DELETE [TRANSACTION transaction] FROM table {[WHERE <search_condition>] | WHERE CURRENT OF cursor};
isqlでの構文:
DELETE FROM TABLE [WHERE <search_condition>];
<search_condition> = [[SELECT]]を参照して下さい。
引数 | 説明 |
TRANSACTION transaction | 指定した名前のトランザクション下で実行されます。 DSQL,isqlでは使用できません。 |
table | 行を削除するテーブルの名前です。 |
WHERE search_condition | 削除する行を検索する条件を指定します。この節を省略すると、すべての行に対して処理が行われます。 |
WHERE CURRENT OF cursor | 削除対象になる行を特定するカーソルを指定します。 |
詳細の説明
DELETEは、テーブルまたはビューの1つ以上の行を削除します。
DELETEは、GRANTおよびREVOKE文により制御されるデーターベースに対する特権の
一つです。
TRANSACTION節は、多重トランザクションSQLアプリケーションにおいて、どの
トランザクションがDELETEを実行するかを制御するためにあります。これはDSQLや
isqlでは使用できません。
WHERE を使用することにより、指定条件に合致した行のみを削除することが出来
ます。
重要 WHERE節が省略された場合、テーブルの全列が削除されます。
WHERE CURRENT OF節によるカーソルによる位置指定削除の場合、1回の実行で1行
の削除が行われます。
用例
- テーブルのすべての行を削除します。
DELETE FROM EMPLOYEE_PROJECT;
- 指定された条件に合致する行を削除します。
DELETE FROM TESTTABLES WHERE ID = 0 OR FLAG = 2;
- 埋め込みSQLの例:ホスト言語の変数で指定した条件に合致する行を削除します。
EXEC SQL DELETE FROM SALARY_HISTORY WHERE EMP_NO = :emp_num;
- 埋め込みSQLの例:ホスト変数:min_popよりもPOPULATIONが小さい行を検索する
カーソルを作成し、そのカーソルにより削除を行います。FETCHにより1行ずつ
取り込み、その行を削除しています。
EXEC SQL DECLARE SMALL_CITIES CURSOR FOR SELECT CITY, STATE FROM CITIES WHERE POPULATION < :min_pop; EXEC SQL OPEN SMALL_CITIES; EXEC SQL FETCH SMALL_CITIES INTO :cityname, :statecode; WHILE (!SQLCODE) { EXEC SQL DELETE FROM CITIES WHERE CURRENT OF SMALL_CITIES; EXEC SQL FETCH SMALL_CITIES INTO :cityname, :statecode; } EXEC SQL CLOSE SMALL_CITIES;