3.データの入力・変更・削除¶
3.1. データの入力 (INSERT INTO)¶
既に表が定義されていて、その表へデータを入力する場合の基本的な構文は次の通りです。
①全てのcolumnを追加する
1 | INSERT INTO 「tablename」(column1,column2,column3...)values(value1,value2,value3...) |
下記のSQL文の機能と同じように見られます。
1 | INSERT INTO 「tablename」 values(value1,value2,value3...) |
②部分のcolumnを追加する
1 | INSERT INTO 「tablename」(column1,column2,column3)values(value1,value2,value3) |
上に示す構文のように INSERT INTO 文を用いてデータを入力します。
INSERT INTO のすぐ後ろのカッコの中には、データを入力する列名を入力する順番に記述します。ここで指定されない列にはデフォルト値が設定されている場合はデフォルト値が、デフォルト値が設定されていない場合は NULL 値が登録されます。デフォルト値が指定されていなくて、NOT NULL が指定されている場合、INSERT INTO 文は失敗します。あらかじめ列制約やテーブル制約により、入力できる値に制限があるような場合は、その制約に従う値を入力しなければなりません。また、全ての列にデータを入力する場合、ここのカッコは省略しても構いません。
VALUES の後ろのカッコには、実際に入力するデータを記述します。INSERT INTO の後ろのカッコ内で指定した列の順番に対応するようにデータは記述されなければなりません。また、それぞれの列のデータ型でなければなりません。
次の例は商品表にデータを入力するものです。商品コード、商品名、単価のデータ型はそれぞれ CHAR (4)、CHAR (16)、INTEGER とします。sample-03-1 では 2つの例を示していますが、どちらも同じ事を意味しています。
| 表: 商品表 | ||
|---|---|---|
| 商品コード | 商品名 | 単価 |
sample-03-1:
1 2 3 4 | /* データの入力 方法Ⅰ:*/ INSERT INTO 商品表 (商品コード , 商品名 , 単価) VALUES ('1001','鉛筆',200); /* データの入力 方法Ⅱ:*/ INSERT INTO 商品表 VALUES ('1001','鉛筆',200); |
クエリを使用すれば、あるテーブルから抽出した値を、INSERT INTO 文を使用して別のテーブルに挿入することができます。詳しい説明は後述しますが、ここでは簡単な例を示しておきます。
例えば、商品表で単価が 10,000 円を超えるものだけを抽出して別の表を作成したい場合には、あらかじめ新しいテーブルを定義しておいて次の例のように SQL を記述します。このとき新しいテーブルの名前を高額商品表とし、表の定義は商品表と同じとします。
| 表: 高額商品表 | ||
|---|---|---|
| 商品コード | 商品名 | 単価 |
sample-03-2:
1 2 3 4 5 | /* データの入力 */ INSERT INTO 高額商品表 SELECT * FROM 商品表 WHERE 単価 >= 10000 ; |
上の例では WHERE 句で条件を指定して、商品表からデータを抽出し高額商品表にデータを挿入しています。ちなみに商品表にはデータは残ったままになります。商品表からデータを削除するには後に説明する DELETE 文を用います。
3.2. データの変更 (UPDATE)¶
SQL では登録データの変更を複数の条件を与えて一括で変更することも、1つの行や列を指定して、その部分のみを変更することも可能です。データの変更には UPDATE 文を使用します。基本的な構文は次の通りです。
①テーブル中の全てのデータを変更する
1 | UPDATE 「tablename」SET 「column1」=value1,「column2」=value12,... |
②条件を設定する、テーブル中のデータを変更する
1 2 | UPDATE 「tablename」SET 「column1」=value1,「column2」=value12,... WHERE 「column3」=value3 AND 「column4」=value4 AND ... |
変更するデータは、列のデータ型に従うものでなければなりません。また、列制約やテーブル制約で入力できるデータが制限されている場合は、それ以外のデータに変更できません。他のテーブルから参照されている値を含むものも変更できません。
商品表で単価を一律 1,000 円にしたい場合は、 sample-03-3 のように書きます。
| 表: 商品表 | ||
|---|---|---|
| 商品コード | 商品名 | 単価 |
sample-03-3:
1 2 | /* データの変更 */ UPDATE 商品表 SET 単価 = 1000 ; |
特定の行のみを変更したい場合は、WHERE 句で条件を指定しなければなりません。次の例は、商品表において商品コードが 0004 の単価を 2500 に変更するときの SQL です。
| 表: 商品表 | ||
|---|---|---|
| 商品コード | 商品名 | 単価 |
sample-03-4:
1 2 | /* データの変更 */ UPDATE 商品表 SET 単価 = 2500 WHERE 商品コード = '0004' ; |
複数の列を一度に変更するには、 sample-03-5 のように書きます。商品表で、商品コードが 0005 の商品名をブックエンド、単価を 1000 に変更します。
| 表: 商品表 | ||
|---|---|---|
| 商品コード | 商品名 | 単価 |
sample-03-5:
1 2 3 | /* データの変更 */ UPDATE 商品表 SET 商品名 = 'ブックエンド' , 単価 = 1000 WHERE 商品コード = '0005' ; |
UPDATE 文の SET 句には、変更する列を使った式を含め、値式を使用することができます。商品表の単価を一律 50 円アップしたいときは次のように記述します。
| 表: 商品表 | ||
|---|---|---|
| 商品コード | 商品名 | 単価 |
sample-03-6:
1 2 | /* データの変更 */ UPDATE 商品表 SET 単価 = 単価 + 50 ; |
UPDATE 文の SET 句には、変更する列を列名を使用することができます。商品表の単価を一律単価2したいときは次のように記述します。
| 表: 商品表 | |||
|---|---|---|---|
| 商品コード | 商品名 | 単価 | 単価2 |
sample-03-7:
1 2 | /* データの変更 */ UPDATE 商品表 SET 単価 = 単価2 ; |
3.3.データの削除 (DELETE)¶
SQL では DELETE 文を用いることでデータの削除を行ないます。WHERE 句で条件を指定して、削除すべきデータを特定することもできます。基本的な構文は次の通りです。
1 | DELETE FROM 「tablename」 |
上の構文では指定したテーブルのデータを全て消去します。このとき、他のテーブルから外部参照されている値を含むデータは削除できません。
DELETE 文でテーブル内のデータを消去した後に DROP TABLE 文を実行すれば表を削除することができます。
次の sample-03-8 では WHERE 句を用いて、特定のデータだけを消去しています。商品表の商品コードが 0001 のデータを削除します。
| 表: 商品表 | ||
|---|---|---|
| 商品コード | 商品名 | 単価 |
sample-03-8:
1 2 | /* データの削除 */ DELETE FROM 商品表 WHERE 商品コード = '0001' ; |