前回の記事では、SQLiteでSQLを覚えるために利用するツールについて解説しました。
いよいこ、今回から実際のSQL入門記事です。
SQLiteは簡易データベースですが、一般的なデータベースで使われているSQLと同じ記述が行えます。
今回ここで紹介するSelect文は、OracleやSQLServer、ProstgreSQL、MySQLにも使えますので、是非覚えて活用して下さい。
ちなみに、この記事ではこちらで公開しているツールの利用を前提としていますので、あらかじめダウンロードをお願いします。
Select文とは
Select文はデータベースに対してデータを要求するための命令文で、基本中の基本です。
極めれば相当複雑なこともできますが、まずは第一歩として単純なものから覚えていきましょう。
Select文の基本構造は次の通りです。
Select カラム名1,カラム名2,・・・ from テーブル名 where 抽出条件
抽出したいカラムをカンマで区切って記述しますが、全てのカラムを指定する場合、 “*” という文字が使って次の様に記述できます。
Select * from テーブル名 where 条件式
では、実際にやっていきましょう。
その前に1点だけ注意が有ります。
これから入力して頂くSQL文は、各単語を半角スペースで区切っています。
もし間違って全角スペースで区切ってしまうとエラーになりますのでご注意ください。
実際にSelectしてみる
では、データベースにあらかじめ登録されている「商品マスタ」を全件検索してみましょう。
Select * from 商品マスタ
と入力し、実行ボタンをクリックして下さい。

実行したら、以下の内容が表示されたと思います。

ここまでは簡単ですね。
では、「商品仕様」や「売上データ」についても、Select してみて下さい。
抽出条件を指定する
では、次に抽出条件を指定してみましょう。
select * from テーブル名の末尾に where を付けて、その後に条件式を記述します。
条件が1つだけの場合
メーカーがSONYのものだけを抽出して表示するには、次のように記述します。
select * from 商品マスタ where メーカー = ‘SONY’
抽出条件は、 カラム名 条件式 値 という書き方をします。
では、さっそく試してみましょう。
結果は次の様になると思います。

ここでのポイントは、値をシングルクォーテーションで囲んでいる所です。
where メーカー = ‘SONY’
となっていますね。
カラムのデータ型が文字列(TEXT型)の場合は、シングルクォーテーションで囲む必要があります。
これはSQLのルールなので、覚えておいて下さい。
逆に、数字の場合はシングルクォーテーションで囲む必要はありません。
囲んでしまうとデータベースの種類によってエラーになったり、誤った動作になる場合があるので、注意して下さい。
では、単価が4万円以下のものを抽出してみましょう。
select * from 商品マスタ where 単価 < 40000
答えは次の様になります。

条件が2つ以上(複数)の場合
では、2つの条件を満たすデータを抽出するには、どうすればいいでしょう?
例えば、メーカーが SONY で、単価が 4000未満のものを抽出する場合は次の様になります。
select * from 商品マスタ where メーカー = ‘SONY’ and 単価 < 4000
実際に実行すると、次の結果になります。

範囲を指定する場合
では、例えば単価が40,000円~80,000円(正確には、40,000円以上、80,000円以下)の範囲にあるデータのみ抽出する場合はどう書けばよいでしょう?
答えは次の様になります。
select * from 商品マスタ where 単価 >= 40000 and 単価 <= 80000
実行結果は次の通りです。

範囲を指定する記述は >、>=、<、<= という大なり小なり記号以外に
between 開始 and 終了
という記述が出来ます。従って、
select * from 商品マスタ where 単価 between 40000 and 80000
と記述しても全く同じ答えになります。
良ければ試してみて下さい。
曖昧検索する場合
曖昧検索もよく使う検索方法です。
select * from テーブル名 where カラム名 like ‘%値%’
と言う風に記述します。
ポイントは、値をシングルクォーテーション+% 文字で囲むことです。
では、メーカー名に “ON” という文字列が含まれているものだけを抽出してみます。
select * from 商品マスタ where メーカー like ‘%ON%’
答えは次の通りですが、実行結果にSONYとCANONの2つが含まれるようになりました。

like の曖昧検索は、「含まれている」=「部分一致」だけでなく、「等しい」「前方一致」「後方一致」という意味合いでも使うことが出来ます。
ここで注目してほしいのは % です。
%はワイルドカードの意味であり、何でも一致します。
従って、メーカー名 like ‘SO%’ と記述すれば、先頭が “SO”で始まり、それ以降は何でも良いという意味になります。
つまり前方一致ですね。
後方一致は メーカー名 like ‘%NY’ と記述します。
もし%を全く記述せず メーカー名 like ‘SONY’ と記述すると、完全一致という扱いになります。
つまり メーカー名 = ‘SONY’ と全く同じ結果になります。
抽出条件で使える演算子
ここまで簡単に説明してきましたが、抽出条件で使える演算子(比較演算子、論理演算子)には次のものがあります。
比較演算子 | 意味 | 記述例 |
---|---|---|
> | 大きい | a > b |
< | 小さい | a < b |
= | 等しい | a = b |
<> | 等しくない | a <> b |
like | 曖昧検索 | a like ‘あ%’ ⇒ 前方一致 a like ‘%あ’ ⇒ 後方一致 a like ‘%あ%’ ⇒ 部分一致 |
in | 羅列した値のいずれかと一致 | a in (b,c,d,e) 文字列の場合は (‘b’,’c’,’d’,’e’) |
between | 範囲指定 | a between b and c |
is null | 値がNULLである | a is null |
複数の条件式を指定したい場合は、条件式の間に and や or を記述します。
論理演算子 | 意味 | 記述例 |
---|---|---|
and | 且つ | a and b |
or | 又は | a or b |
not | 否定 | not a |
NULLって何?
今は特に覚える必要はありませんので、読み飛ばして頂いて構いませんが、補足として説明しておきます。
データベースの世界では NULLという特別な値が存在します。
これは、値が何も入っていないという意味になります。
たとえば、次の実行結果を見てください。
工学ズームのカラムのところどころが空白になってますね。
タッチパネルに至っては全て空白です。
この様に何も入っていない状態のことをNULLと言います。

しかし、画面上が空白になっているからと言って、必ずそれがNULLとは言い切れません。
ややこしい話ですが、NULLはデータが何も入っていない状態です。
しかし、長さがゼロの文字列が入っていたとしても、やはり画面には表示されません。

つまり、画面上空白に見えても、実際にデータがNULLなのか、長さゼロの文字列なのかが識別できません。
従って、一般的なデータ(長さゼロの文字列も含めて)と NULL を区別しており、NULLを抽出条件に指定する場合は、 is null とか is not null の様に記述するルールになっています。
この様に、NULLというデータはデータを扱う上で厄介なことが多いので、検索対象のカラムに対してNULLが入らないように工夫することが多いです。
まとめ
今回はSelect 文の基本について解説しました。
Select 文はかなり複雑な条件を記述できますが、それは応用編として別に記述したいと思います。
ここでは基本を十分理解できるように、色々とツールで試して頂ければと思います。
特に抽出条件の書き方は、select に限らず、データの更新(update) や削除(delete) でも使いますので、ここを押さえて頂ければ、update や delete はごくごく簡単に感じると思います。