MySQL Mode
MySQLモードで
独自の方言を体験しよう
Miria SQL Learningでは、設定を切り替えることでMySQL特有の構文をブラウザ上でそのまま試すことができます。
文字列結合のCONCAT()や、自動採番のAUTO_INCREMENTなど、MySQL環境でよく目にする機能や特徴的な記法を実際に書いて体験してみましょう。
01
こんな方言に挑戦できます
SQLの基本的な考え方は共通していても、実際の書き方にはRDBMSごとの差があります。Miria SQLでは、その差を「読む」のではなく「書いて確かめる」ことができます。
AUTO_INCREMENTで連番のIDを作る
商品やユーザーのIDのように、新しい行を追加するたびに番号を自動的に増やしたい場合、MySQLではAUTO_INCREMENTを利用できます。
CREATE TABLE items (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price INT NOT NULL
);
この状態でidを指定せずに商品を追加すると、IDが自動的に採番されます。
INSERT INTO items (name, price)
VALUES ('Blue Dress', 7200);
PostgreSQLではGENERATED ... AS IDENTITYや従来のSERIAL、OracleではIDENTITY列やSEQUENCEなどが利用されます。「連番を作る」という目的は同じでも、その表現方法には違いがあります。
CONCAT()で文字列をつなげる
複数の文字列をひとつに結合したい場合、MySQLではCONCAT()がよく使われます。
SELECT CONCAT(name, ' - ¥', price)
FROM items;
たとえば商品名と価格をひとつの文字列として表示したい場合などに利用できます。
PostgreSQLやOracleでは||が文字列結合として使われます。しかしMySQLの通常設定では、||は文字列結合ではなく論理ORとして扱われます。
IFNULL()でNULLを別の値に置き換える
データベースでは、値が存在しない状態をNULLとして扱います。MySQLではIFNULL()を使うことで、NULLだった場合に表示する値を指定できます。
SELECT
name,
IFNULL(description, '説明なし')
FROM items;
PostgreSQLでは同じ目的でCOALESCE()がよく利用されます。OracleではNVL()も代表的です。NULLを扱うという目的は同じでも、RDBMSごとに馴染みのある関数が異なります。
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方言の違いを並べて比較します。
比較ページへ