こんにちは、ECF Techブログ
担当のMichiharu.Tです。
本記事はSQL文について、実際に動作させながら学習する入門記事の第8回となります。
今回はSELECT文以外の基本的なデータベース操作系の文である、INSERT文、UPDATE文、DELETE文について見ていきましょう。
本記事の題材となっているデータベース内の各表、および学習の始め方については、下記の第1回の記事からご覧ください。
INSERT文
INSERT文を使うと、既存の表に1行を挿入することができます。基本的な文法は次のようになります。
記述例
INSERT INTO 表名(列名1,列名2...) VALUES (値1,値2.....);
列名と値の並びは一致している必要があります。たとえば、値1は列名1で指定した列に入ります。
実行例をみてみましょう。
実行例1
ユーザー表(users)に次のデータを追加します。
ユーザーID | 名前 | 年齢 |
---|---|---|
7 | Aoi.K | 30 |
INSERT INTO users(uid,name,age) VALUES(7,'Aoi.K',30);
成功した場合、SQLiteの実行上は何も表示されません。SELECT文で値が追加されていることを確認しましょう。
SELECT * FROM users ;
実行結果
uid name age --- --------- --- 1 Hiroshi.T 35 2 Yoko.M 28 3 Naoto.H 26 4 Ichiro.K 44 5 Hitomi.S 33 6 Akira.O 25 7 Aoi.K 30
uidが7のデータが追加されています。なお、実行例1のINSERT文を再度実行すると次のようなエラーメッセージが表示されます。
Error: UNIQUE constraint failed: users.uid
このエラーは、 重複が許されない主キー列(ここではuid)が同じレコードを追加しようとしたため 発生しています。何件かのINSERT文を実行したい場合は、uidの部分の値をすべて異なるものにしなければいけません。
次にINSERT文のもう1つの記述例をご紹介します。
記述例
INSERT INTO 表名 VALUES (値1,値2.....);
こちらは表名の後ろに 列名指定がありません 。この場合、VALUESの値は定義された列の順に指定する必要があります。列順はSELECT文で確認できる順番です。
それでは、実行例を見てみましょう。
実行例2
ユーザー表(users)に次のデータを追加します。
商品ID | 名前 | 価格 | 分類ID |
---|---|---|---|
12 | Laser Printer | 135000 |
INSERT INTO items VALUES(12,'Laser Printer',135000,NULL);
こちらもSELECT文で確認してみましょう。
SELECT * FROM items ;
実行結果
iid name price cid --- -------------- ------ --- 1 Desktop PC 100000 1 2 Note PC 85000 1 3 Tablet PC 50000 1 4 Mouse 1000 2 5 Keyboard 1200 2 6 USB Memory 800 2 7 LAN Cable 500 2 8 USB Cable 300 2 9 Mother Board 25000 3 10 LAN Card 3000 3 11 Inkjet Printer 9000 12 Laser Printer 135000
iidが12のレコードが追加されています。
UPDATE文
次は既存行の各項目を変更できる UPDATE文 を見ていきましょう。基本的な文例は次のようになります。
UPDATE 表名 SET 列名1 = 値1, 列名2 = 値2.... WHERE 条件式;
- 条件式に該当する行に対し、列項目の変更を行ないます。
- 変更内容はSET句に列挙します。
- WHERE句を指定しない場合、 全行が変更対象 となりますので注意しましょう。
それでは実行例を見ていきましょう。
実行例3
商品表(items)の商品ID(iid)が2のレコードについて、価格(price)を70000に変更します。
UPDATE items SET price = 70000 WHERE iid = 2;
こちらも実行前後の見た目は変化しません。SELECT文で確認しましょう。実行結果はUPDATE実行前後で表示しています。
SELECT * FROM items WHERE iid = 2 ;
実行結果(UPDATE実行前)
iid name price cid --- ------- ----- --- 2 Note PC 85000 1
実行結果(UPDATE実行後)
iid name price cid --- ------- ----- --- 2 Note PC 70000 1
DELETE文
次は既存行の各項目を変更できる DELETE文 を見ていきましょう。基本的な文例は次のようになります。
DELETE FROM 表名 WHERE 条件式;
- 指定した表から条件式に該当する行を削除します。
- WHERE句を指定しない場合、 全行が変更対象 となりますので注意しましょう。
それでは実行例を見てみましょう。
実行例4
商品表(items)から、分類ID(cid)がNULLの行をすべて削除する。
DELETE FROM items WHERE cid IS NULL;
SELECT文で実行結果を確認します。
SELECT * FROM items ;
実行結果
iid name price cid --- ------------ ------ --- 1 Desktop PC 100000 1 2 Note PC 85000 1 3 Tablet PC 50000 1 4 Mouse 1000 2 5 Keyboard 1200 2 6 USB Memory 800 2 7 LAN Cable 500 2 8 USB Cable 300 2 9 Mother Board 25000 3 10 LAN Card 3000 3
cidがNULLの行が削除されています。
※上記の実行結果は、本記事の各実行例を実行する前の表を元に表示しています。
練習問題
それではここから練習問題です。本練習問題の各問と正解例は、 データベースの各表が初期状態 であることを前提としています。
問1
分類表(categories)に下の行を追加してください。
分類ID | 名前 |
---|---|
4 | Printer |
実行結果
(確認用SELECT文)
SELECT * FROM categories ;
(確認用SELECT文の結果)
cid name --- -------- 1 PC 2 Supply 3 PC Parts 4 Printer
問2
商品表(items)の商品ID(iid)が4の商品について、商品名(name)を「Mouse」から「Optical Mouse」に変更し、価格(price)を「1000」から「1500」に変更してください。
実行結果
(確認用SELECT文)
SELECT * FROM items WHERE iid = 4 ;
(確認用SELECT文の結果)
iid name price cid --- ------------- ----- --- 4 Optical Mouse 1500 2
問3
ユーザー表(users)から、ユーザーID(uid)が4のデータを削除してください。
実行結果
(確認用SELECT文)
SELECT * FROM users ;
(確認用SELECT文の結果)
uid name age --- --------- --- 1 Hiroshi.T 35 2 Yoko.M 28 3 Naoto.H 26 5 Hitomi.S 33 6 Akira.O 25
問4
注文明細表(order_details)の注文ID(oid)が9のレコードについて、商品ID(iid)を3、注文数量(amount)を4にしてください。
実行結果(確認用SELECT文)
SELECT * FROM order_details WHERE oid = 9 ;
(確認用SELECT文の結果)
oid mno iid amount --- --- --- ------ 9 1 3 4
練習問題(解答例)
それでは、練習問題の解答例です。
問1
INSERT INTO categories VALUES( 4, 'Printer' );
問2
UPDATE items SET name = 'Optical Mouse', price = 1500 WHERE iid = 4;
問3
DELETE FROM users WHERE uid = 4;
問4
UPDATE order_details SET iid = 3, amount = 4 WHERE oid = 9;
おわりに
本日は以上とさせていただきます。以上で本連載でご紹介する文法は終了となります。最後までご覧くださりありがとうございます。次回は連載の最終回として、ここまでご紹介した各文法を駆使した応用問題集を掲載予定です。引き続き、よろしくお願いいたします。
本連載でご紹介したのは、SQLのほんの一部の文法です。より高度なSQL文やその他の文法については、また別の連載として掲載をしたいと考えております。今後ともよろしくお願いいたします。
合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。