目次
背景
SQLのCRUD処理をパッとかけなかったので、ブログにまとめようと思います。
参照(SELECT文)
SELECT文は、テーブルからデータを参照したいときに使います。 以下のSELECT文は、SELECT句、FROM句、WHERE句で構成されています。
/* WHEREのイコールはカラムと値が等しいかどうかを表している */ /* プログラミングの代入を表すイコールとは違う */ SELECT name, price AS product_price FROM products WHERE id = 20;
登録(INSERT文)
INSERT文は、テーブルにレコードを作成したいときに使います。基本的に1回で1レコード挿入します。テーブルにレコードを挿入とイメージすると分かりやすいです。VALUES句に指定した値リストを列リストで指定したカラムに挿入します。 列名や値をカンマで区切って外側を括弧で括った形式をリストと呼びます。INSERT文では、列リストと値リストを使います。
INSERT INTO テーブル名 (列1, 列2, 列3 .....) VALUES (値1, 値2, 値3......);
以下のINSERT文を実行すると、productsテーブルに1件の商品レコードが作成されます。
INSERT INTO products (id, name, price) VALUES (1, "Water", 500);
INSERT文を使う際、以下の点に注意しましょう。
- 列リストと値リストの数が一致していないとエラーが出る
- 列リスト「(列1, 列2, 列3 .....)」を省略することもできますが、その場合、VALUES句の値が左側から順に各列に割り当てられる
- カラムにdefault値が設定されている場合、デフォルト値を設定しているカラムを列リストと値リストから省略すると、カラムにデフォルト値を設定できる(またはどちらも省略せず、値リストのカラムの部分にDEFAULTと書いてもOK)
- デフォルト値を設定していないカラムを列リストと値リストから省略するとNULLが割り当てられる
以下のINSERT文を実行すると、productsテーブルにidカラムがデフォルト値のデータが作成されます。
INSERT INTO products (id, name, price) VALUES (DEFAULT, "Water", 500);
削除(DELETE文)
DELETE文は、テーブルを消さずに、テーブルから全てのレコードを削除する場合に使用します。INSERT文もDELETE文もUPDATE文も、レコード単位で処理を行うので、SELECT文のように列を指定しなくて大丈夫です。あと、DELETE テーブル名
のように書かないのは削除対象がテーブルではなく、テーブルに含まれる全ての行だからです。
DELETE FROM テーブル名;
例えば以下のクエリを実行した場合、productsテーブルは消えないが、productsテーブルに保存されている全てのレコードが削除されます。
DELETE FROM products;
テーブルの全行だけではなく、一部の行だけを削除する場合、WHERE句で条件を指定します。削除対象を制限したDELETE文のことを「探索型DELETE」と呼びます。
DELETE FROM products WHERE id = 1;
更新(UPDATE文)
UPDATE文は、テーブルの全てのレコードを更新する際に使います。 あまり正確には分かっていないですが、UPDATE文にFROM句がない理由としては、あるテーブルの全てのレコードを更新することは、テーブル全体を更新しているようなものなので、FROMがついていなくても意味的にOKなのかなと思いました(UPDATEの目的語がテーブルでも意味が成立する)。DELETEの場合、テーブルを削除するわけではないので、FROM句は必要なのかなと思いました。
UPDATE文では、更新対象の列と更新後の値は、SET句に記述します。 このUPDATE文を実行すると、全てのレコードの列が式で更新されてしまうので注意しましょう。
UPDATE テーブル名 SET 列名 = 式;
テーブルの全行を更新するのではなく、一部の行だけを更新したい場合、WHERE句を使用します。更新対象を制限したUPDATE文のことを「探索型UPDATE」と呼びます。
UPDATE テーブル名 SET 列名 = 式 WHERE 条件;
複数列を更新したい場合、列をカンマ区切りで並べます。
UPDATE テーブル名 SET 列名 = 式, 列名 = 式, ..... WHERE 条件;
以下のUPDATE文を実行すると、productsテーブルのidが5のレコードのnameカラムとpriceカラムを指定した値に更新します。
UPDATE products SET name = "clean water", price = 321 WHERE id = 5;