SQL学習備忘録　Flaskさわってみて久々にSQLをコードに直書きしていたら諸々忘れていたため作ったSQLチートシート①基本4大命令

<h3>　この記事は、Python のフレームワークのFlask を学習・使用するにあたり、「SQLの知識も全然足りないな」と感じたので、おそらく定番？の以下の本をベースにを学び直した際の学習備忘録です。（※というか完全に自分のためのコピペ用チートシート。Qiitaなのに・・）</h3>

SQL ≒「MySQL等の表形式のデータベース(RDB、Relational DataBase)からデータを取り出す命令文を記述するための構文」

____

<h4>スッキリわかるSQL入門 第3版 ドリル256問付き! (スッキリわかる入門シリーズ)</h4>
<h5>中山 清喬 ･ 飯田 理恵子 著, 株式会社フレアリンク 監修</h5>

<details><summary>Amazonリンク</summary>

https://www.amazon.co.jp/%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8BSQL%E5%85%A5%E9%96%80-%E7%AC%AC3%E7%89%88-%E3%83%89%E3%83%AA%E3%83%AB256%E5%95%8F%E4%BB%98%E3%81%8D-%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8B%E5%85%A5%E9%96%80%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E4%B8%AD%E5%B1%B1/dp/4295013390/ref=sr_1_3?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3IZ1Q8GQFBM26&dib=eyJ2IjoiMSJ9.xInwby6L9meVu-DcOzcsfK6z5ePG5-SuA18Than2xNKh0KHSJDNGGALEr7zTf9r54mHbgUB9nEa1ozJ3dvr2vGeTmkvUwH8PB5UW2Ans1Nf-t2pY12X-JT_SdKm9weICLCN3RHO5SMdvbzMkmit0rPgiSAtswYJoieBmFo3gCDZTg3UEv1eeCtiFMuIQRISPvnYZle36zpqExmxTqtsXvKBBgGFgQGglES8oFmGFMMclQsAWLK0p2Ji4xtgzqY6MPAZ3QC_h9Jl5-PhDhbUrKnPd_rAbjZsB-LCMObce3Cc.16aGhULh8IPMXFRvLfhgOvb4nmteJmsLledD2jjA9K0&dib_tag=se&keywords=%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E5%88%86%E3%81%8B%E3%82%8BSQL%E5%85%A5%E9%96%80&qid=1712982169&sprefix=%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E5%88%86%E3%81%8B%E3%82%8Bsql%E5%85%A5%E9%96%80%2Caps%2C315&sr=8-3

</details>

　なお、この本は、シリーズの１冊目である『スッキリ分かるJava入門』の「続編」として紹介されていますが、**（言語により多少違いはあるものの）SQLは汎用性が高く、Java 以外の言語を使用する場合もフレームワークを使用せずにコードを書く場合は、文字列型などの変数に代入して直接埋め込む（表現合ってる？）ことは結構ある**ようです。
 
　(Python、PHP、Java、C 等)　
 
 **要するに、この本は他のシリーズとは別に独立しています**

　また転職活動時、ある面談で相手の方が「（一番求人の多いと言われている）Java と SQLさえできれば、とりあえず仕事がないこともない」とおっしゃられていました。
 （※ただ、転職活動時の経験から以下のように言語の需要には微妙に地域差があります）

 <details><summary>転職活動時に感じた言語ニーズの地域差の独断と偏見</summary>

https://qiita.com/thinking-weed/items/28d381b9475d854f34f1

</details>

____
 
 ※実際、例えば下記のようなFlaskのコード以外にも、自分が利用していたプログラミングスクールのカリキュラム内にPHP**コードの中に直書き**するカリキュラムがありました。

<details><summary>Flask のファイル内のSQL例</summary>

<h4>Flask のプロジェクトは例えば次のようなフォルダ構成で、ルーター兼コントローラーの役割をする.pyファイルを作ります。（そこに以下のようにSQLを変数に代入する形で書きます。）</h4>

　※なお、**Flask はフレームワークという割にデフォルトの最初の状態はスカスカです（というか何もありません。「from flask import Flask」と書き始める.pyファイルを含め、１からフォルダやファイルを作るところから始めます）**

![flask1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/3e6e656e-91f8-3ef4-e858-ea8bf16d23cf.png)


上の画像のように書いたSQLを次のようにユーザー定義関数などの引数などに用いるみたいです。

![flask2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/704af668-cd98-a0df-3e6f-fb556dbda04c.png)

</details>

____

<h3>　X に潜むつよつよエンジニアには、よく使うSQL構文をエクセルにまとめた「チートシート」を作っている方も少ないないようです。（が、コピペは Qiita の方が楽なので今回はこちらに）</h3>

（※「cheat sheet」の元の意味は「カンニングペーパー」ですが、IT業界では、よく使うコード等のコピペ元のことを指します）

____

<h3>　〇以下チートシート１枚目（SQLは各単語の間が半角英数スペースでないとエラーになるので、カラム名とかテーブル名を差し替える場合は注意してください。）</h3>

※スペースがない場合もエラーになります

column_name：カラム（＝縦の項目、列）名、（対応する）table_name：テーブル名 とします。（※ここでの table は「表」です）

____

<h2>データを（検索して）取得する</h2>

<h4>① テーブルから必要な列の値を取得する</h4>

