前回の記事では、SQLiteでSQLを覚えるために利用するツールについて解説しました。
いよいこ、今回から実際のSQL入門記事です。
SQLiteは簡易データベースですが、一般的なデータベースで使われているSQLと同じ記述が行えます。
今回ここで紹介するSelect文は、OracleやSQLServer、ProstgreSQL、MySQLにも使えますので、是非覚えて活用して下さい。
ちなみに、この記事ではこちらで公開しているツールの利用を前提としていますので、あらかじめダウンロードをお願いします。
Select文は奥が深く、数多くのオプションがあります。Selectについてもっと極めたい方は、是非次の記事も参考にしてください。
| 【試して覚える】SQLite で Select 文入門(副問い合わせ) |
| 【試して覚える】SQLite で Select 文入門(Groupと集計関数) |
| 【試して覚える】SQLite で Select 文入門(Oder by 並べ替え) |
| 【試して覚える】SQLite で Select 文入門(テーブル結合) |
Select文とは
Select文はデータベースに対してデータを要求するための命令文で、基本中の基本です。
極めれば相当複雑なこともできますが、まずは第一歩として単純なものから覚えていきましょう。
Select文の基本構造は次の通りです。
抽出したいカラムはカンマで区切りで列挙しますが、全てのカラムを抽出したい場合は、アスタリスク '*' 文字を使って次の様に記述します。
実際に試していく前に1点だけ注意があります。これから入力して頂くSQL文は、各単語を半角スペースで区切っています。もし間違って全角スペースで区切るとエラーになるのでご注意ください。
実際にSelectしてみる
では、データベースにあらかじめ登録されている「商品マスタ」を全件検索してみましょう。
Select * from 商品マスタ
と入力し、実行ボタンをクリックして下さい。

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

ここまでは簡単ですね。では、「商品仕様」や「売上データ」についても、Select してみてみましょう。
抽出条件を指定する
次は抽出条件を指定してみます。抽出条件は select * from ~ の後に where 区を付けて、必要な条件を記述していきます。
条件式は、「価格 > 1000」 や 「都道府県='大阪府'」 などのように、カラム名と比較対象を比較演算子(不等号記号)で結びます。この時、比較対象が数値の場合はそのまま記述しますが、文字列の場合はシングルクォートで囲む必要があることを覚えておいて下さい。
論理演算子は、「価格 > 1000 and 都道府県= '大阪府'」や「都道府県= ’東京都’ or 都道府県= '大阪府'」などの様に、条件式の全てが満たされる必要があるか、いづれか1つだけ満たされれば良いかを指定するためのもので、and やor などのキーワードを使います。
条件が1つだけの場合
メーカーがSONYのものだけを抽出する場合、次のように記述します。
select * from 商品マスタ where メーカー = 'SONY'
では、さっそく試してみましょう。
結果は次の様になると思います。

では、単価が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
実行結果は次の通りです。

範囲を指定する記述は >、>=、<、<= という大なり小なり記号以外に
という記述が出来ます。
select * from 商品マスタ where 単価 between 40000 and 80000
と記述しても全く同じ答えになります。
良ければ試してみて下さい。
前方一致、後方一致、曖昧検索を行う場合
前方一致、後方一致、曖昧検索もよく使う検索方法です。いづれも like につづけて「検索パターン」を記述するのですが、この時ワイルドカードとして%文字を指定します。
前方一致、後方一致、曖昧検索は%の位置が異なるだけで、それ以外は全く同じ記述方法となります。
では、メーカー名に "ON" という文字列が含まれているものだけを抽出してみます。
select * from 商品マスタ where メーカー like '%ON%'
答えは次の通りですが、実行結果にSONYとCANONの2つが含まれるようになりました。

では、試しに 製品名が Power から始まるものを抽出してみましょう。
select * from 商品マスタ where 製品名 like 'Power%'
like は曖昧検索だけではありません。%を省略することでイコールで結んだ時と同じ完全一致の検索が行なえます。
抽出条件で使える演算子
ここまで簡単に説明してきましたが、抽出条件で使える演算子(比較演算子、論理演算子)を整理しておきましょう。
| 比較演算子 | 意味 | 記述例 |
|---|---|---|
| > | 大きい | 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が入らないように工夫することが多いです。
まとめ
今回はSelect 文の基本について解説しました。
Select 文はかなり複雑な条件を記述できますが、それは応用編として別に記述したいと思います。
ここでは基本を十分理解できるように、色々とツールで試して頂ければと思います。
特に抽出条件の書き方は、select に限らず、データの更新(update) や削除(delete) でも使いますので、ここを押さえて頂ければ、update や delete はごくごく簡単に感じると思います。
コメント