SQLiteでデータベース(SQL)の基本を学ぶ(8)

データベース

こんにちは、ECF Techブログ
担当のMichiharu.Tです。

本記事はSQL文について、実際に動作させながら学習する入門記事の第8回となります。

今回はSELECT文以外の基本的なデータベース操作系の文である、INSERT文、UPDATE文、DELETE文について見ていきましょう。

本記事の題材となっているデータベース内の各表、および学習の始め方については、下記の第1回の記事からご覧ください。

データベース
データベースのカテゴリです。トレーニングとして使えるSQLの入門記事などを連載しています。
今回学習するINSERT文、UPDATE文、DELETE文の各例文について、字下げを考慮した書き方を行なっていません。初学者の方を対象に、文法全体の見やすさを検討した表記方法としました。

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回のサンプルデータベースの構築の作業を再度行ってください。

練習問題

それではここから練習問題です。本練習問題の各問と正解例は、 データベースの各表が初期状態 であることを前提としています。

問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文やその他の文法については、また別の連載として掲載をしたいと考えております。今後ともよろしくお願いいたします。


合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。

ECFエデュケーション
タイトルとURLをコピーしました