PostgreSQL Mode
PostgreSQLモードで
独自の方言を体験しよう
Miria SQL Learningでは、設定を切り替えることで PostgreSQL特有の構文をブラウザ上でそのまま試すことができます。
SQLの基本構文はMySQLやOracleと共通していますが、
SERIAL、RETURNING、ILIKE
など、PostgreSQL環境でしか通らない、あるいはよく目にする
独自の機能や特徴的な記法を実際に書いて体験してみましょう。
01
こんな方言に挑戦できます
PostgreSQLモードでは、他のRDBMSとは少し違う こんな構文の実行結果やエラーを体験できます。
SERIALで連番のIDを作る
PostgreSQLでは、自動的に増加する整数IDを定義する方法として
SERIAL という記法が広く使われてきました。
CREATE TABLE items (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price INTEGER NOT NULL
);
他のDBモードでこのSQLを実行するとどうなるか、ぜひエディタで試してみてください。
INSERTした結果をそのまま取得する
PostgreSQLモードでは INSERT などの変更処理に
RETURNING を付けて、変更された行の値をすぐに取得できます。
INSERT INTO items (name, price)
VALUES ('Blue Hoodie', 6800)
RETURNING id, name, price;
新しい商品を登録した直後に、自動採番された id を即座に確認したい場合に便利な機能です。
ILIKEで大文字・小文字を区別せず検索する
PostgreSQLモードなら、標準の LIKE に加えて
ILIKE を試すことができます。
SELECT *
FROM items
WHERE name ILIKE '%hoodie%';
Hoodie、HOODIE、hoodie といった表記の違いを無視して検索できるか、データを入れて実験してみましょう。
EXCEPTで「片方にだけ存在する行」を取得する
2つのSELECT結果を比較し、最初の結果に存在して2つ目には存在しない行を取得したい場合には EXCEPT を利用します。
SELECT customer_id
FROM customers
EXCEPT
SELECT customer_id
FROM orders;
EXCEPT 自体はSQLの標準的な集合演算ですが、実はOracleモード等に切り替えるとエラーになります(Oracleでは MINUS を使うためです)。こうした環境ごとの挙動の違いもアプリ内で体感できます。
Comparison
MySQL・Oracleと比べると?
同じ目的の処理でも、RDBMSモードを切り替えると代表的な書き方が異なります。
| 目的 | PostgreSQL | MySQL | Oracle DB |
|---|---|---|---|
| 自動採番 | SERIAL / IDENTITY |
AUTO_INCREMENT |
IDENTITY / SEQUENCE |
| 大文字・小文字を区別しない検索 | ILIKE |
照合順序などに依存 | 関数・照合設定などを利用 |
| 変更行の値を返す | RETURNING |
PostgreSQLとは異なる方式 | RETURNING INTO |
| 件数制限 | LIMIT 10 |
LIMIT 10 |
FETCH FIRST 10 ROWS ONLY |
| 文字列結合 | a || b |
CONCAT(a, b) |
a || b |
※ 表は学習上の代表例です。アプリ内のバリデーションもこれに沿って判定されます。
Learning Point
「PostgreSQLの書き方」を丸暗記しない。
実務では、ひとつのRDBMSだけを知っていれば十分とは限りません。
たとえば LIMIT を覚えるだけではなく、「これは結果件数を制限するための構文であり、Oracleモードに切り替えたらエラーになる」と体験しておくことで、RDBMSが変わっても対応しやすくなります。
Miria SQL Learningでは、PostgreSQLの構文を覚えることそのものより、共通する考え方とDBごとの差分をセットで理解することを重視しています。
Try PostgreSQL
読んだら、次は
SQLを動かしてみよう。
構文の違いは、説明を読むだけでは意外と覚えにくいものです。
Miria SQL LearningでPostgreSQLモードを選択して、SQLを書きながらRDBMSごとの違いを確認してみてください。
Next Guide
他のRDBMSも比較してみる
DATABASE GUIDE
MySQLとは?
AUTO_INCREMENT、CONCAT()、IFNULL()など、MySQLモードでよく使われる構文を解説します。
MySQLガイドへCOMPARISON
PostgreSQL vs MySQL
SQL方言だけでなく、両RDBMSの特徴や考え方の違いを比較します。
比較ガイドへPRACTICE
PostgreSQLを実際に試す
読むだけで終わらせず、ブラウザ上のSQLエディタでPostgreSQLの構文を試します。
学習を始める