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

データベース

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

データベースの入門記事、第2回となります。よろしくお願いいたします。今回からいよいよSQL文について学習する内容となっています。

本記事はSQL文について、実際に動作させながら学習する入門記事の第2回となります。本記事の題材となっているデータベース内の各表、および学習の始め方については、下記の第1回の記事からご覧ください。

データベース
データベースのカテゴリです。トレーニングとして使えるSQLの入門記事などを連載しています。

SELECT文の基本

それでは早速始めましょう。まず始めはSELECT文です。SELECT文は表の内容を取得してくれるSQL文です。SELECT文と一言に言ってもその書き方は多彩で、様々なデータの取り出し方があります。下はSELECT文の基本形式です。

SELECT文の各パートは「句」と呼ばれています。上には多くの句がありますが、最低限必要なのはSELECT句とFROM句だけです。まずはこの2つを使った文法と実行例を見ていきましょう。実行例については、第1回で構築した環境を元にSQLiteを実行して確認することができます。

本記事での表記について

上で句として登場したSELECTやFROMなどのSQL文の文法として用いるキーワード(または予約語と呼びます)は、大文字小文字のどちらで書いても問題ありません。ですが、慣例的な表記方法としてはキーワードは大文字、表名や列名は小文字で表記するという書き方が多いです。本記事でもこの慣例にならい、

  • キーワードは大文字
  • 表名や列名は小文字

を利用して記述します。

全ての行、全ての列を取得する

文法

SELECT *
FROM 表名;

解説

指定した表の全ての行、全ての列を表示します。*は「すべて」を表します。また、SQL文の最後には 必ず「 ; (セミコロン)」 が必要となります。忘れずにつけるようにしましょう。

実行例
商品表(items)の全ての行、全ての列を表示します。

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

行を指定して表示する

文法

SELECT 列名1,列名2....
FROM 表名;

意味

指定した表の特定列のみを表示することができます。列名は必要な数だけ任意に指定できます。

実行例1
商品表(items)から、商品名(name)と価格(price)の列のみを表示します。

SELECT name, price
FROM items;

実行結果

name            price
--------------  ------
Desktop PC      100000
Note PC         85000
Tablet PC       50000
Mouse           1000
Keyboard        1200
USB Memory      800
LAN Cable       500
USB Cable       300
Mother Board    25000
LAN Card        3000
Inkjet Printer  9000

実行例2
利用者表(users)から名前(name)の列のみを表示します。

SELECT name
FROM users;

実行結果

name
---------
Hiroshi.T
Yoko.M
Naoto.H
Ichiro.K
Hitomi.S
Akira.O

ここまでのポイントとして、次の2つをおさえておきましょう。

  • SELECT句は 表示する列を決める 部分である。
  • FROM句は 使用する表を決める 部分である。

WHERE句の利用

それでは次にWHERE句を使った文法を見ていきましょう。WHERE句は表の中の 行を特定すること が主な役割です。それでは文法を見ていきましょう。

文法

SELECT 列名1,列名2....
FROM 表名
WHERE 条件式;

解説
WHERE句では 条件式 を指定することで、条件に合った行だけを取得してくれます。条件式は 演算子 を用いて作成することができます。ここから代表的な演算子を見ていきましょう。

比較演算子

比較演算子とは条件式を作成するのに使用できる記号で、比較演算子を使った条件式の書き方は一般的に次のようになります。

列名 比較演算子 値

下表に比較演算子の種類と使用例を示します。

記号 使用例 使用例の意味
= 列A = 100 列Aが100である
!= 列A != 100 列Aが100ではない
> 列A > 100 列Aが100より大きい
< 列A < 100 列Aが100より小さい
>= 列A = 100 列Aが100以上である
<= 列A <= 100 列Aが100以下である

いくつかの例を見ていきましょう。

実行例1
商品表(items)の中から商品ID(iid)が1である行を取得します。

SELECT *
FROM items
WHERE iid = 1;

実行結果

iid  name        price   cid
---  ----------  ------  ---
1    Desktop PC  100000  1

実行例2
商品表(items)から、価格(price)が50000以上の行を取得します。

SELECT *
FROM items
WHERE price >= 50000;

実行結果

iid  name        price   cid
---  ----------  ------  ---
1    Desktop PC  100000  1
2    Note PC     85000   1
3    Tablet PC   50000   1

実行例3
商品表(items)から、分類ID(cid)が2でないものを表示します。

SELECT *
FROM items
WHERE cid != 2;

実行結果

iid  name          price   cid
---  ------------  ------  ---
1    Desktop PC    100000  1
2    Note PC       85000   1
3    Tablet PC     50000   1
9    Mother Board  25000   3
10   LAN Card      3000    3

実行例4
商品表(items)から、商品名(name)が「Desktop PC」であるものを取り出します。

SELECT *
FROM items
WHERE name = 'Desktop PC';

実行結果

iid  name        price   cid
---  ----------  ------  ---
1    Desktop PC  100000  1

ポイント
=!=の記号は文字列との比較も可能です。文字列を表す場合は「'(シングルクォーテーション)」または「"(ダブルクォーテーション)」で囲みます。

データ型

