【試して覚える】SQLite で Select 文入門

プログラミング入門
この記事は約7分で読めます。

前回の記事では、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 はごくごく簡単に感じると思います。

タイトルとURLをコピーしました