SQLite3
前回、データベース管理システムSQLite3のデータの型に関して勉強してみました。
今回は格納されたデータから条件に合うデータを抽出する方法を試していきましょう。
ということでまずはデータベースの作成を行います。
ターミナルを立ち上げ、こちらのコマンドを実行し、テーブルの作成、データの追加を行います。
sqlite3 test3.db
sqlite> .databases
sqlite> CREATE TABLE table1(id INTEGER PRIMARY KEY, name TEXT, age INTEGER);
sqlite> INSERT INTO table1(name, age) values('Sato', 10);
sqlite> INSERT INTO table1(name, age) values('Suzuki', 15);
sqlite> INSERT INTO table1(name, age) values('Takahashi', 20);
sqlite> INSERT INTO table1(name, age) values('Tanaka', 25);
sqlite> INSERT INTO table1(name, age) values('Ito', 30);
sqlite> INSERT INTO table1(name, age) values('Watanabe', 35);
sqlite> INSERT INTO table1(name, age) values('Yamamoto', 40);
sqlite> INSERT INTO table1(name, age) values('Nakamura', 45);
sqlite> INSERT INTO table1(name, age) values('Kobayashi', 50);
sqlite> INSERT INTO table1(name, age) values('Kato', 55);
そしてデータが正しく格納されているかSELECT文を使って確認しておきましょう。
sqlite> SELECT * from table1;
実行結果
1|Sato|10
2|Suzuki|15
3|Takahashi|20
4|Tanaka|25
5|Ito|30
6|Watanabe|35
7|Yamamoto|40
8|Nakamura|45
9|Kobayashi|50
10|Kato|55
これで準備は完了です。
条件に合うデータを抽出
ここから条件に合うデータを抽出していきますが、実は使う文は前々回にデータを取得する文として紹介した「SELECT文」です。
このSELECT文に条件を設定することで、その条件に合うデータが抽出されます。
その際に条件式に「WHERE」というコマンドを追加します。
そのためクエリとしては「SELECT 列名 FROM テーブル名 WHERE 条件式」となります。
まずは「nameがIto」に合うものを抽出してみましょう。
sqlite> SELECT * FROM table1 WHERE name = 'Ito';
実行結果
5|Ito|30
次に「ageが20より小さい」ものを抽出してみましょう。
sqlite> SELECT name FROM table1 WHERE age < 20;
実行結果
Sato
Suzuki
このように条件を抽出するために使う比較演算子としては下記のものが使用可能です。
a = b | aとbは等しい |
a <> b | aとbは等しくない |
a > b | aはbより大きい |
a >= b | aはb以上 |
a < b | aはbより小さい |
a <= b | aはb以下 |
また「a = b(aとbは等しい)」と「a<>b(aとbは等しくない)」は数値だけではなく、文字列にも使用できます。
複数の条件に合うデータを抽出
先ほどは一つの条件に合うデータの抽出でしたが、複数の条件でデータを抽出することも可能です。
その場合は「SELECT 列名 FROM テーブル名 WHERE 条件式1 論理演算子 条件式2」といった形で書きます。
論理演算子とはAND(条件式1、2の両方を満たすデータ)、OR(条件式1、2のどちらかを満たすデータ)、NOT(その条件を満たさないデータ)のことです。
「NOT」は二つの条件式をつなぐのではなく、条件式の前に置いて、その条件式を満たさないデータを取得するために使われます。
まずはANDから試してみましょう。
条件としてはageが20より大きいもので、nameがNakamuraではないものです。
sqlite> SELECT * FROM table1 where age > 20 and name <> 'Nakamura';
実行結果
4|Tanaka|25
5|Ito|30
6|Watanabe|35
7|Yamamoto|40
9|Kobayashi|50
10|Kato|55
確かにageが20より大きいデータでnameがNakamuraではないものが抽出されました。
次にORです。
条件としては、ageが20より小さいものか、nameがNakamuraのデータです。
sqlite> SELECT * FROM table1 where age < 20 or name = 'Nakamura';
実行結果
1|Sato|10
2|Suzuki|15
8|Nakamura|45
最後にNOTです。
nameがNakamuraではないものを抽出してみます。
sqlite> SELECT * FROM table1 where not name = 'Nakamura';
実行結果
1|Sato|10
2|Suzuki|15
3|Takahashi|20
4|Tanaka|25
5|Ito|30
6|Watanabe|35
7|Yamamoto|40
9|Kobayashi|50
10|Kato|55
これで条件を指定してデータを抽出する方法が分かりました。
次回はデータを更新したり、削除したりする方法とテーブルを削除する方法を試していきましょう。
ではでは今回はこんな感じで。
コメント