スプレッドシートを用いてSQLを作る

# はじめに
この記事では、スプレッドシートを用いてSQLを作成する方法を解説します。

# なぜスプレッドシートを使うか
単純にSQLを作りやすく、関数を使えば色々できるからです。
私はよくスプレッドシートを用いて、データパッチ用のSQLを作成しています。
Excelでも問題なくできると思います。

### パッチとは
https://e-words.jp/w/%E3%83%91%E3%83%83%E3%83%81.html
##### IT用語辞典一部抜粋
```
ITの分野では、ソフトウェアを構成するプログラムやデータを更新・修正するために、
新しい版との相違点（差分）を抜き出したデータのことをパッチという。
ファイルの形にまとめることが多いため「パッチファイル」とも呼ばれる。
パッチを反映させて最新の状態に更新することを「パッチを当てる」「パッチを適用する」などという。
```

# SQLの作り方
仮に下記のようなusersテーブルがあるとします。
| id | last_name | first_name | gender | score |
| :-: | :------: | :--------: | :----: | :---: |
|  1  |   田中    |   太郎    |  NULL   |  75   |
|  2  |   鈴木    |   次郎    |  NULL   |  63   |
|  3  |   伊藤    |   結衣    |  NULL   |  92   |
|  4  |   斎藤    |   花子    |  NULL   |  69   |
|  5  |   村上    |   三郎    |  NULL   |  80   |

スプレッドシートにその表を書いてみます。
![スクリーンショット 2022-10-10 15.00.23.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/935364/eb199ac6-8e02-d6b4-6b89-e85230a7fe65.jpeg)

### (1)genderカラムを更新
genderカラムを更新するためのUPDATE文を作成してみましょう。
F列にfix_gender（genderを更新する値）という項目を追加し、G列にUPDATE文を書きます。
まずはfix_genderを決めます。
ちなみにgenderの値は、男性・・・0、女性・・・1とします。
![スクリーンショット 2022-10-10 15.02.01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/935364/b8e565a6-780d-0e46-d777-2cbf45913eaf.jpeg)
次にUPDATE文を作っていきます。
もし仮に、id1の田中太郎さんのgenderを更新しようとした場合、次のようなSQLになります。
```
UPDATE users SET gender = 0 WHERE id = 1;
```
そのUPDATE文をスプレッドシートを用いると、このように書けます。（G列に記載）
```
="UPDATE users SET gender = "&F2&" WHERE id = "&A2&";"
```
![スクリーンショット 2022-10-10 15.12.22.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/935364/35df0aba-6923-b748-dffa-2c752bfcee34.jpeg)
1つずつ分割して確認していきます。
セルの最初に「=（イコール）」を書くと、計算式や関数を使うことができます。
ただし、`UPDATE users SET gender = `は固定の文字列です。
関数内で文字列を指定する場合は、「"（ダブルクォーテーション）」を使用します。

更新したいgenderの値は変数（F列）です。
その場合、文字列を結合できる「&（アンド/アンパサンド）」を用います。
`&F2&`のように`&`で挟むと、その部分だけセルの値（変数）となります。
文字列の連結は便利ですね。（↓`&`の使用例）
![スクリーンショット 2022-10-10 15.29.39.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/935364/ad6ea4e0-6723-4c63-2795-db278483dd28.jpeg)
固定の文字列と変数のセルを繋ぎ合わせて、SQLを作成します。
・`UPDATE users SET gender = ` → 固定
・`F2` → 変数
・` WHERE id = ` → 固定
・`A2` → 変数
・`;` → 固定
⇨ `="UPDATE users SET gender = "&F2&" WHERE id = "&A2&";"`

これで田中太郎さんのgenderカラムの更新用SQLができました。
2列目以降は、最初に作ったSQLのセル（今回の場合はG2）のフィルハンドル（セルの右下に現れる四角いアイコン）をダブルクリックまたは下へドラッグすることで自動作成できます。
### (2)scoreカラムを更新
スプレッドシートの計算式を用いたSQLを作成します。
各scoreに対して5追加するUPDATE文を作ります。
fix_scoreの列に、scoreに対してプラス5した値を入れます。
![スクリーンショット 2022-10-10 16.32.44.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/935364/ae066f1f-4195-28c0-9fe1-93feef3d76c0.jpeg)
(1)と同じ作り方で、UPDATE文はできます。
![スクリーンショット 2022-10-10 16.33.09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/935364/7208b95e-f29f-e9fb-0b32-e822b4718809.jpeg)
```
="UPDATE users SET score = "&H2&" WHERE id = "&A2&";"
```
### (3)全データ挿入
仮にusersテーブルに1件もレコードがないとして、今までのデータを全て挿入することも可能です。
文字列を挿入するカラムは「'（クォーテーション）」が必要なので、気をつけてください。
![スクリーンショット 2022-10-10 16.38.01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/935364/b0661372-7f84-8438-7237-1ce454754492.jpeg)
```
="INSERT INTO users VALUE ("&A2&", '"&B2&"', '"&C2&"', "&D2&", "&E2&");"
```

# おわりに
関数（IF, SUM, VLOOKUPなど）を使えば、より複雑なSQLを作成することができます。
ただし、複雑すぎると、間違いの要因になる恐れがあるので、注意が必要です。
解説は以上です。
ここまで読んでいただき、ありがとうございました。