3.2 データ操作

この節では、表のデータの追加、変更、削除を行うSQL文を説明します。

データの追加(INSERT文)

INSERT文は、表に新しいデータを追加します。データは行の単位で追加されます。値式を使用して行(複数可)を挿入すること、次節で説明する問い合わせの結果を使って複数行を挿入することができます。INSERT文の形式は以下の通りです。

INSERT INTO 表名 [(列名 [, ...])]
    { VALUES (値式 [, ...]) [, ...] | 問い合わせ }

列名の並び(列リスト)と値式の並び(値リスト)は1対1に対応している必要があります。また、値リストは複数指定できます。

  • INTO句は、データの追加先を指定します。
    表名は、行を追加する表の名前です。
    列名は、データを入力する列の名前です。列リストに指定しなかった列にはデフォルト値が入力されます。ただし、列リスト全体を省略した場合は、表のすべての列を定義順に指定したものとみなされます。
  • VALUES句は、追加するデータを指定します。
    値式は、入力する値、または値を計算する式です。キーワード DEFAULTを指定するとデフォルト値が入力されます。
  • VALUES句の代わりに問い合わせを指定できます。
    問い合わせは、追加する行の集合を作成するためのSELECT文です。任意のSELECT文を使用できますが、SELECT句に指定する値式の並びは列リストに対応している必要があります。

具体例として、前節で作成したprod表にデータを追加するINSERT文を以下に示します。

  INSERT INTO prod VALUES (1, 'みかん', 50);
  INSERT INTO prod (prod_id, prod_name, price) VALUES (2, 'りんご', 70);
  INSERT INTO prod (prod_name, price, prod_id) VALUES ('メロン', 100, 3);

上記3つのINSERT文はすべてprod表を構成する3列すべてに値を明示的に与えています。

次の例は、prod表のprice列に入力する値を省略したINSERT文です。

  INSERT INTO prod (prod_id, prod_name) VALUES (4, 'バナナ');
  INSERT INTO prod (prod_id, prod_name, price) VALUES (5, 'ぶどう', DEFAULT);

入力が省略されたprice列にはデフォルト値 0 が格納されます。

データの変更(UPDATE文)

UPDATE文は、条件を満たす全ての行の指定した列の値を変更します。SET句には、変更する列のみを指定します。UPDATE文の形式は以下の通りです。

UPDATE 表名
    SET { 列名 = 値式 | (列名 [, ...]) = (値式 [, ...]) } [, ...]
    [WHERE 条件]
  • UPDATE句は、データの更新先を指定します。
    表名は、行を変更する表の名前です。
  • SET句は、変更する列と値を指定します。
    列名は、変更する列の名前です。
    値式は、変更後の値、または値を計算する式です。値式の並び(値リスト)は、列名の並び(列リスト)と1対1に対応している必要があります。
  • WHERE句は、変更する行を指定します。
    条件は、変更する行を選択する条件です。指定方法は、SELECT文のWHERE句を参照してください。なお、WHERE句を省略するとすべての行が変更されます。

具体例として、prod表のprice列を変更するUPDATE文を以下に示します。

  UPDATE prod SET price = 30 WHERE prod_id = 4;
  UPDATE prod SET (prod_name, price) = ('さくらんぼ', 80) WHERE prod_id = 5;

最初のUPDATE文ではprod_id列が4の行のprice列、次のUPDATE文ではprod_id列が5の行のprod_name列とprice列が変更されます。

次の例は、prod表のprice列に条件を設定したUPDATE文です。

  UPDATE prod SET price = price + 10 WHERE price >= 80;

変更前のprice列が80以上のすべてのprice列に+10を加算しています。

データの削除(DELETE文)

DELETE文は、指定した表から条件を満たす行を削除します。形式は以下の通りです。

DELETE FROM 表名
    [WHERE 条件]
  • FROM句は、データの削除元を指定します。
    表名は、行を削除する表の名前です。
  • WHERE句は、削除する行を指定します。
    条件は、変更する行を選択する条件です。指定方法は、SELECT文のWHERE句を参照してください。なお、WHERE句を省略するとすべての行が削除され、空の表になります。

具体例として、prod表から条件を満たす行を削除するDELETE文を以下に示します。

DELETE FROM prod WHERE price >= 80;

price列が80以上の行がすべて削除されます。