データベース - SQL 関数 - 仮想テーブル DUAL
- 1. 概要
- 2. DUAL
- 3. PostgreSQL
1. 概要
例えば、「SYSDATE」のような値を単品で取得したいとき、「FROM」に対応するテーブルがない場合に仮想テーブルとして「DUAL」を使用します。
本ページは、下記のサイトを参考にさせていただきました。
「DUAL表 - Wikipedia」
「SQLServer でダミーテーブルを使ってみる」
「PostgreSQL dual がないので代替策」
2. DUAL
これは、ウィキペディアの説明がわかりやすいですね。
引用すると
SYSDATE や USER など、表を適用せずとも値を返す演算に対して SELECT を行う場合に使われる。
ちょっとびっくりなのは、「この表にはVARCHAR2(1)のDUMMYという列だけがあり、1件だけあるレコードの値は'X'となっている。」ということで、物理的に存在しているのだわ。
例題もわかりやすいので、そのまま引用します。
SELECT 1+1 FROM DUAL;
SELECT SYSDATE FROM DUAL;
SELECT USER FROM DUAL;
なるほど、ではあります。
実際に、「DUAL」は、あるのか?と「DB2」(これも「DUAL」が使える)の「clpplus」で試してみましたら。
SQL> SELECT * FROM DUAL;
DUMMY
-----
X
なるほど、本当だわ。
3. PostgreSQL
「PostgreSQL」には、「DUAL」はないのです。
では、何を使うかちゅうと、何も使わなくていいのです。
「psql」でやってみます。
hogehoge=# SELECT 1+1;
?column?
----------
2
(1 行)
hogehoge=# SELECT CURRENT_TIME;
current_time
--------------------
09:29:36.301364+09
(1 行)
hogehoge=# SELECT USER;
user
----------
fugafuga
(1 行)
「1+1」は、なんじゃこらと怒られていますが、結果は得られます。
物理的に何も使わないし、構文も短くなるし、こっちの方がスマートと思うのは、ワタクシだけ?
|
|