はじめに
MySQLを勉強していますが、構文が多くてなかなか覚えられないので、チートシートとして本記事を書きました。
環境
以下のバージョンを使用していることが前提となります。
MySQLバージョン:Ver 8.0.27
基本SQL構文
データベース操作
データベース一覧の確認
SHOW DATABASES;
使用するデータベースの選択
USE データベース名;
データベース作成
CREATE DATABASE データベース名;
データベース削除
DELETE DATABASE データベース名;
テーブル操作
テーブル一覧の確認
SHOW TABLES;
テーブルの作成
CREATE TABLE テーブル名 (
カラム名1 データ型1 (オプション1),
カラム名2 データ型2 (オプション2),
・
・
カラム名n データ型n
);
データ型の例:数値型(INT, DECIMALなど)、文字列型(CHAR, VARCHARなど)、時間型(DATE, TIMEなど)など
詳しいデータ型については下記MySQLホームページが参考になります。
https://dev.mysql.com/doc/refman/8.0/en/data-types.html
オプションの例
UNSIGNED:0を含む自然数のみ扱うようにする。例としてINTにUNSIGNEDオプションをつけると0〜4294967295まで扱えるようになる
CREATE TABLEはいろいろと細かく設定できるので、詳しい内容は下記MySQLホームページが参考になります。
https://dev.mysql.com/doc/refman/8.0/en/create-table.html
レコード追加
INSERT INTO テーブル名 (カラム名1, カラム名2) VALUES (値1, 値2);
INSERT INTO テーブル名 (カラム名1, カラム名2) VALUES (値1, 値2), (値3, 値4), ・・・;
上記のように複数のレコードを一度に入れることも可能。
テーブルの削除
DROP TABLE テーブル名;
データ取得
SELECT カラム名1, カラム名2 FROM テーブル名;
SELECT * FROM テーブル名;
全てのカラムのデータ取得する
条件を指定してデータ取得
SELECT * FROM テーブル WHERE カラム名1 >= 10;
上記例ではカラム名1が10以上のレコード(WHERE カラム名 >= 10)の全てのカラムデータ(*)を取得する。
WHEREで使える比較演算子
比較演算子 | 意味 |
---|---|
> | ~より大きい |
>= | ~以上 |
< | ~より小さい |
<= | ~以下 |
= | ~と等しい |
!=または<> | ~と等しくない |
条件の組み合わせ(AND:かつ)
SELECT * FROM テーブル WHERE カラム名1 >= 10 AND カラム名1 <= 20;
カラム名1が10以上かつ20以下のレコードの全てのカラムのデータを取得する。以下のようにも書くことができる。
SELECT * FROM table1 WHERE カラム名1 BETWEEN 10 AND 20;
条件の組み合わせ(OR:または)
SELECT * FROM テーブル名 WHERE カラム名1 = 5 OR カラム名1 = 10;
カラム名1が5または10であるレコードの全てのカラムのデータを取得。以下のようにも書くことができる。
SELECT * FROM テーブル名 WHERE カラム名1 IN (5, 10);
特定の文字列を持つデータ抽出
SELECT * FROM テーブル名 WHERE カラム名 LIKE 'UTSUBO';
カラム内に'UTSUBO'という文字列を持つレコードの全てのカラムデータを取得する。
※'UTSUBO'の大文字・小文字を区別しない
SELECT * FROM テーブル名 WHERE カラム名 NOT LIKE 'UTSUBO';
カラム内に'UTSUBO'という文字列を持たないレコードの全てのカラムデータを取得する。
※'UTSUBO'の大文字・小文字を区別しない
上記だと大文字、大文字・小文字の区別ができないので、
SELECT * FROM テーブル名 WHERE カラム名 LIKE BINARY 'utsubo';
とすると、小文字の'utsubo'を持つレコードの全てのカラムデータを取得する。
また%や_のワイルドカードを使うことができる。
%や_自体の抽出をしたいときは%や\_のようにバックスラッシュをつける。
NULLの抽出にはISを使う。条件反転はIS NOT
SELECT * FROM テーブル名 WHERE カラム名 IS NULL;
抽出したデータの並び替え
SELECT * FROM テーブル名 ORDER BY カラム名;
カラム名を小さい順で並べる(アルファベットの場合Aから並べる)
SELECT * FROM テーブル名 ORDER BY カラム名 DESC;
カラム名を大きい順で並べる(アルファベットの場合Zから並べる)
上位のレコードの抽出
SELECT * FROM テーブル名 LIMIT 3;
上位3つのレコードを抽出する
SELECT * FROM テーブル名 ORDER BY カラム名 DESC LIMIT 3;
上記のように大きい順に並べ替えた後に上位3つを抽出することもできる。
また、OFFSETをつけることもできる。
SELECT * FROM テーブル名 ORDER BY カラム名 DESC LIMIT 3 OFFSET 2;
上記を実行すると上から2つのレコードを無視して、大きい順に並び替えた後、上位から3, 4, 5つ目のレコードを抽出する。
レコードの更新
UPDATE テーブル名 SET カラム名1 = カラム名1 + 5 WHERE カラム名1 >= 10;
上記ではカラム名1内で値が10以下のデータ(WHERE カラム名1 >=10)に5を加えている(カラム名1 =カラム名1 + 5)。
※カラム名1 += 5のように書くとエラーになるので注意
レコードの削除
DELETE FROM テーブル名 WHERE カラム名 < 10;
カラム名内のデータが10未満のレコードを削除する
全てのレコードの削除
TRUNCATE TABLE テーブル名;
カラムの追加
ALTER TABLE テーブル名 ADD カラム名 データ型;
ALTER TABLE テーブル名 ADD カラム名2 データ型 AFTER カラム名1;
上記のように追加したいカラムの列を指定できる。上記ではカラム1の次にカラム名2を追加している。
ALTER TABLE テーブル名 ADD カラム名2 データ型 FIRST;
上記を実行すると元のテーブルの初めの列にカラム名1があるとして、カラム名1の前の列にカラム名2を追加できる。
カラムの削除
ALTER TABLE テーブル名 DROP カラム名;
カラムの変更
ALTER TABLE カラム名1 CHANGE カラム名2 データ型2;
カラム名1からカラム名2、データ型2へ変更する
カラム名の変更
ALTER TABLE カラム名1 RENAME カラム名2;
カラム名1をカラム名2に変更する。
参考記事
以下の記事を参考にさせていただきました。