```sql
SELECT column_name1 FROM table_name1
```
<h4>② テーブルから必要な複数の列の値を取得する</h4>
※「…」はさらに続く場合を表します。２つしか必要としない場合は消してください。

```sql
SELECT column_name1, column_name2, … FROM table_name1
```

<h4>③ テーブルからすべての列の値を取得する</h4>

```sql
SELECT * FROM table_name1
```

<h4>④ テーブルからすべての列の値を取得する</h4>

```sql
SELECT * FROM table_name1
```

<h4>⑤ テーブルからある条件にあてはまる列の値を取得する</h4>

```sql
SELECT column_name1, column_name2, … FROM table_name1 WHERE 条件式
```

**プログラミングには珍しく条件式において**
<h5>　「=」１つが「等しいかどうか」の比較演算子であることに注意。（※「==」ではない）</h5>
<h5>　「!=」ではなく「<>」が「左右の値が等しくない」の比較演算子</h5>


<h2>データを追加する</h2>

```sql
INSERT INTO table_name1 VALUES ('～', '～', ～, ～, …)
```
※() の中身はテーブルを作成したときのカラムのデータ型（文字列型など）に対応させる。
なお、これら上記のSQL全体を文字列として変数に代入する等して埋め込む際には、内部で仮に上記のように文字列型の値を入れるのに「'」を使っている場合は、全体は「"」で囲まないと変な所で切れてエラーになる場合があるので注意。

※冒頭の学習資料に付属のRDBMS(Relational DataBase Management System) では、文字列型のデータを入れるとき、（"～", … ）とダブルクォーテーションで囲むとエラーになりましたが、MySQL（WorkBench）を開いて、実行すると、以下のように実行されました。

<details><summary>MySQL WorkBench（Laravelで作った Portfolio につけた CRUD に紐付けたDB）の様子</summary>

![mySQLWorkbench1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/cdb48d8f-82b9-501c-ade4-ff28ee2f83b6.png)

![mySQLWorkbench2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/c0a99f27-9439-c1b2-2102-f50c2b53ab8c.png)

![mySQLWorkbench3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/e8f8c44e-ab88-eea2-32e9-6c94e6cb1737.png)

</details>

<h2>データを編集する（更新する）</h2>

```sql
UPDATE table_name1 SET column_name1 = 変更後の値 (WHERE 条件式)
```

<h2>データを削除する</h2>

```sql
DELETE FROM table_name1 (WHERE 条件式)
```
<h3>※WHERE句で対象行（レコード）を指定しない場合「データ全消去」になるため要注意</h3>

____

なおSQLは
<h4>「文の途中に改行を入れることができる」</h4>
<h4>「行の先頭や行の途中に『半角』のスペースを入れることができる」</h4>
ため、複数のSQL文をヒアドキュメントなどで１つの変数に代入して、
それを使って一気に複数のSQL文を実行するコードも結構これまでプログラミングの学習の過程で何度か見かけました。（※ヒアドキュメントについては、末尾の参考資料④を参照）

<h1>他に学習に主に参考した資料</h1>

① Flask公式ドキュメント 
https://msiz07-flask-docs-ja.readthedocs.io/ja/latest/installation.html#install-flask

※powershellとかzshとかコマンドプロンプト(cmd)で、以下のpipコマンドですぐ入ります

```powershell
pip install Flask
```

②Pythonの「マイクロ・フレームワーク」「Flask」入門　清水美樹 著　工学社

<details>
<summary>Amazonリンク</summary>

https://www.amazon.co.jp/Python%E3%81%AE%E3%80%8C%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%83%BB%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%80%8D%E3%80%8CFlask%E3%80%8D%E5%85%A5%E9%96%80-I-BOOKS-%E6%B8%85%E6%B0%B4-%E7%BE%8E%E6%A8%B9/dp/477752227X/ref=sr_1_4?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3NB2NT7IY04J1&dib=eyJ2IjoiMSJ9.T0ecU1DK7nlaiSdzk3WrauEp0YSHoUFYNSTFbdy8eDmJe4ZFwvb-mKC5eXkE405EvihztiQZkKxDP9QIjvWYFJOtE9ZAaEyFKVxOpge8c8BVgalasCwtBOTHDvn8tdBnTy4duMQAvjixZLWGnaT7kYizkJUrNuHhDUs1iv8VfZoJGSi02NOTUowzx2MFBeCLQzJcOsuiYcaZ8PPxmQ23RyBXMEYDKM4MTq8nNzwQXlhqxEIZACXg3WMYlS7AnmKzW5UgQF-6GbeKmX6LOc4z7iHiLFTSTiZYDLdqLkW0ut8.yWjFzBGhRTgS0tCAioFLuGLqRbG180nO5jOxEuOg7q4&dib_tag=se&keywords=flask+%E5%85%A5%E9%96%80&qid=1712980061&sprefix=flask%E5%85%A5%E9%96%80%2Caps%2C193&sr=8-4
    
</details>

③Pythonプログラミング VTuber サプー
（【PythonでWebアプリ作成】Flask入門 ！この動画１本でWebアプリが作れちゃう！ 〜 Pythonプログラミング初心者用 〜 ）

<details><summary>youtubeリンク</summary>

https://www.youtube.com/watch?v=EQIAzH0HvzQ

</details>

④ Pythonのヒアドキュメント　@ykhirao(yk)さん Qiita記事
　https://qiita.com/ykhirao/items/c7cba73a3a563be5eac6