バックエンドの勉強としてFastAPIをいじっているのですが、どうにもDB周りのコマンドで詰まりがちなのでSQL文を最初から学び直しています。
わいCloudFirstやから…とかいう言い訳は効きそうにないので頑張ります。
前回学んだこと
前回はSELECT文について学びました。
INSERT文とは
テーブルにデータを追加するときに使用するコマンドです。
使い方
INSERT INTO
の後にテーブル名、VALUES
の後にカラムに挿入するデータを指定してきます。
INSERT INTO テーブル名 VALUES (データ1, データ2, データ3...);
カラム数が変わらない場合VALUEのみで指定することもできます。
値をセットしない場合はnullとします。
INSERT INTO staff VALUES (1,'ikeda','leader');
INSERT INTO staff VALUES (2,'satou',null);
※カラム数に増減があった場合エラーとなります。
以下のようにカラムを指定した方法もあります。
INSERT INTO staff (id, name) VALUES (2, "山田さん");
コード参考:MySQL INSERTの基本
実は省略できるINTO句
INTO句って要るのかな?
実はMySQLでは省略できます。できるのですが他のRDBMSで省略できない場合もあるので記述していたほうが無難かと思います。
同様にVALUES句もVALUEと省略できるのですが、やはり同じ理由で記述しておいたほうが無難かと思います。
SELECT文を使って別のテーブルからデータを引っ張ってくる
VALUES部分をSELECTとすることで指定できます。
INSERT INTO table1 (カラム1, カラム2, ...)
SELECT table2.カラム
FROM table2 WHERE 条件;
SELECT文問題を解いてみる
実際に身についたか仮想環境Envaderで試してみます。
問題1 starテーブルに対して新たにidが6でvalueが6のレコードを追加してください。
解答は今回学んだことそのままなので結果だけ
select * from star;
+----+-------+
| id | value |
+----+-------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 5 | 5 |
| 6 | 6 |
+----+-------+
問題のとおり追加できました。
問題2 evaluationテーブルに対して新たにuser_idが2,store_idが10,star_idが5のレコードを追加してください。
| 1249 | 30 | 47 | 2 |
| 1250 | 42 | 6 | 5 |
| 1251 | 2 | 10 | 5 |
+------+---------+----------+---------+
追加できました。
とりあえず覚えたということにします。
学んだこと
- INSERT文の使い方、カラムとデータの関係について注意すること。
おかしなエラー出さないためにしっかりとテーブルの構造について理解しておくことが大事なんだなーと思いました。
何か間違っていることなどご指摘ありましたらコメントお願いいたします!
参考資料