# INSERT 文

INSERT文により一つ以上の行を作成して、指定した名前の表に格納できます。 INSERT文で指定された値の数は、指定された列あるいは暗示された列の数と同じでなければなりません。

#### 構文

    INSERT INTO 表名
        [ (単純列名 [ , 単純列名]* ) ]
    	  問合せ

問合せには以下のいずれかをとることができます。

- 選択式
- VALUES一覧
- 複数行VALUES式

  単一行あるいは複数行の一覧には、DEFAULTというキーワードを含めることができます。列にDEFAULTを指定すると、その列には既定値が挿入されます。列に既定値を挿入する場合、列の一覧にてその列を省略して、表のほかの列に値を挿入することもできます。詳細についてはVALUES式を参照してください。

- UNION式

問合せの詳細については、問合せを参照してください。

    INSERT INTO COUNTRIES
          VALUES ('Taiwan', 'TW', 'Asia')

    -- DEPARTMENTという表に新しい部署を挿入します。
    -- ただし、新しい部署に新しい管理者は割り当てません。
    INSERT INTO DEPARTMENT (DEPTNO, DEPTNAME, ADMRDEPT)
    	VALUES ('E31', 'ARCHITECTURE', 'E01')
    -- 2つの新しい部署を一つの文で前と同じようにDEPARTMENTという表に挿入します。
    -- ただし、新しい部署に新しい管理者は割り当てません。
    INSERT INTO DEPARTMENT (DEPTNO, DEPTNAME, ADMRDEPT)
    	VALUES ('B11', 'PURCHASING', 'B01'),
    	('E41', 'DATABASE ADMINISTRATION', 'E01')
    --  EMP_ACTと同じ列を持つ、MA_EMP_ACTという
    -- 一時表を作ります。
    -- MA_EMP_ACTにEMP_ACTという表から、
    -- プロジェクト番号(PROJNO)が'MA'という文字で始まる行をロードします。
    CREATE TABLE MA_EMP_ACT
        (
    	EMPNO CHAR(6)  NOT NULL,
    	PROJNO CHAR(6)  NOT NULL,
    	ACTNO SMALLINT  NOT NULL,
    	EMPTIME DEC(5,2),
    	EMSTDATE DATE,
    	EMENDATE  DATE
        );

    INSERT INTO MA_EMP_ACT
    	SELECT * FROM EMP_ACT
    	WHERE SUBSTR(PROJNO, 1, 2) = 'MA';
    -- LOCATIONという列にDEFAULTの値を挿入します。
    INSERT INTO DEPARTMENT
          VALUES ('E31', 'ARCHITECTURE', '00390', 'E01', DEFAULT)

#### 文の依存

INSERT 文は挿入先の表や、その表の全てのコングロマリット(ヒープや索引などの記録の単位です。)や、文中のその他の表に依存します。準備されたINSERT文の対象表にて、索引や制約を作成したり破棄したりすると、その準備されたINSERT文は無効となります。

親トピック: 文