# チュートリアル

```@contents
Pages = ["tutorial.md"]
Depth = 4
```

## データベースを手に入れる
データベースはファイルとして手に入れることができます。
QAQCキャンペーンの終了後にMattermostチャンネル上でマニュアルで配布されるものをダウンロードするか、最新のものが欲しい場合は以下の方法で手に入ります。

- このリポジトリのコードを実行する([このページ](./about_software.md)や[`PSBoardDataBase.create_database`](@ref)参照)
- QAQCをやってる部屋のPCにインストールしてあるので、それを実行する
- 知ってる人に頼む

## データベースを眺めてみる
[ここ](./index.md#アクセス方法)に列挙されているが、ここでは[DB Browser for SQLite](https://sqlitebrowser.org)で説明します。
ブラウザをインストール・起動したら、[ファイル]メニューからデータベースを開くを選びデータベースのファイルを開きます。

### テーブル
ウィンドウ左側にテーブルの一覧が表示されます。

![テーブル一覧とqaqc_runsテーブルの詳細](./assets/browsing_tables.png)

このデータベースは基本的に複数のテーブル(2次元データ)からなっています。

試しに、`qaqc_runs`という名前のテーブルをクリックすると、そのテーブルに含まれる列の情報が表示されます。
左側に列の名前、真ん中にデータ型が表示されています。
`id`の列のアイコンに黄色の鍵が描かれているが、これはこの列にはそのテーブルにおいて行を識別するための一意の値が入っていることを表します。
`campaign_id`のアイコンには灰色の鍵が描かれているが、これはこの列の要素は別のテーブルにおけるキーを参照していることを表しています。
具体的には`qaqc_campaigns`テーブルの`id`コラムのいずれかの値が入っています。


### テーブルの中身
次はこのテーブルの中身を実際に見てみよう。
テーブル名の上で右クリックすると_テーブルを閲覧_というメニューがあるので、それをクリックします。

![テーブルの中身](./assets/browsing_a_table.png)

文字通りテーブルが表示されます。
列名の書かれているすぐ下の_フィルター_というところに検索したい文字列を打ち込むことで、簡易的な検索をすることができます。
列名をクリックすることで、並べ替えもできます。


### SQL
ここまではスプレッドシートでやることと対して変わらないですが、このデータベースが真に強力なのは、[SQL](https://ja.wikipedia.org/wiki/SQL)という言語を用いてデータベースの検索(や更新)ができることです。

SQLの実行は_SQL実行_のタブから行うことができます。
まずは先ほどと同様に`qaqc_runs`のデータをすべて取ってきてみます。
上部のテキストエディタ領域に以下のSQLを書き、Ctrl+Enterを押すと実行できます。

```sql
SELECT *
FROM qaqc_runs
```

![SQLを実行する様子](./assets/browsing_sql_exec.png)

下側で取得した結果が見れます。
無事にテーブルを取得することができました。

次は複数のテーブルを組み合わせて結果を見てみましょう。
`qaqc_runs`の結果に加えて、それぞれのキャンペーンの開始と終了の日付も取得してみます。
以下のSQLを実行してみてください。

```sql
SELECT
	qaqc_runs.id,
	qaqc_runs.campaign_id,
	qaqc_runs.run_datetime,
	qaqc_campaigns.start_date,
	qaqc_campaigns.end_date
FROM 
	qaqc_runs, qaqc_campaigns
WHERE 
	qaqc_runs.campaign_id = qaqc_campaigns.id
```

このSQLでは`WHERE`句を用いて制約を課しています(この制約がないと直積集合が返ってきます)。
また、特定のコラムだけを取得するようにしました。
これで各QAQC runに対して日付関連のデータを取得することができました。

### もっとSQL
SQLという言語は非常に強力です[^1]。
実はこのブラウザはGUIを用いて操作しているときも裏ではSQLを実行していました。
その履歴は、右下のタブで_SQLログ_を選択することで見れます(前の画像に載っています)[^2]。
テーブルを開いたり、フィルタをかけたりすると、SQLが次々と実行される様子を見ることができます。

[^1]: チューリング完全です。例えば[このページ](https://sqlite.org/lang_with.html)の3.5. Outlandish Recursive Query Examplesを見てみてください。
[^2]: 送信元として、"アプリケーション"を選択する必要があるかもしれません。

## 次のステップ
このままではこのデータベースを解析に組み込む方法がわからないでしょう。
次に参照すると良いであろうリンクを以下に並べます:

- [Home](./index.md)にはデータベースにアクセスする他の手段や古いですがデータベースのテーブル間の関係を表した図が載っています。
- [Examples](./examples.md)にはSQLiteとJuliaを用いてデータベースから様々な情報を取得する例が載っています。
- [power_stats.html](./notebooks/power_stats.html)[^3]にはデータベースを用いた解析の例が載っています。
- [skew_stats.html](./notebooks/skew_stats.html)はデータベースに加えて、ログやデータベース生成プログラムも直接使用したより複雑な解析を行っています。[notebooks](./notebooks/index.html)にこれらのノートブックの一覧があります。

[^3]: URL`notebooks/power_stats.html`にも同じファイルがあります。