実行例4では比較する値に 文字列 を指定する例が登場しました。このような比較方法は 対象列のデータ型が文字列型の場合のみ 行なうことができます。 データ型(または型とも呼びます。本連載では以降「型」の表記を用います)とはデータの種類のことで、リレーショナルデータベースでは列ごとの型を指定して表を作成することになります。データベースで用いられる型の代表的なものを下表に示します。

特徴
数値型 四則計算などを行なうことができる。大小比較ができる
文字列型 計算はできない。文字列パターンなどとの比較ができる
日付型 日付や時間の情報を保持できる。時間の大小比較や加減算ができる

上記はかなり大ざっぱな分類です。実際にはDBMSの製品ごとに異なります。SQLiteでは次のような型が用意されています。

特徴
INTEGER 整数を扱える型
REAL 浮動小数点を扱える型
TEXT 文字列を扱える型
BLOB 任意のバイナリデータ*1を扱える型

(*1)バイナリデータは任意の0と1のビット並びのデータです。データベースでは一般的に画像や音声データは、このバイナリデータの扱いとなります。

今回サンプルとして用意している各表各列は、次の型で定義されています。

またSQL文内に直接 を記述する場合も、型を意識する必要があります。文字列との比較を行なう際に、'(シングルクォーテーション)で文字列を囲んだのはそのためです。'が無い場合は、数値または列名や表名などと見なされ、意図しない結果を引き起こします。

LIKE演算子

LIKE演算子は文字列型の列と 文字列パターンを比較し、一致する行を取得できる演算子です。LIKE演算子を用いた条件式の凡例は次のとおりです。

列名 LIKE 文字列パターン

文字列パターンを記述する際は、通常の文字と次の2つの特殊表記(ワイルドカードと呼びます)を用いることができます。

表記 意味
_ 任意の1文字を表します
% 任意の文字列を表します

それではいくつかの実行例を見ていきましょう。

実行例1
商品表(items)の中から、商品名(name)の最後に「PC」という文字列を含むものを表示します。

SELECT *
FROM items
WHERE name LIKE '%PC';

実行結果

iid  name        price   cid
---  ----------  ------  ---
1    Desktop PC  100000  1
2    Note PC     85000   1
3    Tablet PC   50000   1

実行例2
商品表(items)の中から、商品名(name)の最初に「USB」という文字列を含むものを表示します。

SELECT *
FROM items
WHERE name LIKE 'USB%';

実行結果

iid  name        price  cid
---  ----------  -----  ---
6    USB Memory  800    2
8    USB Cable   300    2

実行例3
商品表(items)の中から、商品名(name)のどこかに「M」が含まれているものを表示します。

SELECT *
FROM items
WHERE name LIKE '%M%';

実行結果

iid  name          price  cid
---  ------------  -----  ---
4    Mouse         1000   2
6    USB Memory    800    2
9    Mother Board  25000  3

解説
「%」の使い方がポイントです。「%」は 0文字以上の任意の文字列 を表す記号です。少し言葉の違和感があると思いますが 0文字の文字列 も該当します。したがって、「%M%」の表現は

  • 「M」から始まる任意の文字列
  • 他の文字の間に「M」を含む任意の文字列
  • 「M」で終わる文字列

のいずれにも該当します。

実行例4
利用者表(users)の中から、名前(name)の「.」の前が5文字になっているものを表示します。

SELECT *
FROM users
WHERE name LIKE '_____.%';

実行結果

uid  name     age
---  -------  ---
3    Naoto.H  26
6    Akira.O  25

解説
「_」は任意の1文字を表すので、5つ並べると「5文字であること」を条件にできます。

練習問題

それではここから練習問題です。

問1

分類表(categories)から、すべての行、すべての列を表示してください。

実行結果

cid  name
---  --------
1    PC
2    Supply
3    PC Parts

問2

商品表(items)から、価格(price)が10000以下の行を表示してください。表示列はすべての列です。

実行結果

iid  name            price  cid
---  --------------  -----  ---
4    Mouse           1000   2
5    Keyboard        1200   2
6    USB Memory      800    2
7    LAN Cable       500    2
8    USB Cable       300    2
10   LAN Card        3000   3
11   Inkjet Printer  9000

問3

商品表(items)から、商品名(name)の最後が「Cable」となっている行のnameとprice列を表示してください。

実行結果

name       price
---------  -----
LAN Cable  500
USB Cable  300

問4

商品表(items)から、商品名(name)に空白を含む行のname列を表示してください。

実行結果

name
--------------
Desktop PC
Note PC
Tablet PC
USB Memory
LAN Cable
USB Cable
Mother Board
LAN Card
Inkjet Printer

練習問題(解答例)

それでは、練習問題の解答例です。

問1

SELECT *
FROM categories;

問2

SELECT *
FROM items
WHERE price <= 10000;

問3

SELECT name,price
FROM items
WHERE name LIKE '%Cable';

問4

SELECT name
FROM items
WHERE name LIKE '% %';

おわりに

本日は以上とさせていただきます。最後までご覧くださりありがとうございます。今回はwhere句を中心にご紹介しましたが、where句で使える条件式にもまだまだできるものが沢山あります。次回もwhere句のさらなる活用をご紹介する予定です。引き続きよろしくお願いいたします。


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

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