Oracle DB Mode
Oracle DBモードで
独自の方言を体験しよう
Miria SQL Learningでは、設定を切り替えることでOracle Database特有の構文をブラウザ上でそのまま試すことができます。
FETCH FIRSTによる件数制限や、DUALを使ったクエリなど、MySQLやPostgreSQLとは書き方が異なるOracleらしいSQLを実際に書いて体験してみましょう。
01
こんな方言に挑戦できます
SELECTやINSERTなどの基本は同じでも、Oracle Databaseへ切り替えると使う構文や関数が変わる場面があります。Miria SQLでは、その違いを実際にSQLを書きながら確認できます。
FETCH FIRSTで取得件数を制限する
検索結果から最初の数件だけ取得したい場合、Oracle DatabaseではFETCH FIRST n ROWS ONLYを利用できます。
SELECT *
FROM items
ORDER BY price DESC
FETCH FIRST 5 ROWS ONLY;
MySQLやPostgreSQLではLIMIT 5がよく使われます。一方、Oracle Databaseモードで同じ感覚でLIMITを書くとエラーになります。アプリ内でぜひエラーを体験してみてください。
NVL()でNULLを別の値に置き換える
値が存在しないNULLを別の値へ置き換えたい場合、Oracle DatabaseではNVL()がよく利用されます。
SELECT
name,
NVL(description, '説明なし') AS description
FROM items;
MySQLではIFNULL()、OracleではNVL()を目にする機会があります。標準SQLのCOALESCE()も利用できるため、「NULLを別の値へ置き換える」という目的から理解すると整理しやすくなります。
MINUSで差集合を求める
ひとつ目のSELECT結果には存在するものの、ふたつ目のSELECT結果には存在しない行を取得したい場合、Oracle DatabaseではMINUSが代表的な書き方です。
SELECT customer_id
FROM customers
MINUS
SELECT customer_id
FROM orders;
PostgreSQLでは同じような差集合をEXCEPTで表現します。Oracle DBモードでEXCEPTを入力すると、構文エラーの洗礼を受けることができます。
DUALを使って式や関数だけを実行する
Oracle Databaseでは、実際の業務テーブルを参照せず式や関数の結果だけ確認したいときに、DUALという特殊な1行のテーブルを利用できます。
SELECT 1 + 1
FROM DUAL;
Comparison
PostgreSQL・MySQLと比べると?
同じ目的のSQLでも、Oracle Databaseへ切り替えると関数・構文・データ型の名前が変わることがあります。
| やりたいこと | Oracle DB | PostgreSQL | MySQL |
|---|---|---|---|
| 件数を制限 | FETCH FIRST |
LIMIT |
LIMIT |
| NULLを置換 | NVL() |
COALESCE() |
IFNULL() |
| 差集合 | MINUS |
EXCEPT |
EXCEPT |
| 文字列結合 | a || b |
a || b |
CONCAT(a, b) |
| 文字列型 | VARCHAR2 |
VARCHAR |
VARCHAR |
| 数値型 | NUMBER |
INTEGER / NUMERIC |
INT / DECIMAL |
※ 表は各RDBMSでよく目にする代表例を学習用に整理したものです。
Learning Point
「LIMITが使えない」で終わらず、Oracleならどう書くかを考える。
RDBMSが変わったときに重要なのは、覚えていた構文が使えないこと自体ではありません。
たとえばLIMITが使えなくても、本来やりたいことは「取得する行数を制限する」ことです。Oracle DatabaseならFETCH FIRSTという別の書き方へ置き換えられます。
同じように、IFNULL()とNVL()、EXCEPTとMINUSを目的から比較することで、SQLをRDBMSごとの差分として理解できるようになります。
Try Oracle DB
読んだら、次は
SQLを動かしてみよう。
Oracleの構文を覚えるには、実際に手を動かすのが一番です。
Miria SQL LearningでOracle DBモードを選択して、他のDBとの違いを体感してみてください。
Next Guide
他のRDBMSでも試してみる
Oracle Databaseで覚えた処理がPostgreSQLやMySQLではどう変わるのか、続けて比較できます。
DATABASE GUIDE
PostgreSQLモード
SERIAL、RETURNING、ILIKE、EXCEPTなど、PostgreSQLでよく見る構文を体験します。
PostgreSQLを見るDATABASE GUIDE
MySQLモード
AUTO_INCREMENT、CONCAT()、IFNULL()など、MySQLらしい書き方を体験します。
MySQLを見るCOMPARISON
PostgreSQL vs MySQL
同じ処理を両DBではどう書くのか、SQL方言の違いを並べて比較します。
比較ページへ