MySQLの関数や型の詳細な仕様については、以下の公式リファレンスマニュアルをご参照ください。
MySQL Mode
MySQLモードで
独自の方言を体験しよう
Miria SQL Learningでは、設定を切り替えることでMySQL特有の構文をブラウザ上でそのまま試すことができます。
文字列結合のCONCAT()や、自動採番のAUTO_INCREMENTなど、MySQL環境でよく目にする機能や特徴的な記法を実際に書いて体験してみましょう。
01
こんな方言に挑戦できます
SQLの基本的な考え方は共通していても、実際の書き方にはRDBMSごとの差があります。Miria SQLでは、その差を「読む」のではなく「書いて確かめる」ことができます。
AUTO_INCREMENTで連番のIDを作る
商品やユーザーのIDのように、新しい行を追加するたびに番号を自動的に増やしたい場合、MySQLでは AUTO_INCREMENT を利用します。この属性をつけるカラムは、必ず主キー(PRIMARY KEY)などのインデックスとして定義されている必要があります。
CREATE TABLE items (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price INT NOT NULL
);
データを挿入する際、対象のカラム指定を省略するか、値に NULL を渡すことで自動的に次の番号が割り当てられます。
-- idカラムを省略してINSERTする例
INSERT INTO items (name, price)
VALUES ('Blue Dress', 7200);
CONCAT()で文字列をつなげる
MySQLの標準設定では、|| は論理OR(どちらかが真なら1)として計算されてしまうため、文字列の結合には CONCAT() 関数を使用します。
SELECT CONCAT(name, ' - ¥', price)
FROM items;
また、MySQLには複数の文字列を特定の区切り文字(カンマなど)で一気に結合できる CONCAT_WS() (Concat With Separator)という非常に便利な独自関数も用意されています。
IFNULL()でNULLを別の値に置き換える
データが存在しない状態(NULL)を、画面表示用に別の値へ置き換えたい場合、MySQLでは IFNULL() がよく使われます。
SELECT
name,
IFNULL(description, '説明なし')
FROM items;
MySQLは標準SQLである COALESCE() 関数もサポートしています。IFNULL(A, B) が「AがNULLならB」という2つの引数しか取れないのに対し、COALESCE(A, B, C) は「AがNULLならB、BもNULLならC…」と複数の候補を指定できる違いがあります。
バッククォートでカラム名やテーブル名を囲む
標準SQLやPostgreSQLでは、テーブル名やカラム名(識別子)を囲む際にダブルクォーテーション(")を使用します。しかしMySQLでは、これらを バッククォート(`) で囲むのが最大の特徴です。
SELECT `id`, `name`
FROM `order_items`
WHERE `status` = 'active';
SELECT や ORDER など、SQLの予約語と同じ名前のカラムを作ってしまった場合、このバッククォートで囲まないと構文エラーになります。他のRDBMSからMySQLへSQLを移植する際、最も書き換えが発生しやすいポイントの一つです。
Comparison
PostgreSQL・Oracleと比べると?
「何をしたいか」は同じでも、DBを切り替えると書き方が変わります。
| やりたいこと | MySQL | PostgreSQL | Oracle DB |
|---|---|---|---|
| IDを自動採番 | AUTO_INCREMENT |
IDENTITY / SERIAL |
IDENTITY / SEQUENCE |
| 文字列を結合 | CONCAT(a, b) |
a || b |
a || b |
| NULLを置換 | IFNULL() |
COALESCE() |
NVL() |
| 件数を制限 | LIMIT 10 |
LIMIT 10 |
FETCH FIRST 10 ROWS ONLY |
※ 表は「そのRDBMSでよく目にする代表的な書き方」を学習用に整理したものです。
PostgreSQLの書き方も確認すると、MySQL特有の部分が
より分かりやすくなります。
Learning Point
「MySQLならどう書く?」を、実際に切り替えて確かめる。
SQLを学ぶとき、一つひとつの構文を独立して丸暗記するとRDBMSが変わったときに混乱しやすくなります。
たとえばCONCAT()を単に覚えるのではなく、「文字列結合をしたい」という目的から考えて、PostgreSQLなら||、MySQLならCONCAT()と比較すると違いが見えてきます。
Try MySQL
読んだら、次は
SQLを動かして
みよう!
構文の違いは、説明を読むだけでは意外と覚えにくいものです。
Miria SQL LearningでMySQLモードを選択して、SQLを書きながらRDBMSごとの違いを確認してみてください。
Next Guide
他のRDBMSでも試してみる
MySQLで覚えた処理が別のデータベースではどう変わるのか、比較してみましょう。
DATABASE GUIDE
PostgreSQLモード
SERIAL、RETURNING、ILIKEなど、PostgreSQLでよく使う構文を体験します。
PostgreSQLを見るDATABASE GUIDE
Oracle DBモード
NVL、FETCH FIRST、MINUSなど、Oracleで目にするSQLとの違いを確認します。
Oracle DBを見るCOMPARISON
PostgreSQL vs MySQL
同じ処理を両DBではどう書くのか、SQL方言の違いを並べて比較します。
比較ページへ