自宅のPCでSQLの実行環境を作る(初心者向け)
はじめに
弊社では数年くらい前から、ビジネス部門でもSQLを触る機会が増えました。
ある日、「SQLってよく分からんよな。エクセルとかと違って、家で練習したくても出来なくて困る。」といった会話が聞こえてきました。
私も入社したての頃は同じような悩みを抱えていたなぁ、、、しかし、家でも練習とは。。最近の若者はなかなか見上げたものである、、、としみじみと聞いていました。
確かに、エクセルの練習と比べると、SQLは練習はしにくいかもしれません。データベースに接続して練習用データを投入したり、非IT部門の方には少しハードルは高い気もします。
ところで、最近SQLite3を触れる機会がありました。データがファイルに出力され、完全にローカルで動くことに驚きました。これなら、自宅のパソコンさえあればSQLを実行する環境が作れそうです。そして、思ったのです。これで弊社の若者を救えるのではないか?、、と。
きっと、同じ悩みを持っている方も多いと思います。今回はSQLite3を使って自宅のPCでSQLの実行環境を構築する方法と、SQLite3の簡単な使い方を紹介します。
記事の内容
想定読者
自分のPCでSQLの練習をしたいけど、練習の環境をどうセットアップすれば良いか分からない人を想定しています。
プログラミング初心者の方、もしくは全くプログラミングを経験されていない方が該当するかと思います。
記事の範囲
- SQLite3のインストール
- SQlite3の簡単な使い方
コマンド・プロンプトでの使い方の説明となります。PythonやNode.jsといった、プログラミング言語からの操作は範囲外となります。
なお、SQLの文法の解説はありませんのでご了承ください。需要があれば書くので、Twitterで連絡ください。
前提
Windows10、11の利用を前提としています。
MacでもSQLite自体は利用可能ですが、インストール方法やPathの設定方法はこの記事の内容とは異なりますのでご留意ください。
SQLite3とは
SQLite3は軽量の関係データベースです。サーバ無しでも動作するため、AndroidやiPhoneといったスマートフォンをはじめ、様々な家電製品で使われています。公式HPによると、世界で一番使われているデータベース製品とのことです。
何といってもサーバ無しでも動かせるため、自宅のPCでも簡単にセットアップが可能です。サーバへのリモート接続などをする必要がありません。そして、OracleやMySQLといった、他のデータベースと同じ文法(SQL)で動作するため、練習にはもってこいです。
※ 厳密には、製品ごとに細かい違いはありますが、基本的には同じです。
SQLite3のセットアップ
ダウンロード
公式のdownloadページからWindows用の実行ファイルをダウンロードします。複数ありますが、Precompiled Binaries for Windowsのsqlite-tools-win32-x86-3420000.zip
を選んでください。
解凍して保存
ダウンロードしたzipファイルを解凍します。以下の3つの.exeファイルが入ってます。
- sqldiff.exe
- sqlite3.exe
- sqlite3_analyzer.exe
任意の場所にフォルダを作成し、上記3ファイルを保存します。フォルダの場所はどこでも良いですが、フォルダのパスが変わってしまうと動かなくなってしまいます。 親フォルダも含め、名前や階層が変わらない場所に置くことをおすすめします。
ちなみに私はC:\sqlite
に保存しています。
Pathを設定
上記で作成したフォルダにPathを通します。これにより、SQLiteをコマンドラインから使うときに、フルパスで指定する必要がなくなります。
1. 環境変数の編集画面を開く
- キーボードで「Windowsロゴ + I」を押して設定画面を開きます。
- 左上の検索ボックスに「環境変数」と入力
- 候補から「環境変数を編集」を選択
2. Pathの編集を行う
- 「ユーザの環境変数(U)」のPathをダブルクリック
- 「新規(N)」を押して、3つの.exeファイルを保存したフォルダのパスをコピペ
- 「OK」で画面を閉じていけば完了!
利用方法
コマンド・プロンプトから利用します。もしかすると初めての方もいるかもしれませんが、こればかりは避けて通れません。 そこまで難しい使い方はしませんので、あまり気にせず大丈夫です。
作業フォルダの作成
任意の場所で作業フォルダを作成します。どこでも好きな名前で大丈夫です。ここでは、C:\sql-test
を作業フォルダにします。
sqliteではデータベースのデータはファイルに出力されます。ここで作成したフォルダに、そのファイルが出力されることになります。
コマンド・プロンプトで作業フォルダへ
コマンド・プロンプトを起動
- キーボードで「Windowsロゴ + R」を同時に押す
- 「ファイル名を指定して実行」の画面が開くので、「cmd」と入力してOKを押す
コマンド・プロンプトが起動します。
作業フォルダに移動
コマンドプロンプトで、以下のコマンドを入力してEnterキーを押します。
cd C:\sql-test
cdがフォルダを移動するコマンドです。C:\sql-test
の部分は、実際に作成した作業フォルダに適宜変えてください。
SQLite3を起動
ここで、SQLite3を起動します。コマンドはsqlite3 ファイル名
です。
上述の通り、SQLite3ではデータベースはファイルとして出力されます。そのファイル名を指定します。
既存のデータベースで起動する場合は、そのファイル名を入力してください。新たに作る場合は、好きな名前で大丈夫です。ただし、拡張子は「.db」にしておきましょう 。
ここでは、「test.db」にします。
sqlite3 test.db
最終行が画像の通りsqlite>
になっていれば起動OKです。
もし、以下のようなメッセージが出てる場合は起動できていません。Pathの設定がうまく出来ていないと思われるので、再度試してください。
'sqlite3' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
SQL実行
後は直接SQL分を記述していきます。CREATE分であれ、INSERT分であれ、SELECT分であれ、SQL分の最期にはセミコロン(;)が必要です。セミコロンがSQLの実行単位となるので、改行して長いSQLを記述することも出来ます。
後述しますが、SQLをテキストファイルとして保存して、それを読み込ませて実行することも可能です。
まずは直接記述の方法を見ていきます。
テーブル作成(CREATE)
ID列(文字列型)、Name列(文字列型)、Age列(数字型)のEMPLOYEEテーブルを作成します。ID列はPRIMARY KEYにしています。
sqlite> CREATE TABLE EMPLOYEE (ID TEXT PRIMARY KEY, Name TEXT, Age INTEGER);
実行すると、作業フォルダにtest.dbが作成されているのが分かると思います。
データ投入(INSERT)
上記のEMPLOYEEテーブルに3レコード追加します。
sqlite> INSERT INTO EMPLOYEE VALUES('1','John',30);
sqlite> INSERT INTO EMPLOYEE VALUES('2','Kate',35);
sqlite> INSERT INTO EMPLOYEE VALUES('3','BOB',25);
他の関係データベースと同様に、文字列はシングル・クオテーション(「'」)で囲む必要があります。
データを抽出(SELECT)
挿入したレコードがSELECT出来るか確認します。
sqlite> SELECT * FROM EMPLOYEE;
以下のように結果が返ってきました。ちゃんと入ってますね。
1|John|30
2|Kate|35
3|BOB|25
補足
- sqlite3はPRIMARY KEYをつけなくても問題ありません。
- 他の関係データベースと同じく、大文字・小文字の区別はありません。
- sqlite_ではじまるテーブル名は付けることが出来ません。
- sqliteで列(カラム)に定義できる型は、TEXT(文字列)、INTEGER(整数)、REAL(少数)、BLOB(バイナリ)等です。
データの型は、実は少しややこしいです。他のDBとの整合のためか、INT,BIGINTのようにINTが含まれる場合はINTEGER扱いになりますし、VARCHAR,CHAR,NCHARのようにCHARが含まれる場合はTEXTとして扱われます。
SQLite固有コマンド
SQLite固有のコマンドのうち、便利なものを紹介します。固有コマンドは**.read, .schema**のようにドット(「.」)から始まります。
全てのコマンドは、英語ですが公式サイトで確認できます。
.exitコマンド
sqlite3を抜ける時に使います。一番よく使うことになります。作業が終わったら.exit
を打って抜けましょう。
.schemaコマンド
.schema テーブル名
で、テーブルを作成した時のCREATE文の表示が出来ます。テーブルの定義を確認する時に便利です。
テーブル名を指定しないと、全表示となります。
sqlite> .schema
CREATE TABLE EMPLOYEE (ID TEXT PRIMARY KEY, Name TEXT, Age INTEGER);
作成したEMPLOYEEテーブルのCREATE文が表示されていることが分かります。
.readコマンド
.read ファイル名
で、ファイルに記述されたSQLを実行することができます。
作業フォルダに、以下の内容でファイルを保存し、試してみます。なお、ファイル名はselect.sqlにします。
SELECT *
FROM EMPLOYEE as E
WHERE E.ID = '2';
ファイルから実行する場合も最後のセミコロン(;)を忘れずに。
.readコマンドでファイルを指定します。
sqlite> .read select.sql
ちゃんと実行結果が表示されました!
ID Name Age
-- ---- ---
2 Kate 35
ファイルに自分の見やすい形でSQLを記述できるので、練習にちょうど良いのではないでしょうか。
.modeコマンド
.mode モード
で出力の形を変更することができます。モードとして指定できるのは、csv,html,json,column,table等があります。
モードを変えて、出力の形をいくつか確認してみます。
json
sqlite> .mode json
sqlite> SELECT * FROM EMPLOYEE;
[{"ID":"1","Name":"John","Age":30},
{"ID":"2","Name":"Kate","Age":35},
{"ID":"3","Name":"BOB","Age":25}]
html
sqlite> .mode html
sqlite> SELECT * FROM EMPLOYEE;
<TR><TD>1</TD>
<TD>John</TD>
<TD>30</TD>
</TR>
<TR><TD>2</TD>
<TD>Kate</TD>
<TD>35</TD>
</TR>
<TR><TD>3</TD>
<TD>BOB</TD>
<TD>25</T
column
sqlite> .mode column
sqlite> SELECT * FROM EMPLOYEE;
ID Name Age
-- ---- ---
1 John 30
2 Kate 35
3 BOB 25
table
sqlite> .mode table
sqlite> SELECT * FROM EMPLOYEE;
+----+------+-----+
| ID | Name | Age |
+----+------+-----+
| 1 | John | 30 |
| 2 | Kate | 35 |
| 3 | BOB | 25 |
+----+------+-----+
個人的にはcolumnが好みですかね。jsonとかhtmlは、データを別のところで使う時に便利そうです。
.importコマンド
.import ファイル名 テーブル名
で、ファイルからテーブルにレコードを追加できます。この機能を使えば、csvからデータを取り込むことが可能です。
存在しないテーブル名を指定した場合、新しいテーブルが作られます。この際、csvの最初の1行が列名として定義されます。
テーブル新規追加
以下のcsvを部署(DEPARTMENT)テーブルに見立てて読み込み、テーブルが新規作成されることを確認してみます。
ファイル名はdepartment.csvにしておきます。
DEPARTMENT_ID,DEPARTMENT_NAME
001,Sales
002,Human Resource
003,Marketing
.importコマンドを実行します。---csv
はファイルがcsvであることを明示的に示しています。念のため、.modeもcsvにした上で実行します。
sqlite> .mode csv
sqlite> .import --csv department.csv DEPARTMENT
SELECTして確かめてみます。
sqlite> SELECT * FROM DEPARTMENT;
DEPARTMENT_ID,DEPARTMENT_NAME
001,Sales
002,"Human Resource"
003,Marketing
新規作成されました!Human Resourceがクオテーションで括られているのは、スペースが混ざっているからでしょう。
既存のテーブルに追加
今度は、csvから既存のテーブルにレコードするのを試してみます。
ファイル名はadd-department.csvにしておきます。
DEPARTMENT_ID,DEPARTMENT_NAME
004,Finance
005,Legal
006,System
.importで読み込みます。既存のテーブルに追加するので、ファイルのヘッダー行を無視するために、---skip 1
を入れています。はじめの1行は無視するという意味です。
sqlite> .mode csv
sqlite> .import --csv --skip 1 add-department.csv DEPARTMENT
SELECTして追加されているか確認します。
sqlite> SELECT * FROM DEPARTMENT;
DEPARTMENT_ID,DEPARTMENT_NAME
001,Sales
002,"Human Resource"
003,Marketing
004,Finance
005,Legal
006,System
ちゃんと追加されています。
なかなか便利ですね。練習用データを投入するのに使えそうです。
練習用データベース
手っ取り早くSELECT文だけ練習したい方向けに、テスト用データベースを作成しました。良かったらご利用ください。
こちらからダウンロードできます。SQLiteの.dbファイル(152KB)です。
テーブルの説明や、練習問題はGithubを確認してください。
SELECT文の練習が目的であっても、自分でテーブル作成やレコード挿入もやってみることを個人的にはお勧めします。やはり手を動かす部分が増えればその分早く覚えられますからね。
とはいえ、実務では参照権限しかなくSELECT文しか利用しない方もそれなりにいると思いますので、適宜お使いください。
最後に
自宅のPCでSQLを実行する方法として、SQLite3のセットアップ手順と、簡単な使い方を解説しました。
他にも、SQLite3にはSQLの実行結果をファイルに出力させるなど、便利な機能があります。一通りのことは出来るようなので、他に面白い機能があったら、後で記事を更新しようと思います。
ここ10年くらい、仕事でも『データの重要性』とかよく聞くようになったのではないでしょうか。結構曖昧に語られることが多い気がしますが、、、結局のところ、データ分析の入口は業務用DB等からデータを取ってくるところから始まります。これからはIT部門以外でも、SQLの知識が求められるシーンは増えてくると思います。
SQLiteなら自宅のPCでも簡単に練習環境を整えられるので、ぜひ試してみてください。私も練習します。