👻

【戒め】すぐ忘れちゃうMySQL基本4構文【備忘録】

2020/10/02に公開

はじめに

SQLの構文ってすぐ記憶からDROPしませんか?(おつむ弱すぎでは? とか思った人、ちょっと前に出なさい。)
特にやっぱりUPDATEやINSERTあたりはど忘れしやすいですよね。
というわけで今更記事にすることでもないんですが、忘れないために記事にします。

SELECT文

SELECT {表示するカラム名} FROM {テーブル名} WHERE {絞り込み条件} LIMIT {表示する件数} ORDER BY {ソートしたいカラム名} {ASC(昇順)/DESC(降順)};

指定したテーブルからデータを取得してくる構文です。
一番良く使うのでなかなか忘れようがないと思います。
表示するカラム のところはテーブルのカラム名をカンマ区切りで列挙していくのですが、だいたい面倒くさいので * にすることが多いかと思います。全件取得するときは WHERE 句と LIMIT 句は要りません。[1]
主キーの昇順で良ければ ORDER BY 句も要りません。

下記の例では日本に住んでいる人間を取得しています。

長い例
SELECT id, name, sex, born_at, arrested_at, arrested_reason, note FROM humans WHERE country = 'japan' LIMIT 30 ORDER BY id ASC;
短い例
SELECT * FROM humans;

INSERT文

INSERT INTO {テーブル名} (カラム名) VALUES ();

指定されたテーブルにデータを挿入……というか、新規で作成する構文です。
挿入するデータのカラム名と値はカンマ区切りで記述します。その時カラム名と値は同じ順番で列挙することになります。カラム名の指定は省略することができるのですが、値は省略できないので、労力のことを考えるとカラム名を指定したほうが無難です。

下記の例では生まれたばかりの人間「太郎」を挿入しています。

INSERT INTO humans (name, sex, born_at) VALUES ('太郎', 1, NOW());

UPDATE文

UPDATE {テーブル名} SET {カラム名} = {値} WHERE {絞り込み条件};

指定されたテーブルのカラム名の値を書き換えます。
WHERE 句をすっ飛ばすと当該テーブルの当該カラムは 全部書き換わります。
よく事故るので、UPDATE文実行の前には必ずSELECT文を実行して、どれが書き換わってしまうのか確かめましょう。前職の後輩が本番でやらかして徹夜で復旧してるのを見たことがあります……

下記の例では罪を犯した人間「太郎」がどんな罪を犯したのか、いつ収監されたのかのデータを書き換えています。

UPDATE humans SET has_sin = 1, arrested_at = NOW(), arrested_reason = '不正指令電磁的記録に関する罪' WHERE name = '太郎';

DELETE文

DELETE FROM {テーブル名} WHERE {絞り込み条件};

指定されたデータを削除する構文です。SELECT文とよく似ているのが最大の特徴です。
WHERE 句をすっ飛ばすと当該テーブルの中身は 全部消えます。
よく事故るので、DELETE文実行の前には必ずSELECT文を実行して、どれが消えてしまうのか確かめましょう。やらかす率は思いのほか高いので、事前にdump取るとかした方が良いです。RDSならスナップショットから回復できますが……
何らかの事情でテーブル内を全消ししたいときは TRUNCATE 文を使った方が高速です。

下記の例では罪を抱えた人間を削除しています。

DELETE FROM humans WHERE has_sin = 1;
脚注
  1. LIMIT句はMySQLとPostgreSQLぐらいでしか使えないそうなのでタイトル変えました ↩︎

Discussion