SQLite の基礎

# はじめに
**SQLite** は、軽量のリレーショナルデータベース管理システム（RDBMS）で、セットアップや管理が簡単です。

単一のファイルにデータベースを保存するため、特にモバイルアプリケーションや小規模な Web サイトで広く使用されています。

本記事では、SQLite の基本的な使い方について説明します。

SQL の基本用語は以下の記事で解説しています。

https://qiita.com/shikuno_dev/items/4d251d20d1d21e3da834

# SQLiteのインストール
SQLiteは多くのプラットフォームに対応しています。Windows、macOS の各OSでのインストール方法を紹介します。

## Windows

1. [SQLiteの公式サイト](https://www.sqlite.org/download.html)から、Windows向けのプリコンパイルバイナリをダウンロードします。
2. ZIPファイルを解凍し、`sqlite3.exe` を適当なディレクトリに配置します。
3. コマンドプロンプトを開き、以下のコマンドでインストールを確認します。
    ```bash
    $ sqlite3 --version
    ```
## macOS
macOS にははじめからインストールされています。
1. ターミナルを開き、以下のコマンドでインストールを確認します。
    ```bash
    $ sqlite3 --version
    ```

# インタラクティブシェルの起動
SQLite のインタラクティブシェルは、データベースを操作するためのコマンドラインツールです。このツールは、ターミナルやコマンドプロンプトから起動して使用します。


インタラクティブシェル内では、以下のことを実行することができます。
- **SQL コマンドの実行**
  SQL コマンド（例えば、`SELECT` や `DELETE` など）を直接入力してデータベースの操作を行います。
- **ドットコマンドの利用**
   SQL コマンド以外にも `.` で始まる特別なコマンドを使用できます。

`sqlite3` というコマンドを入力して SQLite のインタラクティブシェルを起動します。
```bash
$ sqlite3

sqlite> 
```


# インタラクティブシェルの終了
`.quit` コマンドで SQLite のインタラクティブシェルを終了することができます。
```bash
# SQLite を終了する
sqlite> .quit
```


# ヘルプの表示
## `sqlite3 -h` コマンド
`sqlite3 -h` コマンドは `sqlite3` コマンドの基本的な使用方法やオプションに関する情報が表示されます。
```bash
$ sqlite3 -h

Usage: sqlite3 [OPTIONS] FILENAME [SQL]
FILENAME is the name of an SQLite database. A new database is created
if the file does not previously exist.
...
```
## `.help` コマンド
`.help` コマンドは  SQLite のインタラクティブシェルの起動後に使用します。このコマンドを実行すると、Sシェルで利用可能なドットコマンドのリストが表示されます。
```bash
sqlite> .help

.auth ON|OFF             Show authorizer callbacks
.backup ?DB? FILE        Backup DB (default "main") to FILE
.bail on|off             Stop after hitting an error.  Default OFF
...
```


# データベースの作成
データベースの作成方法は、使用する RDBMS の種類によって異なります。

SQLite は**ファイルベース**のデータベース管理システム（DBMS）であり、データベースの作成は非常に簡単です。

SQLite のシェルを起動後、`.open` コマンドで新しいデータベースを作成し、接続できます。**`<ファイル名>` のデータベースファイルが既に存在する場合は、データベースへの接続のみを実行**します。
```bash
# ファイル名の拡張子に制約はありません。
sqlite> .open <ファイル名> # .open database.db
```

SQLite シェルの起動とデータベースの作成を同時に行うこともできます。
```bash
$ sqlite3 <ファイル名>
```
このコマンドを実行すると、 任意の名前（例えば、`database.db`）の**新しいデータベースファイルが作成した上で作成したデータベースに接続**されます。
**`<ファイル名>` のデータベースファイルが既に存在する場合は、データベースへの接続のみを実行**します。
```bash
$ sqlite3 database.db

SQLite version 3.39.5 2022-10-14 20:58:05
Enter ".help" for usage hints.
```
データベースが作成されているか確認にします。
```bash
# データベースが作成されているか確認
sqlite> .databases
```

`.quit` コマンドで SQLite のインタラクティブシェルを終了してもデータベースは残ったままです。`ls` コマンドを実行すると作成したデータベースファイルを確認できます。
```bash
$ ls

database.db
```

# データベースへの接続
```bash
$ sqlite3 <ファイル名>
```
上記でも説明しましたが、このコマンドを実行すると、`<ファイル名>` のデータベースファイルが既に存在する場合は、データベースへの接続を実行します。
存在しない場合は、任意の名前（例えば、database.db）の新しいデータベースファイルが作成した上で作成したデータベースに接続されます。

```bash
$ sqlite3 database.db

SQLite version 3.39.5 2022-10-14 20:58:05
Enter ".help" for usage hints.
```

# データベースの削除
SQLite では、データベースは単一のファイルとして保存されます。そのため、データベースを削除するにはファイルを削除する方法が一般的です。

# テーブルの作成
SQLite のシェルを起動後、`CREATE` 文で簡単にデータベースを作成できます。
```sql
CREATE TABLE users (
    id INTEGER PRIMARY KEY,
    name TEXT,
    age INTEGER
);
```

# テーブルの基本的な操作
SQLite でも他の RDBMS と同じように SQL を実行できます。
## データの挿入
`INSERT` 文でテーブルにデータを挿入します。
```sql
INSERT INTO users (name, age) VALUES ('Alice', 30);
INSERT INTO users (name, age) VALUES ('Bob', 25);
```
## データの取得
挿入したデータを取得するには、`SELECT` 文を使用します。
```sql
SELECT * FROM users;
```
## データの更新
データを更新するには、`UPDATE` 文を使用します。
```sql
UPDATE users SET age = 31 WHERE name = 'Alice';
```
## データの削除
データを削除するには、`DELETE` 文を使用します。
```sql
DELETE FROM users WHERE name = 'Bob';
```

# テーブルの削除
SQLite でテーブルを削除するには、`DROP TABLE` 文を使用します。
以下は、`users` というテーブルを削除する例です。
```sql
DROP TABLE IF EXISTS users;
```
- `DROP TABLE`: 指定したテーブルを削除します。
- `IF EXISTS`: テーブルが存在する場合にのみ削除します。存在しない場合はエラーにならずに処理を終了します。