SQLでHello, world.って言ったら、すぐに思いつくのはこんな感じだろうか。
いくつかのDBMSではこれでうまくいく。
でも、OracleだとFROM句がないとおこられちゃうよね。
Oracleではこういう時、DUAL表を使う。
うーん、なんでDUAL表なんて使わなくちゃいけないんだろう。。。FROM句省略できたっていいじゃんって、思ってたんだよね。
ところが、そうじゃなかった。標準SQLではSELECT文にはFROM句は必須なんだ。
例えば、PostgreSQLのドキュメントにはFROM句の省略は拡張構文だよ、って書いてある。
PostgreSQL 9.5.3文書 SQLコマンド SELECT
https://www.postgresql.jp/document/9.5/html/sql-select.html
「FROM句の省略」は下の方の「互換性」に記載されている。
確かに考えてみれば、SELECT文はインプットもアウトプットも表なんだから、FROM句なしで結果が1行返ってくるってのは理屈に合わないよね。
無から有が生み出されることになってしまう。
じゃあ、標準SQLで Hello world. したかったら、どうすればいいんだろう。
再び、PostgreSQLのドキュメントを見てみよう。
PostgreSQL 9.5.3文書 SQLコマンド VALUES
https://www.postgresql.jp/document/9.5/html/sql-values.html
大きなコマンドの中において、 SELECT が文法上使える場所ならどこでもVALUESを使用することができます。
そうか、VALUESを使うのか。
というわけで、こうなる。
VALUESってINSERT文の中だけじゃなくって、単独でも使っていいんだね。
でも、逆にOracleではこの単独のVALUESが使えないんだよね。
SQLでHello world.なんて簡単だって思ったけど、なかなかどうして、標準SQLってのは一筋縄ではいかないですねぇ。
参考:
Modern SQL select without from
https://modern-sql.com/use-case/select-without-from
SELECT 'Hello, world.';
いくつかのDBMSではこれでうまくいく。
でも、OracleだとFROM句がないとおこられちゃうよね。
> SELECT 'Hello, world.'; ORA-00923: FROM keyword not found where expected
Oracleではこういう時、DUAL表を使う。
> SELECT 'Hello, world.' FROM DUAL;
うーん、なんでDUAL表なんて使わなくちゃいけないんだろう。。。FROM句省略できたっていいじゃんって、思ってたんだよね。
ところが、そうじゃなかった。標準SQLではSELECT文にはFROM句は必須なんだ。
例えば、PostgreSQLのドキュメントにはFROM句の省略は拡張構文だよ、って書いてある。
PostgreSQL 9.5.3文書 SQLコマンド SELECT
https://www.postgresql.jp/document/9.5/html/sql-select.html
「FROM句の省略」は下の方の「互換性」に記載されている。
確かに考えてみれば、SELECT文はインプットもアウトプットも表なんだから、FROM句なしで結果が1行返ってくるってのは理屈に合わないよね。
無から有が生み出されることになってしまう。
じゃあ、標準SQLで Hello world. したかったら、どうすればいいんだろう。
再び、PostgreSQLのドキュメントを見てみよう。
PostgreSQL 9.5.3文書 SQLコマンド VALUES
https://www.postgresql.jp/document/9.5/html/sql-values.html
大きなコマンドの中において、 SELECT が文法上使える場所ならどこでもVALUESを使用することができます。
そうか、VALUESを使うのか。
というわけで、こうなる。
VALUES('Hello, world.');
VALUESってINSERT文の中だけじゃなくって、単独でも使っていいんだね。
でも、逆にOracleではこの単独のVALUESが使えないんだよね。
SQLでHello world.なんて簡単だって思ったけど、なかなかどうして、標準SQLってのは一筋縄ではいかないですねぇ。
参考:
Modern SQL select without from
https://modern-sql.com/use-case/select-without-from
0 件のコメント:
コメントを投稿